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