nidus-sync/platform/ios.go
2026-01-06 03:06:38 +00:00

78 lines
2.3 KiB
Go

package platform
import (
"context"
"fmt"
"time"
"github.com/Gleipnir-Technology/nidus-sync/db"
"github.com/Gleipnir-Technology/nidus-sync/db/models"
"github.com/google/uuid"
)
func fieldseeker(ctx context.Context, u *models.User, since *time.Time) (fsync FieldseekerRecordsSync, err error) {
pl, err := u.R.Organization.Pointlocations().All(ctx, db.PGInstance.BobDB)
if err != nil {
return fsync, fmt.Errorf("Failed to get point locations: %w", err)
}
inspections, err := u.R.Organization.Mosquitoinspections().All(ctx, db.PGInstance.BobDB)
if err != nil {
return fsync, fmt.Errorf("Failed to get mosquito inspections: %w", err)
}
inspections_by_location := make(map[uuid.UUID]models.FieldseekerMosquitoinspectionSlice, 0)
for _, i := range inspections {
if i.Pointlocid.IsNull() {
continue
}
locid := i.Pointlocid.MustGet()
insp, ok := inspections_by_location[locid]
if !ok {
insp = make(models.FieldseekerMosquitoinspectionSlice, 0)
}
insp = append(insp, i)
inspections_by_location[locid] = insp
}
treatments, err := u.R.Organization.Treatments().All(ctx, db.PGInstance.BobDB)
if err != nil {
return fsync, fmt.Errorf("Failed to get treatment data: %w", err)
}
treatments_by_location := make(map[uuid.UUID]models.FieldseekerTreatmentSlice, 0)
for _, t := range treatments {
if t.Pointlocid.IsNull() {
continue
}
locid := t.Pointlocid.MustGet()
ts, ok := treatments_by_location[locid]
if !ok {
ts = make(models.FieldseekerTreatmentSlice, 0)
}
ts = append(ts, t)
treatments_by_location[locid] = ts
}
sources := make([]*MosquitoSource, 0)
for _, p := range pl {
inspections, ok := inspections_by_location[p.Globalid]
if !ok {
inspections = make(models.FieldseekerMosquitoinspectionSlice, 0)
}
treatments, ok := treatments_by_location[p.Globalid]
if !ok {
treatments = make(models.FieldseekerTreatmentSlice, 0)
}
ms := MosquitoSource{
PointLocation: p,
Inspections: &inspections,
Treatments: &treatments,
}
sources = append(sources, &ms)
}
fsync.MosquitoSources = &sources
return fsync, err
}
func ContentClientIos(ctx context.Context, u *models.User, since *time.Time) (csync ClientSync, err error) {
fsync, err := fieldseeker(ctx, u, since)
return ClientSync{
Fieldseeker: fsync,
}, err
}