feat: Added ID field to PublicService DTO, update fields in Service model, fix CalculateUptimePercent method, transform services to Public services in goroutines

This commit is contained in:
2025-08-20 15:25:20 +03:00
parent 2a9dfcf998
commit a4050c28dc
4 changed files with 57 additions and 13 deletions

View File

@@ -1,25 +1,67 @@
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()
for _, item := range items {
result = append(result, PublicService(item))
}
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: item.Statuses,
Statuses: statuses,
Uptime: item.CalculateUptimePercent(),
}
}