All checks were successful
Build and Push Docker Image / build_and_push (push) Successful in 5m22s
102 lines
2.6 KiB
Go
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
|
|
}
|