Files
cpone_midleware/internal/repository/layanan.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
}