package room import ( "github.com/pocketbase/pocketbase" "htwkalender/model" "htwkalender/service/db" "htwkalender/service/functions" "time" ) func GetRooms(app *pocketbase.PocketBase) ([]string, error) { rooms, err := db.GetRooms(app) if err != nil { return nil, err } else { return rooms, nil } } func GetRoomScheduleForDay(app *pocketbase.PocketBase, room string, date string) ([]model.AnonymizedEventDTO, error) { roomSchedule, err := db.GetRoomScheduleForDay(app, room, date) if err != nil { return nil, err } anonymizedRoomSchedule := anonymizeRooms(roomSchedule) return anonymizedRoomSchedule, nil } func GetRoomSchedule(app *pocketbase.PocketBase, room string, from string, to string) ([]model.AnonymizedEventDTO, error) { roomSchedule, err := db.GetRoomSchedule(app, room, from, to) if err != nil { return nil, err } anonymizedRoomSchedule := anonymizeRooms(roomSchedule) return anonymizedRoomSchedule, nil } // Transform the events to anonymized events throwing away all unnecessary information func anonymizeRooms(events []model.Event) []model.AnonymizedEventDTO { var anonymizedEvents []model.AnonymizedEventDTO for _, event := range events { anonymizedEvents = append(anonymizedEvents, event.AnonymizeEvent()) } return anonymizedEvents } func GetFreeRooms(app *pocketbase.PocketBase, from time.Time, to time.Time) ([]string, error) { rooms, err := db.GetRooms(app) if err != nil { return nil, err } var events model.Events events, err = db.GetEventsInTimeRange(app, from, to) if err != nil { return nil, err } freeRooms := removeRoomsThatHaveEvents(rooms, events) return freeRooms, nil } func removeRoomsThatHaveEvents(rooms []string, schedule []model.Event) []string { var freeRooms []string for _, room := range rooms { if !isRoomInSchedule(room, schedule) { freeRooms = append(freeRooms, room) } } return freeRooms } func isRoomInSchedule(room string, schedule []model.Event) bool { for _, event := range schedule { if event.Course != "Sport" { rooms := functions.SeperateRoomString(event.Rooms) // check if room is in rooms for _, r := range rooms { if r == room { return true } } } else { if event.Rooms == room { return true } } } return false }