72 lines
2.0 KiB
Go
72 lines
2.0 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
)
|
|
|
|
type LayananListParams struct {
|
|
Page int
|
|
PerPage int
|
|
}
|
|
|
|
type LayananPage struct {
|
|
Items []LayananDepartemen
|
|
Total int
|
|
}
|
|
|
|
type LayananDepartemen struct {
|
|
GroupLayananID *string `json:"GroupLayananID"`
|
|
Departemen *string `json:"Departemen"`
|
|
LayananDepartemenID int64 `json:"LayananDepartemenID"`
|
|
LayananID *string `json:"LayananID"`
|
|
NamaLayanan *string `json:"NamaLayanan"`
|
|
Harga *string `json:"Harga"`
|
|
}
|
|
|
|
func (r MySQLLayananRepository) ListLayanan(ctx context.Context, params LayananListParams) (LayananPage, error) {
|
|
var total int
|
|
if err := r.db.QueryRowContext(ctx, `
|
|
SELECT COUNT(*)
|
|
FROM layanandepartemen
|
|
WHERE NA = 'N' AND DepartemenID = 'MCU'
|
|
`).Scan(&total); err != nil {
|
|
return LayananPage{}, err
|
|
}
|
|
|
|
rows, err := r.db.QueryContext(ctx, `
|
|
SELECT ld.GroupLayananID, d.Nama, ld.LayananDepartemenID,
|
|
ld.LayananID, ml.Nama, CAST(ld.Harga AS CHAR)
|
|
FROM layanandepartemen ld
|
|
LEFT JOIN departemen d ON d.DepartemenID = ld.DepartemenID
|
|
LEFT JOIN masterlayanan ml ON ml.LayananID = ld.LayananID
|
|
WHERE ld.NA = 'N' AND ld.DepartemenID = 'MCU'
|
|
ORDER BY ld.TanggalBuat DESC
|
|
LIMIT ? OFFSET ?
|
|
`, params.PerPage, (params.Page-1)*params.PerPage)
|
|
if err != nil {
|
|
return LayananPage{}, err
|
|
}
|
|
defer rows.Close()
|
|
|
|
items := make([]LayananDepartemen, 0)
|
|
for rows.Next() {
|
|
var item LayananDepartemen
|
|
var groupLayananID, departemen, layananID, namaLayanan, harga sql.NullString
|
|
if err := rows.Scan(&groupLayananID, &departemen, &item.LayananDepartemenID,
|
|
&layananID, &namaLayanan, &harga); err != nil {
|
|
return LayananPage{}, err
|
|
}
|
|
item.GroupLayananID = nullStringPtr(groupLayananID)
|
|
item.Departemen = nullStringPtr(departemen)
|
|
item.LayananID = nullStringPtr(layananID)
|
|
item.NamaLayanan = nullStringPtr(namaLayanan)
|
|
item.Harga = nullStringPtr(harga)
|
|
items = append(items, item)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return LayananPage{}, err
|
|
}
|
|
return LayananPage{Items: items, Total: total}, nil
|
|
}
|