paginate api list dokter

This commit is contained in:
renaldybrada
2026-02-03 09:32:24 +07:00
parent f9bdde187e
commit 11bcf44f6b
6 changed files with 76 additions and 10 deletions
+6 -5
View File
@@ -21,13 +21,13 @@ func NewDokterHandler(repo IDokterRepository) DokterHandler {
// @Summary Get List Dokter
// @Tags Dokter
// @Param search query string false "Search keyword"
// @Param limit query string false "Limit" default(10)
// @Param offset query string false "Offset" default(0)
// @Success 200 {object} []DokterResponse
// @Failure 500 {object} shared.BaseErrorResponse
// @Router /dokter/ [get]
func (h DokterHandler) ListDokter(c *gin.Context) {
var list ListDokterModel
list, err := h.repo.SearchableListDokter(c)
result, err := h.repo.SearchableListDokter(c)
if err != nil {
errorResponse := baseResponse.BaseErrorResponse{
Success: false,
@@ -38,8 +38,9 @@ func (h DokterHandler) ListDokter(c *gin.Context) {
return
}
response := baseResponse.ToBaseResponse(
list.ToResponseList(),
response := baseResponse.ToBaseResponsePaginate(
result.Data.ToResponseList(),
result.Paging,
true,
200,
"success get doctor's list")
+9 -1
View File
@@ -1,6 +1,9 @@
package dokter
import "database/sql"
import (
"antrian-operasi/internal/shared"
"database/sql"
)
type DokterModel struct {
ID string `json:"id" db:"id"`
@@ -18,3 +21,8 @@ type DokterResponse struct {
HfisCode *string `json:"hfis_code"`
NamaKsm string `json:"nama_ksm"`
}
type ListDokterModelPaginate struct {
Data ListDokterModel
Paging shared.PaginationInfo
}
+23 -4
View File
@@ -2,7 +2,9 @@ package dokter
import (
"antrian-operasi/internal/database"
"antrian-operasi/internal/shared"
"errors"
"log"
queryUtils "antrian-operasi/internal/utils/query"
@@ -13,7 +15,7 @@ const DB_NAME = "db_antrian"
const TBL_NAME = "data_pegawai"
type IDokterRepository interface {
SearchableListDokter(c *gin.Context) ([]DokterModel, error)
SearchableListDokter(c *gin.Context) (ListDokterModelPaginate, error)
GetDokterById(c *gin.Context, id string) (DokterModel, error)
}
@@ -72,8 +74,10 @@ func baseSelectQuery() queryUtils.DynamicQuery {
return query
}
func (r dokterRepo) SearchableListDokter(c *gin.Context) ([]DokterModel, error) {
var result []DokterModel
func (r dokterRepo) SearchableListDokter(c *gin.Context) (ListDokterModelPaginate, error) {
var result ListDokterModelPaginate
limit := shared.ParseQueryLimit(c)
offset := shared.ParseQueryOffset(c)
search := c.Query("search")
// base query
@@ -105,8 +109,23 @@ func (r dokterRepo) SearchableListDokter(c *gin.Context) ([]DokterModel, error)
return result, nil
}
// query count
countData, err := r.queryBuilder.ExecuteCount(c, dbconn, query)
if err != nil {
log.Printf("Unable to execute query count : %s ", err)
return result, err
}
result.Paging.Limit = limit
result.Paging.Offset = offset
result.Paging.Total = int(countData)
result.Paging.CalculatePagingInfo()
// query data
queryData := query
queryData.Limit = limit
queryData.Offset = offset
err = r.queryBuilder.ExecuteQuery(
c, dbconn, query, &result)
c, dbconn, queryData, &result.Data)
if err != nil {
// log.Fatalf("unable to execute query %s", err)
return result, nil