package handlers import ( "slices" "time" // "Documents/go_projet/go/pkg/mod/git.coopgo.io/coopgo-platform/fleets@v0.0.0-20230310144446-feb935f8bf4e/storage" "git.coopgo.io/coopgo-platform/fleets/storage" "github.com/google/uuid" ) func (h FleetsHandler) AddVehicle(vehicle storage.Vehicle) (*storage.Vehicle, error) { if vehicle.ID == "" { vehicle.ID = uuid.NewString() } vehicle.Metadata = map[string]any{ "created": time.Now(), } // Store the account if err := h.storage.CreateVehicle(vehicle); err != nil { return nil, err } return &vehicle, nil } func (h FleetsHandler) GetVehicle(id string) (vehicle *storage.Vehicle, err error) { vehicle, err = h.storage.GetVehicle(id) if err != nil { return nil, err } bookings, err := h.storage.GetBookingsForVehicle(id) if err != nil { return nil, err } vehicle.Bookings = bookings return vehicle, nil } func (h FleetsHandler) GetVehicles(namespaces []string, filters storage.VehicleFilters) ([]storage.Vehicle, error) { vehicles, err := h.storage.GetVehicles(namespaces) if err != nil { return nil, err } // Filter vehicles and bookings using slices.Collect return slices.Collect(func(yield func(storage.Vehicle) bool) { for _, v := range vehicles { bookings, err := h.storage.GetBookingsForVehicle(v.ID) if err != nil { continue // Skip vehicles with booking errors } // Filter deleted bookings unless specifically requested if !filters.IncludeDeleted { v.Bookings = slices.Collect(func(yieldBooking func(storage.Booking) bool) { for _, booking := range bookings { if !booking.Deleted { if !yieldBooking(booking) { return } } } }) } else { v.Bookings = bookings } if v.MatchesFilters(filters) { if !yield(v) { return } } } }), nil } /////////////////update/////////////// func (h FleetsHandler) UpdateVehicle(vehicle storage.Vehicle) (*storage.Vehicle, error) { // Store the account if err := h.storage.UpdateVehicle(vehicle); err != nil { return nil, err } return &vehicle, nil }