package transform import ( "slices" "sync" "git.ostiwe.com/ostiwe-com/status/dto" "git.ostiwe.com/ostiwe-com/status/model" ) const maxStatuses = 60 func PublicServices(items ...model.Service) []dto.PublicService { result := make([]dto.PublicService, 0, len(items)) mu := new(sync.Mutex) chunked := slices.Chunk(items, 40) for services := range chunked { wg := new(sync.WaitGroup) wg.Add(len(services)) for i := range services { go func(_wg *sync.WaitGroup, item model.Service) { defer _wg.Done() transformed := PublicService(item) mu.Lock() result = append(result, transformed) mu.Unlock() }(wg, services[i]) } wg.Wait() } return result } func PublicService(item model.Service) dto.PublicService { statuses := make([]model.Status, maxStatuses) itemStatusLen := len(item.Statuses) for i := range statuses { if i > itemStatusLen-1 { break } statuses[i] = item.Statuses[i] } for i := range statuses { if statuses[i].Status == "" { statuses[i].Status = model.StatusUncheck } } slices.Reverse(statuses) return dto.PublicService{ ID: item.ID, Name: item.Name, Description: item.PublicDescription, Statuses: statuses, Uptime: item.CalculateUptimePercent(), } }