53 lines
2.0 KiB
TypeScript
53 lines
2.0 KiB
TypeScript
import { supabase } from '@/supabase';
|
|
|
|
export const schedulesService = {
|
|
async getRouteSchedules(routeId: string, onlyPublished = true) {
|
|
let query = supabase.from('bus_schedules')
|
|
.select('*')
|
|
.eq('route_id', routeId)
|
|
.order('departure_time', { ascending: true })
|
|
|
|
if (onlyPublished) query = query.eq('is_published', true)
|
|
const { data, error } = await query
|
|
if (error) throw new Error(error.message)
|
|
return data
|
|
},
|
|
|
|
async getStopSchedules(stopId: string, onlyPublished = true) {
|
|
// Get routes passing through this stop, then get their schedules
|
|
const { data: routeStops, error: rsError } = await supabase
|
|
.from('route_stops').select('route_id').eq('stop_id', stopId)
|
|
if (rsError) throw new Error(rsError.message)
|
|
|
|
const routeIds = (routeStops || []).map((rs: any) => rs.route_id)
|
|
if (routeIds.length === 0) return []
|
|
|
|
let query = supabase.from('bus_schedules')
|
|
.select('*')
|
|
.in('route_id', routeIds)
|
|
.order('departure_time', { ascending: true })
|
|
|
|
if (onlyPublished) query = query.eq('is_published', true)
|
|
const { data, error } = await query
|
|
if (error) throw new Error(error.message)
|
|
return data
|
|
},
|
|
|
|
async createSchedule(scheduleData: any) {
|
|
const { data, error } = await supabase.from('bus_schedules').insert([scheduleData]).select().single()
|
|
if (error) throw new Error(error.message)
|
|
return data
|
|
},
|
|
|
|
async updateSchedule(scheduleId: string, updateData: any) {
|
|
const { data, error } = await supabase.from('bus_schedules').update(updateData).eq('id', scheduleId).select().single()
|
|
if (error) throw new Error(error.message)
|
|
return data
|
|
},
|
|
|
|
async deleteSchedule(scheduleId: string) {
|
|
const { error } = await supabase.from('bus_schedules').delete().eq('id', scheduleId)
|
|
if (error) throw new Error(error.message)
|
|
}
|
|
};
|