paginate api list dokter
This commit is contained in:
@@ -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")
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user