add nomor urut list antrian

This commit is contained in:
renaldybrada
2026-02-02 13:09:03 +07:00
parent 3edbd8b193
commit 564b24b343
6 changed files with 93 additions and 11 deletions
+15
View File
@@ -27,6 +27,12 @@ const docTemplate = `{
"description": "Search Keyword",
"name": "search",
"in": "query"
},
{
"type": "string",
"description": "Type antrian : all, kategori, spesialis, sub-spesialis",
"name": "type",
"in": "query"
}
],
"responses": {
@@ -338,6 +344,15 @@ const docTemplate = `{
"noRekamMedis": {
"type": "string"
},
"noUrutKategori": {
"type": "integer"
},
"noUrutSpesialis": {
"type": "integer"
},
"noUrutSubSpesialis": {
"type": "integer"
},
"spesialis": {
"type": "string"
},
+15
View File
@@ -21,6 +21,12 @@
"description": "Search Keyword",
"name": "search",
"in": "query"
},
{
"type": "string",
"description": "Type antrian : all, kategori, spesialis, sub-spesialis",
"name": "type",
"in": "query"
}
],
"responses": {
@@ -332,6 +338,15 @@
"noRekamMedis": {
"type": "string"
},
"noUrutKategori": {
"type": "integer"
},
"noUrutSpesialis": {
"type": "integer"
},
"noUrutSubSpesialis": {
"type": "integer"
},
"spesialis": {
"type": "string"
},
+10
View File
@@ -78,6 +78,12 @@ definitions:
type: string
noRekamMedis:
type: string
noUrutKategori:
type: integer
noUrutSpesialis:
type: integer
noUrutSubSpesialis:
type: integer
spesialis:
type: string
subSpesialis:
@@ -209,6 +215,10 @@ paths:
in: query
name: search
type: string
- description: 'Type antrian : all, kategori, spesialis, sub-spesialis'
in: query
name: type
type: string
responses:
"200":
description: OK
@@ -80,6 +80,7 @@ func (h AntrianOperasiHandler) CreateAntrianOperasi(c *gin.Context) {
// @Summary Get List Antrian Operasi
// @Tags Antrian Operasi
// @Param search query string false "Search Keyword"
// @Param type query string false "Type antrian : all, kategori, spesialis, sub-spesialis"
// @Success 200 {object} []PasienOperasi
// @Failure 500 {object} shared.BaseErrorResponse
// @Router /antrian-operasi/ [get]
+13 -10
View File
@@ -3,14 +3,17 @@ package antrianoperasi
import "time"
type PasienOperasi struct {
ID string `db:"id" json:"id"`
TglDaftar time.Time `db:"tanggal_daftar"`
NoKtp *string `db:"no_ktp"`
NoRekamMedis *string `db:"no_rekam_medis"`
NamaPasien *string `db:"nama_pasien"`
Spesialis *string `db:"spesialis"`
SubSpesialis *string `db:"subspesialis"`
KodeDiagnosa *string `db:"kode_diagnosa"`
Diagnosa *string `db:"diagnosa"`
Kategori *string `db:"kategori"`
ID string `db:"id" json:"id"`
TglDaftar time.Time `db:"tanggal_daftar"`
NoKtp *string `db:"no_ktp"`
NoRekamMedis *string `db:"no_rekam_medis"`
NamaPasien *string `db:"nama_pasien"`
Spesialis *string `db:"spesialis"`
SubSpesialis *string `db:"subspesialis"`
KodeDiagnosa *string `db:"kode_diagnosa"`
Diagnosa *string `db:"diagnosa"`
Kategori *string `db:"kategori"`
NoUrutKategori int `db:"no_urut_kategori"`
NoUrutSpesialis int `db:"no_urut_spesialis"`
NoUrutSubSpesialis int `db:"no_urut_sub_spesialis"`
}
+39 -1
View File
@@ -4,6 +4,7 @@ import (
"antrian-operasi/internal/database"
queryUtils "antrian-operasi/internal/utils/query"
"log"
"slices"
"time"
"github.com/gin-gonic/gin"
@@ -269,6 +270,12 @@ func (r antrianOperasiRepo) CreateAntrianOperasi(c *gin.Context, req CreatePasie
func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) ([]PasienOperasi, error) {
var result []PasienOperasi
search := c.Query("search")
availableType := []string{"all", "kategori", "spesialis", "sub-spesialis"}
antrianType := c.Query("type")
if !slices.Contains(availableType, antrianType) {
antrianType = "all"
}
query := queryUtils.DynamicQuery{
From: TBL_NAME,
@@ -287,7 +294,38 @@ func (r antrianOperasiRepo) SearchableListAntrianOperasi(c *gin.Context) ([]Pasi
},
Limit: 10,
Sort: []queryUtils.SortField{
{Column: "created_at", Order: "DESC"}},
{Column: "dpo.Tanggal_daftar", Order: "ASC"}},
}
wfKategori := queryUtils.WindowFunction{
Function: "ROW_NUMBER",
Over: "\"dpo\".\"Kategori_operasi\"",
OrderBy: "\"dpo\".\"Tanggal_daftar\"",
Alias: "no_urut_kategori",
}
wfSpesialis := queryUtils.WindowFunction{
Function: "ROW_NUMBER",
Over: "\"dpo\".\"Kategori_operasi\", \"dpo\".\"Spesialis\"",
OrderBy: "\"dpo\".\"Tanggal_daftar\"",
Alias: "no_urut_spesialis",
}
wfSubSpesialis := queryUtils.WindowFunction{
Function: "ROW_NUMBER",
Over: "\"dpo\".\"Kategori_operasi\", \"dpo\".\"Spesialis\", \"dpo\".\"Sub_spesialis\"",
OrderBy: "\"dpo\".\"Tanggal_daftar\"",
Alias: "no_urut_sub_spesialis",
}
switch antrianType {
case "kategori":
query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
case "spesialis":
query.WindowFunctions = append(query.WindowFunctions, wfSpesialis, wfSubSpesialis)
case "sub-spesialis":
query.WindowFunctions = append(query.WindowFunctions, wfSubSpesialis)
default:
query.WindowFunctions = append(query.WindowFunctions, wfKategori, wfSpesialis, wfSubSpesialis)
}
query.Joins = []queryUtils.Join{