-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathfinders.go
160 lines (144 loc) · 8.29 KB
/
finders.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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
package model
import (
"context"
"time"
"github.com/interline-io/transitland-lib/rt/pb"
"github.com/interline-io/transitland-lib/tl/tt"
"github.com/interline-io/transitland-mw/auth/authz"
"github.com/interline-io/transitland-server/internal/gbfs"
"github.com/jmoiron/sqlx"
)
// Finder provides all necessary database methods
type Finder interface {
PermFinder
EntityFinder
EntityLoader
EntityMutator
}
type PermFinder interface {
PermFilter(context.Context) *PermFilter
}
// Finder handles basic queries
type EntityFinder interface {
FindAgencies(context.Context, *int, *Cursor, []int, *AgencyFilter) ([]*Agency, error)
FindRoutes(context.Context, *int, *Cursor, []int, *RouteFilter) ([]*Route, error)
FindStops(context.Context, *int, *Cursor, []int, *StopFilter) ([]*Stop, error)
FindTrips(context.Context, *int, *Cursor, []int, *TripFilter) ([]*Trip, error)
FindFeedVersions(context.Context, *int, *Cursor, []int, *FeedVersionFilter) ([]*FeedVersion, error)
FindFeeds(context.Context, *int, *Cursor, []int, *FeedFilter) ([]*Feed, error)
FindOperators(context.Context, *int, *Cursor, []int, *OperatorFilter) ([]*Operator, error)
FindPlaces(context.Context, *int, *Cursor, []int, *PlaceAggregationLevel, *PlaceFilter) ([]*Place, error)
RouteStopBuffer(context.Context, *RouteStopBufferParam) ([]*RouteStopBuffer, error)
FindFeedVersionServiceWindow(context.Context, int) (time.Time, time.Time, time.Time, error)
DBX() sqlx.Ext // escape hatch, for now
}
type EntityMutator interface {
FeedVersionUnimport(ctx context.Context, fvid int) (*FeedVersionUnimportResult, error)
FeedVersionImport(ctx context.Context, fvid int) (*FeedVersionImportResult, error)
FeedVersionUpdate(ctx context.Context, values FeedVersionSetInput) (int, error)
FeedVersionDelete(ctx context.Context, fvid int) (*FeedVersionDeleteResult, error)
StopCreate(ctx context.Context, input StopSetInput) (int, error)
StopUpdate(ctx context.Context, input StopSetInput) (int, error)
StopDelete(ctx context.Context, id int) error
PathwayCreate(ctx context.Context, input PathwaySetInput) (int, error)
PathwayUpdate(ctx context.Context, input PathwaySetInput) (int, error)
PathwayDelete(ctx context.Context, id int) error
LevelCreate(ctx context.Context, input LevelSetInput) (int, error)
LevelUpdate(ctx context.Context, input LevelSetInput) (int, error)
LevelDelete(ctx context.Context, id int) error
}
// EntityLoader methods must return items in the same order as the input parameters
type EntityLoader interface {
// Simple ID loaders
TripsByID(context.Context, []int) ([]*Trip, []error)
LevelsByID(context.Context, []int) ([]*Level, []error)
PathwaysByID(context.Context, []int) ([]*Pathway, []error)
CalendarsByID(context.Context, []int) ([]*Calendar, []error)
ShapesByID(context.Context, []int) ([]*Shape, []error)
FeedVersionsByID(context.Context, []int) ([]*FeedVersion, []error)
FeedsByID(context.Context, []int) ([]*Feed, []error)
AgenciesByID(context.Context, []int) ([]*Agency, []error)
StopsByID(context.Context, []int) ([]*Stop, []error)
RoutesByID(context.Context, []int) ([]*Route, []error)
LevelsByParentStationID(context.Context, []LevelParam) ([][]*Level, []error)
StopExternalReferencesByStopID(context.Context, []int) ([]*StopExternalReference, []error)
StopObservationsByStopID(context.Context, []StopObservationParam) ([][]*StopObservation, []error)
TargetStopsByStopID(context.Context, []int) ([]*Stop, []error)
RouteAttributesByRouteID(context.Context, []int) ([]*RouteAttribute, []error)
CensusTableByID(context.Context, []int) ([]*CensusTable, []error)
FeedVersionGeometryByID(context.Context, []int) ([]*tt.Polygon, []error)
// Segments
SegmentPatternsByRouteID(context.Context, []SegmentPatternParam) ([][]*SegmentPattern, []error)
SegmentPatternsBySegmentID(context.Context, []SegmentPatternParam) ([][]*SegmentPattern, []error)
SegmentsByID(context.Context, []int) ([]*Segment, []error)
SegmentsByRouteID(context.Context, []SegmentPatternParam) ([][]*Segment, []error)
// Other loaders
FeedVersionGtfsImportsByFeedVersionID(context.Context, []int) ([]*FeedVersionGtfsImport, []error)
FeedStatesByFeedID(context.Context, []int) ([]*FeedState, []error)
OperatorsByFeedID(context.Context, []OperatorParam) ([][]*Operator, []error)
OperatorsByCOIF(context.Context, []int) ([]*Operator, []error)
OperatorsByAgencyID(context.Context, []int) ([]*Operator, []error)
StopPlacesByStopID(context.Context, []StopPlaceParam) ([]*StopPlace, []error)
// Param loaders
FeedFetchesByFeedID(context.Context, []FeedFetchParam) ([][]*FeedFetch, []error)
FeedsByOperatorOnestopID(context.Context, []FeedParam) ([][]*Feed, []error)
FrequenciesByTripID(context.Context, []FrequencyParam) ([][]*Frequency, []error)
StopTimesByTripID(context.Context, []TripStopTimeParam) ([][]*StopTime, []error)
StopTimesByStopID(context.Context, []StopTimeParam) ([][]*StopTime, []error)
RouteStopsByStopID(context.Context, []RouteStopParam) ([][]*RouteStop, []error)
StopsByRouteID(context.Context, []StopParam) ([][]*Stop, []error)
RouteStopsByRouteID(context.Context, []RouteStopParam) ([][]*RouteStop, []error)
RouteHeadwaysByRouteID(context.Context, []RouteHeadwayParam) ([][]*RouteHeadway, []error)
RouteStopPatternsByRouteID(context.Context, []RouteStopPatternParam) ([][]*RouteStopPattern, []error)
FeedVersionFileInfosByFeedVersionID(context.Context, []FeedVersionFileInfoParam) ([][]*FeedVersionFileInfo, []error)
StopsByParentStopID(context.Context, []StopParam) ([][]*Stop, []error)
FeedVersionsByFeedID(context.Context, []FeedVersionParam) ([][]*FeedVersion, []error)
AgencyPlacesByAgencyID(context.Context, []AgencyPlaceParam) ([][]*AgencyPlace, []error)
RouteGeometriesByRouteID(context.Context, []RouteGeometryParam) ([][]*RouteGeometry, []error)
TripsByRouteID(context.Context, []TripParam) ([][]*Trip, []error)
RoutesByAgencyID(context.Context, []RouteParam) ([][]*Route, []error)
AgenciesByFeedVersionID(context.Context, []AgencyParam) ([][]*Agency, []error)
AgenciesByOnestopID(context.Context, []AgencyParam) ([][]*Agency, []error)
StopsByFeedVersionID(context.Context, []StopParam) ([][]*Stop, []error)
StopsByLevelID(context.Context, []StopParam) ([][]*Stop, []error)
TripsByFeedVersionID(context.Context, []TripParam) ([][]*Trip, []error)
FeedInfosByFeedVersionID(context.Context, []FeedInfoParam) ([][]*FeedInfo, []error)
RoutesByFeedVersionID(context.Context, []RouteParam) ([][]*Route, []error)
FeedVersionServiceLevelsByFeedVersionID(context.Context, []FeedVersionServiceLevelParam) ([][]*FeedVersionServiceLevel, []error)
PathwaysByFromStopID(context.Context, []PathwayParam) ([][]*Pathway, []error)
PathwaysByToStopID(context.Context, []PathwayParam) ([][]*Pathway, []error)
CalendarDatesByServiceID(context.Context, []CalendarDateParam) ([][]*CalendarDate, []error)
CensusGeographiesByEntityID(context.Context, []CensusGeographyParam) ([][]*CensusGeography, []error)
CensusValuesByGeographyID(context.Context, []CensusValueParam) ([][]*CensusValue, []error)
// Validation reports
ValidationReportsByFeedVersionID(context.Context, []ValidationReportParam) ([][]*ValidationReport, []error)
ValidationReportErrorGroupsByValidationReportID(context.Context, []ValidationReportErrorGroupParam) ([][]*ValidationReportErrorGroup, []error)
ValidationReportErrorExemplarsByValidationReportErrorGroupID(context.Context, []ValidationReportErrorExemplarParam) ([][]*ValidationReportError, []error)
}
// RTFinder manages and looks up RT data
type RTFinder interface {
AddData(string, []byte) error
FindTrip(t *Trip) *pb.TripUpdate
MakeTrip(t *Trip) (*Trip, error)
FindAlertsForTrip(*Trip, *int, *bool) []*Alert
FindAlertsForStop(*Stop, *int, *bool) []*Alert
FindAlertsForRoute(*Route, *int, *bool) []*Alert
FindAlertsForAgency(*Agency, *int, *bool) []*Alert
GetAddedTripsForStop(*Stop) []*pb.TripUpdate
FindStopTimeUpdate(*Trip, *StopTime) (*pb.TripUpdate_StopTimeUpdate, bool)
// lookup cache methods
StopTimezone(int, string) (*time.Location, bool)
GetGtfsTripID(int) (string, bool)
}
// GBFSFinder manages and looks up GBFS data
type GbfsFinder interface {
AddData(context.Context, string, gbfs.GbfsFeed) error
FindBikes(context.Context, *int, *GbfsBikeRequest) ([]*GbfsFreeBikeStatus, error)
FindDocks(context.Context, *int, *GbfsDockRequest) ([]*GbfsStationInformation, error)
}
type Checker interface {
authz.CheckerServer
}
type Whoami interface {
authz.WhoamiServer
}