refactor list antrian query
This commit is contained in:
No files matched your search
@@ -100,7 +100,13 @@ func (h AntrianOperasiHandler) CreateAntrianOperasi(c *gin.Context) {
|
|||||||
// @Failure 500 {object} shared.BaseErrorResponse
|
// @Failure 500 {object} shared.BaseErrorResponse
|
||||||
// @Router /antrian-operasi/ [get]
|
// @Router /antrian-operasi/ [get]
|
||||||
func (h AntrianOperasiHandler) GetListAntrianOperasi(c *gin.Context) {
|
func (h AntrianOperasiHandler) GetListAntrianOperasi(c *gin.Context) {
|
||||||
res, err := h.repo.SearchableListAntrianOperasi(c)
|
var query AntrianQuery
|
||||||
|
if err := c.ShouldBindQuery(&query); err != nil {
|
||||||
|
c.JSON(400, gin.H{"error": err.Error()})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
res, err := h.repo.SearchableListAntrianOperasi(c.Request.Context(), query)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.JSON(500, shared.BaseErrorResponse{
|
c.JSON(500, shared.BaseErrorResponse{
|
||||||
Success: false,
|
Success: false,
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ import (
|
|||||||
queryUtils "antrian-operasi/internal/utils/query"
|
queryUtils "antrian-operasi/internal/utils/query"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"log"
|
"log"
|
||||||
"slices"
|
|
||||||
"strconv"
|
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"context"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
)
|
)
|
||||||
@@ -23,7 +23,7 @@ const TBL_DOKTER_OPERASI = "data_pasien_operasi_data_pegawai_2"
|
|||||||
|
|
||||||
type IAntrianOperasiRepository interface {
|
type IAntrianOperasiRepository interface {
|
||||||
CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error)
|
CreateAntrianOperasi(c *gin.Context, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error)
|
||||||
SearchableListAntrianOperasi(c *gin.Context) (ListPasienOperasiPaginate, error)
|
SearchableListAntrianOperasi(c context.Context, q AntrianQuery) (ListPasienOperasiPaginate, error)
|
||||||
GetAntrianOperasiById(c *gin.Context, id string) (DetailPasienOperasiResultQuery, error)
|
GetAntrianOperasiById(c *gin.Context, id string) (DetailPasienOperasiResultQuery, error)
|
||||||
UpdateAntrianOperasi(c *gin.Context, id string, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error)
|
UpdateAntrianOperasi(c *gin.Context, id string, req CreatePasienOperasiRequest) (CreatePasienOperasiRequest, error)
|
||||||
UpdateStatusAntrianOperasi(c *gin.Context, id string, req StatusPasienRequest) (StatusPasienRequest, error)
|
UpdateStatusAntrianOperasi(c *gin.Context, id string, req StatusPasienRequest) (StatusPasienRequest, error)
|
||||||
@@ -360,21 +360,8 @@ func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasie
|
|||||||
return req, nil
|
return req, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPasienOperasiPaginate, error) {
|
func (r antrianOperasiRepo) SearchableListAntrianOperasi(c context.Context, q AntrianQuery) (ListPasienOperasiPaginate, error) {
|
||||||
var result ListPasienOperasiPaginate
|
var result ListPasienOperasiPaginate
|
||||||
search := c.Query("search")
|
|
||||||
availableType := []string{"all", "kategori", "spesialis", "sub-spesialis"}
|
|
||||||
antrianType := c.Query("type")
|
|
||||||
antrianTypeId, err := strconv.Atoi(c.Query("type_id"))
|
|
||||||
if err != nil {
|
|
||||||
antrianTypeId = 0
|
|
||||||
}
|
|
||||||
if !slices.Contains(availableType, antrianType) {
|
|
||||||
antrianType = "all"
|
|
||||||
}
|
|
||||||
limit := shared.ParseQueryLimit(c)
|
|
||||||
offset := shared.ParseQueryOffset(c)
|
|
||||||
statusOp := c.Query("status")
|
|
||||||
|
|
||||||
query := queryUtils.DynamicQuery{
|
query := queryUtils.DynamicQuery{
|
||||||
From: TBL_NAME,
|
From: TBL_NAME,
|
||||||
@@ -419,7 +406,7 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa
|
|||||||
var selectFilter []queryUtils.DynamicFilter
|
var selectFilter []queryUtils.DynamicFilter
|
||||||
typeIdColumn := ""
|
typeIdColumn := ""
|
||||||
|
|
||||||
switch antrianType {
|
switch q.Type {
|
||||||
case "kategori":
|
case "kategori":
|
||||||
typeIdColumn = "dko.id"
|
typeIdColumn = "dko.id"
|
||||||
query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
|
query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
|
||||||
@@ -436,8 +423,8 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa
|
|||||||
query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
|
query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
|
||||||
}
|
}
|
||||||
|
|
||||||
if antrianTypeId != 0 && antrianType != "all" {
|
if q.TypeID != 0 && q.Type != "all" {
|
||||||
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: typeIdColumn, Operator: queryUtils.OpEqual, Value: antrianTypeId})
|
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: typeIdColumn, Operator: queryUtils.OpEqual, Value: q.TypeID})
|
||||||
}
|
}
|
||||||
|
|
||||||
query.Joins = []queryUtils.Join{
|
query.Joins = []queryUtils.Join{
|
||||||
@@ -480,18 +467,18 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa
|
|||||||
}
|
}
|
||||||
|
|
||||||
// filtering search results
|
// filtering search results
|
||||||
if search != "" {
|
if q.Search != "" {
|
||||||
searchFilters := []queryUtils.DynamicFilter{
|
searchFilters := []queryUtils.DynamicFilter{
|
||||||
{Column: "dpo.No_KTP", Operator: queryUtils.OpILike, Value: "%" + search + "%"},
|
{Column: "dpo.No_KTP", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||||
{Column: "dpo.No_rekam_medis", Operator: queryUtils.OpILike, Value: "%" + search + "%"},
|
{Column: "dpo.No_rekam_medis", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||||
{Column: "dpo.Nama_pasien", Operator: queryUtils.OpILike, Value: "%" + search + "%"},
|
{Column: "dpo.Nama_pasien", Operator: queryUtils.OpILike, Value: "%" + q.Search + "%"},
|
||||||
}
|
}
|
||||||
|
|
||||||
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"})
|
query.Filters = append(query.Filters, queryUtils.FilterGroup{Filters: searchFilters, LogicOp: "OR"})
|
||||||
}
|
}
|
||||||
|
|
||||||
if statusOp != "" {
|
if q.Status != "" {
|
||||||
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.Status_operasi", Operator: queryUtils.OpEqual, Value: statusOp})
|
selectFilter = append(selectFilter, queryUtils.DynamicFilter{Column: "dpo.Status_operasi", Operator: queryUtils.OpEqual, Value: q.Status})
|
||||||
}
|
}
|
||||||
|
|
||||||
// wiring all select filter
|
// wiring all select filter
|
||||||
@@ -509,15 +496,15 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) (ListPa
|
|||||||
log.Printf("Unable to execute query count : %s ", err)
|
log.Printf("Unable to execute query count : %s ", err)
|
||||||
return result, err
|
return result, err
|
||||||
}
|
}
|
||||||
result.Paging.Limit = limit
|
result.Paging.Limit = q.Limit
|
||||||
result.Paging.Offset = offset
|
result.Paging.Offset = q.Offset
|
||||||
result.Paging.Total = int(countData)
|
result.Paging.Total = int(countData)
|
||||||
result.Paging.CalculatePagingInfo()
|
result.Paging.CalculatePagingInfo()
|
||||||
|
|
||||||
// query data
|
// query data
|
||||||
queryData := query
|
queryData := query
|
||||||
queryData.Limit = limit
|
queryData.Limit = q.Limit
|
||||||
queryData.Offset = offset
|
queryData.Offset = q.Offset
|
||||||
err = r.queryBuilder.ExecuteQuery(
|
err = r.queryBuilder.ExecuteQuery(
|
||||||
c, dbconn, queryData, &result.Data)
|
c, dbconn, queryData, &result.Data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -60,3 +60,12 @@ type CreatePasienOperasiRequest struct {
|
|||||||
DokterPelaksanaItems []DokterPelaksanaItemRequest `json:"dokterPelaksanaItems"`
|
DokterPelaksanaItems []DokterPelaksanaItemRequest `json:"dokterPelaksanaItems"`
|
||||||
StatusPasienData StatusPasienRequest `json:"statusPasienData"`
|
StatusPasienData StatusPasienRequest `json:"statusPasienData"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AntrianQuery struct {
|
||||||
|
Search string `form:"search"`
|
||||||
|
Type string `form:"type,default=all" binding:"omitempty,oneof=all kategori spesialis sub-spesialis"`
|
||||||
|
TypeID int `form:"type_id,default=0"`
|
||||||
|
Status string `form:"status" binding:"omitempty,oneof=1 2 3 4"`
|
||||||
|
Limit int `form:"limit,default=10"`
|
||||||
|
Offset int `form:"offset,default=0"`
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user