package ocss import ( "time" geojson "github.com/paulmach/orb/geojson" ) func NewDriverJourney( id string, operator string, driver User, passengerPickup geojson.Feature, passengerDrop geojson.Feature, duration time.Duration, passengerPickupDate time.Time, journeyType JourneyScheduleType, ) *DriverJourney { var pickupAddress *string if addr := passengerPickup.Properties.MustString("label", ""); addr != "" { pickupAddress = &addr } var dropAddress *string if addr := passengerDrop.Properties.MustString("label", ""); addr != "" { dropAddress = &addr } return &DriverJourney{ DriverTrip: DriverTrip{ Driver: driver, Trip: Trip{ Operator: operator, PassengerPickupLat: passengerPickup.Point().Lat(), PassengerPickupLng: passengerPickup.Point().Lon(), PassengerPickupAddress: pickupAddress, PassengerDropLat: passengerDrop.Point().Lat(), PassengerDropLng: passengerDrop.Point().Lon(), PassengerDropAddress: dropAddress, Duration: duration, }, }, JourneySchedule: JourneySchedule{ ID: &id, PassengerPickupDate: OCSSTime(passengerPickupDate), Type: journeyType, }, } } func (j *DriverJourney) AddDepartureToPickupWalkingDistance(distance int64) *DriverJourney { j.DepartureToPickupWalkingDistance = &distance return j } func (j *DriverJourney) AddDepartureToPickupWalkingDuration(duration time.Duration) *DriverJourney { j.DepartureToPickupWalkingDuration = &duration return j } func (j *DriverJourney) AddDepartureToPickupWalkingPolyline(polyline string) *DriverJourney { j.DepartureToPickupWalkingPolyline = &polyline return j } func (j *DriverJourney) AddDropoffToArrivalWalkingDistance(distance int64) *DriverJourney { j.DropoffToArrivalWalkingDistance = &distance return j } func (j *DriverJourney) AddDropoffToArrivalWalkingDuration(duration time.Duration) *DriverJourney { j.DropoffToArrivalWalkingDuration = &duration return j } func (j *DriverJourney) AddDropoffToArrivalWalkingPolyline(polyline string) *DriverJourney { j.DropoffToArrivalWalkingPolyline = &polyline return j } func (j *DriverJourney) AddCar(car Car) *DriverJourney { j.Car = &car return j } func (j *DriverJourney) AddDriverDeparture(location geojson.Feature) *DriverJourney { lat := location.Point().Lat() lon := location.Point().Lon() j.DriverDepartureLat = &lat j.DriverDepartureLng = &lon if addr := location.Properties.MustString("label", ""); addr != "" { j.DriverDepartureAddress = &addr } return j } func (j *DriverJourney) AddDriverArrival(location geojson.Feature) *DriverJourney { lat := location.Point().Lat() lon := location.Point().Lon() j.DriverArrivalLat = &lat j.DriverArrivalLng = &lon if addr := location.Properties.MustString("label", ""); addr != "" { j.DriverArrivalAddress = &addr } return j } func (j *DriverJourney) AddDistance(distance int64) *DriverJourney { j.Distance = &distance return j } func (j *DriverJourney) AddJourneyPolyline(polyline string) *DriverJourney { j.JourneyPolyline = &polyline return j } func (j *DriverJourney) AddPreferences(preferences Preferences) *DriverJourney { j.Preferences = &preferences return j } func (j *DriverJourney) AddAvailableSeats(seats int64) *DriverJourney { j.AvailableSteats = &seats return j } func (j *DriverJourney) AddDriverDepartureDate(date time.Time) *DriverJourney { d := OCSSTime(date) j.DriverDepartureDate = &d return j } func (j *DriverJourney) AddWebUrl(url string) *DriverJourney { j.WebUrl = &url return j }