feat: improve layanan search and pagination
This commit is contained in:
@@ -6,8 +6,10 @@ import (
|
||||
)
|
||||
|
||||
type LayananListParams struct {
|
||||
Page int
|
||||
PerPage int
|
||||
Page int
|
||||
PerPage int
|
||||
Search string
|
||||
DepartemenID string
|
||||
}
|
||||
|
||||
type LayananPage struct {
|
||||
@@ -21,29 +23,34 @@ type LayananDepartemen struct {
|
||||
LayananDepartemenID int64 `json:"LayananDepartemenID"`
|
||||
LayananID *string `json:"LayananID"`
|
||||
NamaLayanan *string `json:"NamaLayanan"`
|
||||
Harga *string `json:"Harga"`
|
||||
LayananCode *string `json:"LayananCode"`
|
||||
}
|
||||
|
||||
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 {
|
||||
FROM layanandepartemen ld
|
||||
LEFT JOIN masterlayanan ml ON ml.LayananID = ld.LayananID
|
||||
WHERE ld.NA = 'N'
|
||||
AND (? = '' OR ld.DepartemenID = ?)
|
||||
AND (? = '' OR ld.LayananID LIKE ? OR ml.LayananKode LIKE ? OR ml.Nama LIKE ?)
|
||||
`, params.DepartemenID, params.DepartemenID, params.Search, "%"+params.Search+"%", "%"+params.Search+"%", "%"+params.Search+"%").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)
|
||||
ld.LayananID, ml.LayananKode, ml.Nama
|
||||
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'
|
||||
WHERE ld.NA = 'N'
|
||||
AND (? = '' OR ld.DepartemenID = ?)
|
||||
AND (? = '' OR ld.LayananID LIKE ? OR ml.LayananKode LIKE ? OR ml.Nama LIKE ?)
|
||||
ORDER BY ld.TanggalBuat DESC
|
||||
LIMIT ? OFFSET ?
|
||||
`, params.PerPage, (params.Page-1)*params.PerPage)
|
||||
`, params.DepartemenID, params.DepartemenID, params.Search, "%"+params.Search+"%", "%"+params.Search+"%", "%"+params.Search+"%", params.PerPage, (params.Page-1)*params.PerPage)
|
||||
if err != nil {
|
||||
return LayananPage{}, err
|
||||
}
|
||||
@@ -52,16 +59,16 @@ func (r MySQLLayananRepository) ListLayanan(ctx context.Context, params LayananL
|
||||
items := make([]LayananDepartemen, 0)
|
||||
for rows.Next() {
|
||||
var item LayananDepartemen
|
||||
var groupLayananID, departemen, layananID, namaLayanan, harga sql.NullString
|
||||
var groupLayananID, departemen, layananID, layananCode, namaLayanan sql.NullString
|
||||
if err := rows.Scan(&groupLayananID, &departemen, &item.LayananDepartemenID,
|
||||
&layananID, &namaLayanan, &harga); err != nil {
|
||||
&layananID, &layananCode, &namaLayanan); err != nil {
|
||||
return LayananPage{}, err
|
||||
}
|
||||
item.GroupLayananID = nullStringPtr(groupLayananID)
|
||||
item.Departemen = nullStringPtr(departemen)
|
||||
item.LayananID = nullStringPtr(layananID)
|
||||
item.LayananCode = nullStringPtr(layananCode)
|
||||
item.NamaLayanan = nullStringPtr(namaLayanan)
|
||||
item.Harga = nullStringPtr(harga)
|
||||
items = append(items, item)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
|
||||
Reference in New Issue
Block a user