Files
api-antrian-operasi/internal/domain/dashboard/model.go
2026-02-12 08:34:56 +07:00

104 lines
2.8 KiB
Go

package dashboard
type AntrianPerKategori struct {
IdKategori int `db:"Kategori_operasi" json:"id_kategori"`
Kategori string `db:"Kategori" json:"kategori"`
JmlAntrian int `db:"jumlah_antrean" json:"jumlah_antrean"`
}
type AntrianPerSpesialisModel struct {
IdSpesialis int `db:"id_spesialis"`
Spesialis string `db:"Spesialis"`
IdSubSpesialis int `db:"id_subspesialis"`
SubSpesialis string `db:"Subspesialis"`
JmlAntrian int `db:"jml_antrian"`
}
type AntrianPerSpesialisResponse struct {
IdSpesialis int
Spesialis string
JmlAntrian int
SubSpesialis []AntrianPerSubSpesialisResponse
}
type AntrianPerSubSpesialisResponse struct {
IdSubSpesialis int
SubSpesialis string
JmlAntrian int
}
type PerbandinganStatusAntreanQueryResult struct {
IdStatus int `db:"status_operasi"`
Jumlah int `db:"jumlah"`
}
type PerbandinganStatusAntreanResponse struct {
IdStatus int `json:"id"`
Jumlah int `json:"jumlah"`
Status string `json:"statust"`
}
type PerbandinganKategoriAntrean struct {
IdKategori int `db:"id_kategori" json:"id_kategori"`
Kategori string `db:"kategori" json:"kategori"`
Jumlah int `db:"jumlah" json:"jumlah"`
}
type TableAntreanPerSpesialis struct {
Spesialis string `db:"spesialis"`
Total int `db:"total"`
Belum int `db:"belum"`
Selesai int `db:"selesai"`
Tunda int `db:"tunda"`
Batal int `db:"batal"`
}
type TableAntreanPerSubSpesialis struct {
Spesialis string `db:"spesialis"`
SubSpesialis string `db:"sub_spesialis"`
Total int `db:"total"`
Belum int `db:"belum"`
Selesai int `db:"selesai"`
Tunda int `db:"tunda"`
}
type ListModelAntrianPerSpesialis []AntrianPerSpesialisModel
func (list ListModelAntrianPerSpesialis) ParseToResponse() []AntrianPerSpesialisResponse {
resultMap := make(map[int]*AntrianPerSpesialisResponse)
for _, item := range list {
// check if spesialis already on resultMap
// if not exist, create antrian spesialis response
if _, ok := resultMap[item.IdSpesialis]; !ok {
resultMap[item.IdSpesialis] = &AntrianPerSpesialisResponse{
IdSpesialis: item.IdSpesialis,
Spesialis: item.Spesialis,
JmlAntrian: 0,
SubSpesialis: []AntrianPerSubSpesialisResponse{},
}
}
// add subspesialis item
resultMap[item.IdSpesialis].SubSpesialis = append(
resultMap[item.IdSpesialis].SubSpesialis,
AntrianPerSubSpesialisResponse{
IdSubSpesialis: item.IdSubSpesialis,
SubSpesialis: item.SubSpesialis,
JmlAntrian: item.JmlAntrian,
},
)
// accumulate jmlAntrian subspesialis -> total antrian spesialis
resultMap[item.IdSpesialis].JmlAntrian += item.JmlAntrian
}
// convert map -> slice
result := make([]AntrianPerSpesialisResponse, 0, len(resultMap))
for _, v := range resultMap {
result = append(result, *v)
}
return result
}