@@ -71,3 +71,73 @@ export const getTours = async (
71
71
export type Tours = Awaited < ReturnType < typeof getTours > > ;
72
72
export type Tour = Tours [ 0 ] ;
73
73
export type TourEvent = Tour [ 'events' ] [ 0 ] ;
74
+
75
+ export const getToursWithRequests = async (
76
+ selectCancelled : boolean ,
77
+ companyId ?: number ,
78
+ timeRange ?: [ UnixtimeMs , UnixtimeMs ]
79
+ ) => {
80
+ return await db
81
+ . selectFrom ( 'tour' )
82
+ . $if ( ! selectCancelled , ( qb ) => qb . where ( 'tour.cancelled' , '=' , false ) )
83
+ . innerJoin ( 'vehicle' , 'vehicle.id' , 'tour.vehicle' )
84
+ . innerJoin ( 'company' , 'company.id' , 'vehicle.company' )
85
+ . $if ( typeof companyId === 'number' , ( qb ) => qb . where ( 'company' , '=' , companyId ! ) )
86
+ . $if ( ! ! timeRange , ( qb ) =>
87
+ qb . where ( 'tour.departure' , '<' , timeRange ! [ 1 ] ) . where ( 'tour.arrival' , '>' , timeRange ! [ 0 ] )
88
+ )
89
+ . select ( ( eb ) => [
90
+ 'tour.id as tourId' ,
91
+ 'tour.fare as fare' ,
92
+ 'tour.departure as startTime' ,
93
+ 'tour.arrival as endTime' ,
94
+ 'tour.cancelled' ,
95
+ 'tour.message' ,
96
+ 'company.id as companyId' ,
97
+ 'company.name as companyName' ,
98
+ 'company.address as companyAddress' ,
99
+ 'company.lat as companyLat' ,
100
+ 'company.lng as companyLng' ,
101
+ 'vehicle.id as vehicleId' ,
102
+ 'vehicle.licensePlate as licensePlate' ,
103
+ jsonArrayFrom (
104
+ eb
105
+ . selectFrom ( 'request' )
106
+ . $if ( ! selectCancelled , ( qb ) => qb . where ( 'request.cancelled' , '=' , false ) )
107
+ . whereRef ( 'tour.id' , '=' , 'request.tour' )
108
+ . select ( ( eb ) => [
109
+ 'request.bikes' ,
110
+ 'request.customer' ,
111
+ 'request.luggage' ,
112
+ 'request.passengers' ,
113
+ 'request.wheelchairs' ,
114
+ 'request.id as requestId' ,
115
+ jsonArrayFrom (
116
+ eb
117
+ . selectFrom ( 'event' )
118
+ . $if ( ! selectCancelled , ( qb ) => qb . where ( 'event.cancelled' , '=' , false ) )
119
+ . whereRef ( 'request.id' , '=' , 'event.request' )
120
+ . select ( [
121
+ 'event.id' ,
122
+ 'event.communicatedTime' ,
123
+ 'event.address' ,
124
+ 'event.eventGroup' ,
125
+ 'event.isPickup' ,
126
+ 'event.lat' ,
127
+ 'event.lng' ,
128
+ 'event.nextLegDuration' ,
129
+ 'event.prevLegDuration' ,
130
+ 'event.scheduledTimeStart' ,
131
+ 'event.scheduledTimeEnd' ,
132
+ 'event.cancelled'
133
+ ] )
134
+ ) . as ( 'events' )
135
+ ] )
136
+ ) . as ( 'requests' )
137
+ ] )
138
+ . execute ( ) ;
139
+ } ;
140
+
141
+ export type ToursWithRequests = Awaited < ReturnType < typeof getToursWithRequests > > ;
142
+ export type TourWithRequests = ToursWithRequests [ 0 ] ;
143
+ export type TourRequest = TourWithRequests [ 'requests' ] [ 0 ] ;
0 commit comments