package storage import ( "fmt" "git.coopgo.io/coopgo-platform/solidarity-transport/types" "github.com/spf13/viper" ) type Storage interface { CreateDriverRegularAvailability(types.DriverRegularAvailability) error CreateDriverRegularAvailabilities([]*types.DriverRegularAvailability) error DeleteDriverRegularAvailability(driverid string, availabilityid string) error GetDriverRegularAvailability(driverid string, availabilityid string) (*types.DriverRegularAvailability, error) GetDriverRegularAvailabilities(driverid string) ([]*types.DriverRegularAvailability, error) GetRegularAvailabilities(day int, timeInDay string) ([]*types.DriverRegularAvailability, error) PushDriverJourneys([]*types.DriverJourney) error GetDriverJourney(id string) (*types.DriverJourney, error) CreateBooking(types.Booking) error GetAllBookings() ([]*types.Booking, error) GetBooking(id string) (*types.Booking, error) UpdateBookingStatus(bookingid string, newStatus string) error } func NewStorage(cfg *viper.Viper) (Storage, error) { storage_type := cfg.GetString("storage.db.type") switch storage_type { case "mongodb": return NewMongoDBStorage(cfg) case "memory": return NewMemoryStorage(cfg) default: return nil, fmt.Errorf("storage type %v is not supported", storage_type) } }