solidarity-transport/servers/grpc/server/bookings.go

111 lines
4.1 KiB
Go

package server
import (
"context"
"time"
"git.coopgo.io/coopgo-platform/solidarity-transport/servers/grpc/proto/gen"
"git.coopgo.io/coopgo-platform/solidarity-transport/servers/grpc/transformers"
"github.com/rs/zerolog/log"
"google.golang.org/grpc/codes"
"google.golang.org/grpc/status"
)
func (s SolidarityTransportServerImpl) BookDriverJourney(ctx context.Context, req *gen.BookDriverJourneyRequest) (*gen.BookDriverJourneyResponse, error) {
passengerId := req.PassengerId
driverId := req.DriverId
journeyId := req.DriverJourneyId
priceAmount := req.PriceAmount
priceCurrency := req.PriceCurrency
returnWaitingDuration := time.Duration(req.ReturnWaitingDuration)
data := req.Data.AsMap()
booking, err := s.Handler.BookDriverJourney(passengerId, driverId, journeyId, returnWaitingDuration, priceAmount, priceCurrency, data)
if err != nil {
log.Error().Err(err).Msg("issue in BookDriverJourney handler")
return nil, status.Errorf(codes.Internal, "could not create booking : %v", err)
}
bookingresp, err := transformers.BookingTypeToProto(booking)
if err != nil {
log.Error().Err(err).Msg("transformation error")
}
return &gen.BookDriverJourneyResponse{
Booking: bookingresp,
}, nil
}
func (s SolidarityTransportServerImpl) GetSolidarityTransportBookings(ctx context.Context, req *gen.GetSolidarityTransportBookingsRequest) (*gen.GetSolidarityTransportBookingsResponse, error) {
startdate := req.StartDate.AsTime()
enddate := req.EndDate.AsTime()
passengerid := req.Passengerid
driverid := req.Driverid
bookings, err := s.Handler.GetBookings(startdate, enddate, passengerid, driverid)
if err != nil {
log.Error().Err(err).Msg("issue in GetBookings handler")
return nil, status.Errorf(codes.NotFound, "could not get bookings : %v", err)
}
protobookings := []*gen.SolidarityTransportBooking{}
for _, b := range bookings {
protobooking, _ := transformers.BookingTypeToProto(b)
protobookings = append(protobookings, protobooking)
}
log.Debug().Any("bookings", protobookings).Msg("bookings")
return &gen.GetSolidarityTransportBookingsResponse{
Bookings: protobookings,
}, nil
}
func (s SolidarityTransportServerImpl) GetSolidarityTransportBooking(ctx context.Context, req *gen.GetSolidarityTransportBookingRequest) (*gen.GetSolidarityTransportBookingResponse, error) {
bookingid := req.Id
booking, err := s.Handler.GetBooking(bookingid)
if err != nil {
log.Error().Err(err).Msg("issue in GetBooking handler")
return nil, status.Errorf(codes.NotFound, "could not get booking : %v", err)
}
bookingproto, err := transformers.BookingTypeToProto(booking)
if err != nil {
log.Error().Err(err).Msg("issue in GetBooking handler")
return nil, status.Errorf(codes.NotFound, "transformer issue on booking : %v", err)
}
return &gen.GetSolidarityTransportBookingResponse{
Booking: bookingproto,
}, nil
}
func (s SolidarityTransportServerImpl) UpdateSolidarityTransportBooking(ctx context.Context, req *gen.UpdateSolidarityTransportBookingRequest) (*gen.UpdateSolidarityTransportBookingResponse, error) {
booking := req.Booking
b, err := transformers.BookingProtoToType(booking)
if err != nil || b == nil {
log.Error().Err(err).Msg("issue in UpdateBooking handler")
return nil, status.Errorf(codes.NotFound, "cannot update booking : %v", err)
}
err = s.Handler.UpdateBooking(*b)
if err != nil {
log.Error().Err(err).Msg("issue in UpdateBooking handler")
return nil, status.Errorf(codes.NotFound, "issue on update booking : %v", err)
}
return &gen.UpdateSolidarityTransportBookingResponse{}, nil
}
func (s SolidarityTransportServerImpl) UpdateSolidarityTransportBookingStatus(ctx context.Context, req *gen.UpdateSolidarityTransportBookingStatusRequest) (*gen.UpdateSolidarityTransportBookingStatusResponse, error) {
bookingid := req.BookingId
newStatus := req.NewStatus
reason := req.Reason
err := s.Handler.UpdateBookingStatus(bookingid, newStatus, reason)
if err != nil {
log.Error().Err(err).Msg("issue in UpdateBookingStatus handler")
return nil, status.Errorf(codes.NotFound, "transformer issue on booking : %v", err)
}
return &gen.UpdateSolidarityTransportBookingStatusResponse{}, nil
}