fixing sort by name spesialis
This commit is contained in:
@@ -1,6 +1,9 @@
|
|||||||
package dashboard
|
package dashboard
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"sort"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
type AntrianPerKategori struct {
|
type AntrianPerKategori struct {
|
||||||
IdKategori int `db:"Kategori_operasi" json:"id_kategori"`
|
IdKategori int `db:"Kategori_operasi" json:"id_kategori"`
|
||||||
@@ -84,13 +87,13 @@ type TableAntreanPerSubSpesialis struct {
|
|||||||
type ListModelAntrianPerSpesialis []AntrianPerSpesialisModel
|
type ListModelAntrianPerSpesialis []AntrianPerSpesialisModel
|
||||||
|
|
||||||
func (list ListModelAntrianPerSpesialis) ParseToResponse() []AntrianPerSpesialisResponse {
|
func (list ListModelAntrianPerSpesialis) ParseToResponse() []AntrianPerSpesialisResponse {
|
||||||
resultMap := make(map[int]*AntrianPerSpesialisResponse)
|
resultMap := make(map[string]*AntrianPerSpesialisResponse)
|
||||||
|
|
||||||
for _, item := range list {
|
for _, item := range list {
|
||||||
// check if spesialis already on resultMap
|
// check if spesialis already on resultMap
|
||||||
// if not exist, create antrian spesialis response
|
// if not exist, create antrian spesialis response
|
||||||
if _, ok := resultMap[item.IdSpesialis]; !ok {
|
if _, ok := resultMap[item.Spesialis]; !ok {
|
||||||
resultMap[item.IdSpesialis] = &AntrianPerSpesialisResponse{
|
resultMap[item.Spesialis] = &AntrianPerSpesialisResponse{
|
||||||
IdSpesialis: item.IdSpesialis,
|
IdSpesialis: item.IdSpesialis,
|
||||||
Spesialis: item.Spesialis,
|
Spesialis: item.Spesialis,
|
||||||
JmlAntrian: 0,
|
JmlAntrian: 0,
|
||||||
@@ -99,8 +102,8 @@ func (list ListModelAntrianPerSpesialis) ParseToResponse() []AntrianPerSpesialis
|
|||||||
}
|
}
|
||||||
|
|
||||||
// add subspesialis item
|
// add subspesialis item
|
||||||
resultMap[item.IdSpesialis].SubSpesialis = append(
|
resultMap[item.Spesialis].SubSpesialis = append(
|
||||||
resultMap[item.IdSpesialis].SubSpesialis,
|
resultMap[item.Spesialis].SubSpesialis,
|
||||||
AntrianPerSubSpesialisResponse{
|
AntrianPerSubSpesialisResponse{
|
||||||
IdSubSpesialis: item.IdSubSpesialis,
|
IdSubSpesialis: item.IdSubSpesialis,
|
||||||
SubSpesialis: item.SubSpesialis,
|
SubSpesialis: item.SubSpesialis,
|
||||||
@@ -109,13 +112,20 @@ func (list ListModelAntrianPerSpesialis) ParseToResponse() []AntrianPerSpesialis
|
|||||||
)
|
)
|
||||||
|
|
||||||
// accumulate jmlAntrian subspesialis -> total antrian spesialis
|
// accumulate jmlAntrian subspesialis -> total antrian spesialis
|
||||||
resultMap[item.IdSpesialis].JmlAntrian += item.JmlAntrian
|
resultMap[item.Spesialis].JmlAntrian += item.JmlAntrian
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// sort by spesialis name ascending
|
||||||
|
keys := make([]string, 0, len(resultMap))
|
||||||
|
for k := range resultMap {
|
||||||
|
keys = append(keys, resultMap[k].Spesialis)
|
||||||
|
}
|
||||||
|
sort.Strings(keys)
|
||||||
|
|
||||||
// convert map -> slice
|
// convert map -> slice
|
||||||
result := make([]AntrianPerSpesialisResponse, 0, len(resultMap))
|
result := make([]AntrianPerSpesialisResponse, 0, len(resultMap))
|
||||||
for _, v := range resultMap {
|
for _, v := range keys {
|
||||||
result = append(result, *v)
|
result = append(result, *resultMap[v])
|
||||||
}
|
}
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|||||||
Reference in New Issue
Block a user