Improve vehicles management

This commit is contained in:
2022-11-07 01:33:53 +01:00
parent da16c90fc3
commit d48c1ccf8e
3 changed files with 54 additions and 6 deletions

View File

@@ -1,6 +1,9 @@
package storage
import "time"
import (
"fmt"
"time"
)
type Vehicle struct {
ID string `json:"id" bson:"_id"`
@@ -13,13 +16,44 @@ type Vehicle struct {
Bookings []Booking
}
type VehicleFilters struct {
Types []string
AvailableFrom time.Time
AvailableTo time.Time
}
func (v Vehicle) Free(start time.Time, end time.Time) bool {
for _, b := range v.Bookings {
if (start.After(b.Unavailablefrom) && start.Before(b.Unavailableto)) ||
(end.After(b.Unavailablefrom) && end.Before(b.Unavailableto)) ||
(start.Before(b.Unavailablefrom) && end.After(b.Unavailableto)) {
fmt.Println("Bookings for", v)
fmt.Println(b)
if (start.Before(b.Unavailablefrom) && end.After(b.Unavailablefrom.Add(24*time.Hour))) ||
(start.Before(b.Unavailableto) && end.After(b.Unavailableto.Add(24*time.Hour))) ||
(start.After(b.Unavailablefrom) && end.Before(b.Unavailableto.Add(24*time.Hour))) {
return false
}
}
return true
}
func (v Vehicle) MatchesFilters(filters VehicleFilters) bool {
if len(filters.Types) > 0 {
found := false
for _, t := range filters.Types {
if t == v.Type {
found = true
break
}
}
if !found {
return false
}
}
if !v.Free(filters.AvailableFrom, filters.AvailableTo) {
return false
}
fmt.Println(filters)
return true
}