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:
@@ -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(),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user