Add PostgreSQL database option and more booking flow functionalities

This commit is contained in:
2023-05-08 01:29:59 +02:00
parent d8346a20be
commit e2e6759dc0
40 changed files with 1594 additions and 907 deletions

View File

@@ -3,11 +3,12 @@ package proto
import (
"time"
"git.coopgo.io/coopgo-platform/carpool-service/internal"
"git.coopgo.io/coopgo-platform/carpool-service/interoperability/ocss"
"google.golang.org/protobuf/types/known/timestamppb"
)
func (j *CarpoolServiceDriverJourney) ToOCSS() ocss.DriverJourney {
var departureToPickupWalkingDuration *time.Duration
if j.DepartureToPickupWalkingDuration != nil {
dtpw := time.Duration(*j.DepartureToPickupWalkingDuration)
@@ -39,9 +40,9 @@ func (j *CarpoolServiceDriverJourney) ToOCSS() ocss.DriverJourney {
}
}
var driverDepartureDate *ocss.JSONTime
var driverDepartureDate *ocss.OCSSTime
if j.DriverDepartureDate != nil {
ddd := ocss.JSONTime(j.DriverDepartureDate.AsTime())
ddd := ocss.OCSSTime(j.DriverDepartureDate.AsTime())
driverDepartureDate = &ddd
}
@@ -108,7 +109,8 @@ func (j *CarpoolServiceDriverJourney) ToOCSS() ocss.DriverJourney {
},
},
JourneySchedule: ocss.JourneySchedule{
PassengerPickupDate: ocss.JSONTime(j.PassengerPickupDate.AsTime()),
ID: &j.Id,
PassengerPickupDate: ocss.OCSSTime(j.PassengerPickupDate.AsTime()),
DriverDepartureDate: driverDepartureDate,
WebUrl: j.WebUrl,
Type: j.Type.ToOCSS(),
@@ -131,9 +133,9 @@ func (j *CarpoolServicePassengerJourney) ToOCSS() ocss.PassengerJourney {
}
}
var driverDepartureDate *ocss.JSONTime
var driverDepartureDate *ocss.OCSSTime
if j.DriverDepartureDate != nil {
ddd := ocss.JSONTime(j.DriverDepartureDate.AsTime())
ddd := ocss.OCSSTime(j.DriverDepartureDate.AsTime())
driverDepartureDate = &ddd
}
@@ -171,7 +173,8 @@ func (j *CarpoolServicePassengerJourney) ToOCSS() ocss.PassengerJourney {
},
},
JourneySchedule: ocss.JourneySchedule{
PassengerPickupDate: ocss.JSONTime(j.PassengerPickupDate.AsTime()),
ID: &j.Id,
PassengerPickupDate: ocss.OCSSTime(j.PassengerPickupDate.AsTime()),
DriverDepartureDate: driverDepartureDate,
WebUrl: j.WebUrl,
Type: j.Type.ToOCSS(),
@@ -180,6 +183,218 @@ func (j *CarpoolServicePassengerJourney) ToOCSS() ocss.PassengerJourney {
}
}
func (b *CarpoolServiceBooking) ToOCSS() ocss.Booking {
var duration *time.Duration
if b.Duration != nil {
d := time.Duration(*b.Duration) * time.Second
duration = &d
}
pt := ocss.Free
am := 0.0
cu := "EUR"
price := ocss.Price{
Type: &pt,
Amount: &am,
Currency: &cu,
}
if b.Price != nil {
pricetype := ocss.Unknown
if *b.Price.Type == CarpoolServicePriceType_FREE {
pricetype = ocss.Free
} else if *b.Price.Type == CarpoolServicePriceType_PAYING {
pricetype = ocss.Paying
}
price = ocss.Price{
Type: &pricetype,
Amount: b.Price.Amount,
Currency: b.Price.Currency,
}
}
status := ocss.BookingInitiated
if b.Status == CarpoolServiceBookingStatus_WAITING_DRIVER_CONFIRMATION {
status = ocss.BookingWaitingDriverConfirmation
} else if b.Status == CarpoolServiceBookingStatus_WAITING_PASSENGER_CONFIRMATION {
status = ocss.BookingWaitingPassengerConfirmation
} else if b.Status == CarpoolServiceBookingStatus_CONFIRMED {
status = ocss.BookingConfirmed
} else if b.Status == CarpoolServiceBookingStatus_COMPLETED_PENDING_VALIDATION {
status = ocss.BookingCompletedPendingValidation
} else if b.Status == CarpoolServiceBookingStatus_VALIDATED {
status = ocss.BookingValidated
} else if b.Status == CarpoolServiceBookingStatus_CANCELLED {
status = ocss.BookingCancelled
}
return ocss.Booking{
ID: b.Id,
Driver: ocss.User{
ID: b.Driver.Id,
Operator: b.Driver.Operator,
Alias: b.Driver.Alias,
FirstName: b.Driver.FirstName,
LastName: b.Driver.LastName,
Grade: b.Driver.Grade,
Picture: b.Driver.Picture,
Gender: GenderToOCSS(b.Driver.Gender),
VerifiedIdentity: b.Driver.VerifiedIdentity,
},
Passenger: ocss.User{
ID: b.Passenger.Id,
Operator: b.Passenger.Operator,
Alias: b.Passenger.Alias,
FirstName: b.Passenger.FirstName,
LastName: b.Passenger.LastName,
Grade: b.Passenger.Grade,
Picture: b.Passenger.Picture,
Gender: GenderToOCSS(b.Passenger.Gender),
VerifiedIdentity: b.Passenger.VerifiedIdentity,
},
PassengerPickupDate: ocss.OCSSTime(b.PassengerPickupDate.AsTime()),
PassengerPickupLat: b.PassengerPickupLat,
PassengerPickupLng: b.PassengerPickupLng,
PassengerDropLat: b.PassengerDropLat,
PassengerDropLng: b.PassengerDropLng,
PassengerPickupAddress: b.PassengerPickupAddress,
PassengerDropAddress: b.PassengerDropAddress,
Distance: b.Distance,
Duration: duration,
WebUrl: b.WebUrl,
Price: price,
Status: status,
DriverJourneyID: b.DriverJourneyId,
PassengerJourneyID: b.PassengerJourneyId,
}
}
func BookingFromOCSS(b ocss.Booking) *CarpoolServiceBooking {
passengerPickupDate := b.PassengerPickupDate.ToTime()
status := CarpoolServiceBookingStatus_INITIATED
if b.Status == ocss.BookingWaitingDriverConfirmation {
status = CarpoolServiceBookingStatus_WAITING_DRIVER_CONFIRMATION
} else if b.Status == ocss.BookingWaitingPassengerConfirmation {
status = CarpoolServiceBookingStatus_WAITING_PASSENGER_CONFIRMATION
} else if b.Status == ocss.BookingConfirmed {
status = CarpoolServiceBookingStatus_CONFIRMED
} else if b.Status == ocss.BookingCompletedPendingValidation {
status = CarpoolServiceBookingStatus_COMPLETED_PENDING_VALIDATION
} else if b.Status == ocss.BookingValidated {
status = CarpoolServiceBookingStatus_VALIDATED
} else if b.Status == ocss.BookingCancelled {
status = CarpoolServiceBookingStatus_CANCELLED
}
var duration *int64
if b.Duration != nil {
d := int64(b.Duration.Seconds())
duration = &d
}
var pricetype *CarpoolServicePriceType
if b.Price.Type != nil {
if *b.Price.Type == ocss.Free {
pt := CarpoolServicePriceType_FREE
pricetype = &pt
} else if *b.Price.Type == ocss.Paying {
pt := CarpoolServicePriceType_PAYING
pricetype = &pt
} else if *b.Price.Type == ocss.Unknown {
pt := CarpoolServicePriceType_UNKNOWN
pricetype = &pt
}
}
price := CarpoolServicePrice{
Amount: b.Price.Amount,
Currency: b.Price.Currency,
Type: pricetype,
}
return &CarpoolServiceBooking{
Id: b.ID,
Driver: &CarpoolServiceUser{
Id: b.Driver.ID,
Operator: b.Driver.Operator,
Alias: b.Driver.Alias,
FirstName: b.Driver.FirstName,
LastName: b.Driver.LastName,
Grade: b.Driver.Grade,
Picture: b.Driver.Picture,
Gender: b.Driver.Gender.ToString(),
VerifiedIdentity: b.Driver.VerifiedIdentity,
},
Passenger: &CarpoolServiceUser{
Id: b.Passenger.ID,
Operator: b.Passenger.Operator,
Alias: b.Passenger.Alias,
FirstName: b.Passenger.FirstName,
LastName: b.Passenger.LastName,
Grade: b.Passenger.Grade,
Picture: b.Passenger.Picture,
Gender: b.Passenger.Gender.ToString(),
VerifiedIdentity: b.Passenger.VerifiedIdentity,
},
PassengerPickupDate: timestamppb.New(*passengerPickupDate),
PassengerPickupLat: b.PassengerPickupLat,
PassengerPickupLng: b.PassengerPickupLng,
PassengerDropLat: b.PassengerDropLat,
PassengerDropLng: b.PassengerDropLng,
PassengerPickupAddress: b.PassengerPickupAddress,
PassengerDropAddress: b.PassengerDropAddress,
Status: status,
Distance: b.Distance,
Duration: duration,
WebUrl: b.WebUrl,
Price: &price,
DriverJourneyId: b.DriverJourneyID,
PassengerJourneyId: b.PassengerJourneyID,
}
}
func BookingFromInternal(b internal.Booking) *CarpoolServiceBooking {
booking := BookingFromOCSS(b.Booking)
if b.DriverRoute != nil {
serializedDriverRoute, err := b.DriverRoute.MarshalJSON()
if err == nil {
booking.DriverRoute = &CarpoolFeatureCollection{
Serialized: string(serializedDriverRoute),
}
}
}
if b.PassengerRoute != nil {
serializedPassengerRoute, err := b.PassengerRoute.MarshalJSON()
if err == nil {
booking.PassengerRoute = &CarpoolFeatureCollection{
Serialized: string(serializedPassengerRoute),
}
}
}
return booking
}
func (s CarpoolServiceBookingStatus) ToOCSS() ocss.BookingStatus {
if s == CarpoolServiceBookingStatus_INITIATED {
return ocss.BookingInitiated
} else if s == CarpoolServiceBookingStatus_WAITING_DRIVER_CONFIRMATION {
return ocss.BookingWaitingDriverConfirmation
} else if s == CarpoolServiceBookingStatus_WAITING_PASSENGER_CONFIRMATION {
return ocss.BookingWaitingPassengerConfirmation
} else if s == CarpoolServiceBookingStatus_CONFIRMED {
return ocss.BookingConfirmed
} else if s == CarpoolServiceBookingStatus_COMPLETED_PENDING_VALIDATION {
return ocss.BookingCompletedPendingValidation
} else if s == CarpoolServiceBookingStatus_VALIDATED {
return ocss.BookingValidated
} else if s == CarpoolServiceBookingStatus_CANCELLED {
return ocss.BookingCancelled
}
return ocss.BookingInitiated
}
func (t CarpoolServiceJourneyType) ToOCSS() ocss.JourneyScheduleType {
if t == CarpoolServiceJourneyType_DYNAMIC {
return ocss.Dynamic