/
schema.resolvers.go
115 lines (99 loc) · 3.94 KB
/
schema.resolvers.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
package graph
// This file will be automatically regenerated based on the schema, any resolver implementations
// will be copied through when generating and any unknown code will be moved to the end.
import (
"context"
"fmt"
"time"
dl "github.com/IMT-Atlantique-FIL-2020-2023/NADA-extended/internal/app/nada-serve/dataloader"
"github.com/IMT-Atlantique-FIL-2020-2023/NADA-extended/internal/app/nada-serve/db"
"github.com/IMT-Atlantique-FIL-2020-2023/NADA-extended/internal/app/nada-serve/graph/generated"
"github.com/IMT-Atlantique-FIL-2020-2023/NADA-extended/internal/app/nada-serve/graph/model"
"github.com/vektah/gqlparser/v2/gqlerror"
)
func (r *airportResolver) Sensors(ctx context.Context, obj *model.Airport) ([]*model.Sensor, error) {
thunk := r.Dataloader.SensorDataloader.Load(ctx, dl.NewSensorDlKey(obj))
result, err := thunk()
return result.([]*model.Sensor), err
}
func (r *airportResolver) GetSubsetOfSensors(ctx context.Context, obj *model.Airport, sensorIds []string) ([]*model.Sensor, error) {
thunk := r.Dataloader.SensorDataloader.Load(ctx, dl.NewSensorDlKey(obj, sensorIds...))
result, err := thunk()
return result.([]*model.Sensor), err
}
func (r *queryResolver) Airports(ctx context.Context) ([]*model.Airport, error) {
result, err := r.Resolver.QueryApi.Query(ctx,
`
from(bucket: "nada-bucket")
|> range(start: -1y, stop: -0m)
|> keep(columns: ["airportId"])
|> filter(fn: (r) => exists r.airportId)
|> distinct(column: "airportId")`)
airports := make([]*model.Airport, 0, 10)
if err == nil {
for result.Next() {
airports = append(airports, &model.Airport{
ID: result.Record().Value().(string),
Name: "",
})
}
}
return airports, err
}
func (r *queryResolver) GetAirportByID(ctx context.Context, id string) (*model.Airport, error) {
result, err := r.Resolver.QueryApi.Query(ctx,
fmt.Sprintf(`
from(bucket: "nada-bucket")
|> range(start: -1y, stop: -0m)
|> keep(columns: ["airportId"])
|> filter(fn: (r) => r.airportId == "%v")
|> rename(columns: {airportId: "_value"})
|> first()`, db.SanitizeString(id)))
if !result.Next() {
return nil, gqlerror.Errorf("Airport not found %v", id)
}
airport := &model.Airport{
ID: result.Record().Value().(string),
Name: "",
}
return airport, err
}
func (r *sensorResolver) GetMeanMeasureInterval(ctx context.Context, obj *model.Sensor, start time.Time, end time.Time, discretize *string, discretizeMode *model.MeanMeasureMode) ([]*model.MeasureMeanData, error) {
thunk := r.Dataloader.MeanValuesDataloader.Load(ctx, dl.MeanDataDlKey{
AirportId: obj.Airport.ID,
Start: start,
End: end,
EveryValue: *discretize,
DiscretizeMode: discretizeMode,
Sensor: obj,
})
result, err := thunk()
return result.([]*model.MeasureMeanData), err
}
func Bod(t time.Time) time.Time {
year, month, day := t.Date()
return time.Date(year, month, day, 0, 0, 0, 0, t.Location())
}
func (r *sensorResolver) GetMeanMeasures(ctx context.Context, obj *model.Sensor, day *time.Time) ([]*model.MeasureMeanData, error) {
start := Bod(*day)
end := start.AddDate(0, 0, 1)
thunk := r.Dataloader.MeanValuesDataloader.Load(ctx, dl.MeanDataDlKey{
AirportId: obj.Airport.ID,
Start: start,
End: end,
EveryValue: "1",
DiscretizeMode: &model.AllMeanMeasureMode[1],
Sensor: obj,
})
result, err := thunk()
return result.([]*model.MeasureMeanData), err
}
// Airport returns generated.AirportResolver implementation.
func (r *Resolver) Airport() generated.AirportResolver { return &airportResolver{r} }
// Query returns generated.QueryResolver implementation.
func (r *Resolver) Query() generated.QueryResolver { return &queryResolver{r} }
// Sensor returns generated.SensorResolver implementation.
func (r *Resolver) Sensor() generated.SensorResolver { return &sensorResolver{r} }
type airportResolver struct{ *Resolver }
type queryResolver struct{ *Resolver }
type sensorResolver struct{ *Resolver }