nidus-sync/platform/ios.go

97 lines
2.8 KiB
Go
Raw Normal View History

2026-01-04 17:30:28 -07:00
package platform
import (
"context"
"fmt"
2026-01-04 17:30:28 -07:00
"time"
"github.com/Gleipnir-Technology/nidus-sync/db"
"github.com/Gleipnir-Technology/nidus-sync/db/models"
"github.com/google/uuid"
2026-01-04 17:30:28 -07:00
)
type ClientSync struct {
Fieldseeker FieldseekerRecordsSync
Since time.Time
}
type FieldseekerRecordsSync struct {
MosquitoSources []MosquitoSource
ServiceRequests models.FieldseekerServicerequestSlice
TrapData models.FieldseekerTraplocationSlice
}
type MosquitoSource struct {
PointLocation models.FieldseekerPointlocation
Inspections models.FieldseekerMosquitoinspectionSlice
Treatments models.FieldseekerTreatmentSlice
}
func getFieldseekerRecordsSync(ctx context.Context, u User, since *time.Time) (fsync FieldseekerRecordsSync, err error) {
db_connection := db.PGInstance.BobDB
pl, err := u.Organization.model.Pointlocations().All(ctx, db_connection)
2026-01-04 17:30:28 -07:00
if err != nil {
return fsync, fmt.Errorf("Failed to get point locations: %w", err)
2026-01-04 17:30:28 -07:00
}
inspections, err := u.Organization.model.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.Organization.model.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
2026-01-04 17:30:28 -07:00
return fsync, err
}
func ContentClientIos(ctx context.Context, u User, since *time.Time) (csync ClientSync, err error) {
fsync, err := getFieldseekerRecordsSync(ctx, u, since)
2026-01-04 17:30:28 -07:00
return ClientSync{
Fieldseeker: fsync,
}, err
}