Improve vehicles management
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user