Files
fleets/grpcapi/bookings.go
Arnaud Delcasse 6007cffdf1
All checks were successful
Build and Push Docker Image / build_and_push (push) Successful in 5m22s
feat: ajout manual_status et status_history aux réservations
2026-02-26 17:55:10 +01:00

102 lines
2.6 KiB
Go

package grpcapi
import (
"encoding/json"
"fmt"
"git.coopgo.io/coopgo-platform/fleets/storage"
"google.golang.org/protobuf/encoding/protojson"
structpb "google.golang.org/protobuf/types/known/structpb"
"google.golang.org/protobuf/types/known/timestamppb"
)
func (v Booking) ToStorageType() storage.Booking {
booking := storage.Booking{
ID: v.Id,
Vehicleid: v.Vehicleid,
Driver: v.Driver,
Startdate: v.Startdate.AsTime(),
Enddate: v.Enddate.AsTime(),
Unavailablefrom: v.Unavailablefrom.AsTime(),
Unavailableto: v.Unavailableto.AsTime(),
Data: map[string]any{},
Deleted: v.Deleted,
ManualStatus: v.ManualStatus,
}
for k, d := range v.Data.GetFields() {
jsondata, err := protojson.Marshal(d)
if err != nil {
fmt.Println(err)
break
}
var data any
json.Unmarshal(jsondata, &data)
booking.Data[k] = data
}
if v.Vehicle != nil {
booking.Vehicle = v.Vehicle.ToStorageType()
}
for _, entry := range v.StatusHistory {
booking.StatusHistory = append(booking.StatusHistory, storage.StatusHistoryEntry{
FromStatus: entry.FromStatus,
ToStatus: entry.ToStatus,
UserID: entry.UserId,
UserName: entry.UserName,
GroupID: entry.GroupId,
GroupName: entry.GroupName,
Date: entry.Date.AsTime(),
Comment: entry.Comment,
})
}
return booking
}
func BookingFromStorageType(booking *storage.Booking) (*Booking, error) {
d, err := sanitizeData(booking.Data)
if err != nil {
return nil, err
}
data, err := structpb.NewStruct(d)
if err != nil {
fmt.Println(err)
return nil, err
}
result := &Booking{
Id: booking.ID,
Vehicleid: booking.Vehicleid,
Driver: booking.Driver,
Startdate: timestamppb.New(booking.Startdate),
Enddate: timestamppb.New(booking.Enddate),
Unavailablefrom: timestamppb.New(booking.Unavailablefrom),
Unavailableto: timestamppb.New(booking.Unavailableto),
Data: data,
Deleted: booking.Deleted,
ManualStatus: booking.ManualStatus,
}
for _, entry := range booking.StatusHistory {
result.StatusHistory = append(result.StatusHistory, &StatusHistoryEntry{
FromStatus: entry.FromStatus,
ToStatus: entry.ToStatus,
UserId: entry.UserID,
UserName: entry.UserName,
GroupId: entry.GroupID,
GroupName: entry.GroupName,
Date: timestamppb.New(entry.Date),
Comment: entry.Comment,
})
}
result.Vehicle, err = VehicleFromStorageType(&booking.Vehicle)
if err != nil {
return nil, err
}
return result, nil
}