79 lines
2.6 KiB
Go
79 lines
2.6 KiB
Go
package repository
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
)
|
|
|
|
type LayananListParams struct {
|
|
Page int
|
|
PerPage int
|
|
Search string
|
|
DepartemenID string
|
|
}
|
|
|
|
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"`
|
|
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 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.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 (? = '' OR ld.DepartemenID = ?)
|
|
AND (? = '' OR ld.LayananID LIKE ? OR ml.LayananKode LIKE ? OR ml.Nama LIKE ?)
|
|
ORDER BY ld.TanggalBuat DESC
|
|
LIMIT ? OFFSET ?
|
|
`, 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
|
|
}
|
|
defer rows.Close()
|
|
|
|
items := make([]LayananDepartemen, 0)
|
|
for rows.Next() {
|
|
var item LayananDepartemen
|
|
var groupLayananID, departemen, layananID, layananCode, namaLayanan sql.NullString
|
|
if err := rows.Scan(&groupLayananID, &departemen, &item.LayananDepartemenID,
|
|
&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)
|
|
items = append(items, item)
|
|
}
|
|
if err := rows.Err(); err != nil {
|
|
return LayananPage{}, err
|
|
}
|
|
return LayananPage{Items: items, Total: total}, nil
|
|
}
|