diff --git a/main.go b/main.go index 83e3065..6499bcc 100644 --- a/main.go +++ b/main.go @@ -40,7 +40,7 @@ func main() { roomRepo := repositories.NewRoomRepo(db) courseRepo := repositories.NewCourseRepo(db) tutorRepo := repositories.NewTutorRepo(db) - officeHourRepo := repositories.NewOfficeHourRepo(db, roomRepo, tutorRepo, courseRepo) + officeHourRepo := repositories.NewOfficeHourRepo(db, roomRepo, tutorRepo, courseRepo, conf) requestRepo := repositories.NewRequestRepo(db, officeHourRepo, conf) h := controllers.NewBaseHandler(roomRepo, officeHourRepo, courseRepo, tutorRepo, requestRepo, conf) diff --git a/repositories/officeHour.go b/repositories/officeHour.go index ff04b82..5dff4a0 100644 --- a/repositories/officeHour.go +++ b/repositories/officeHour.go @@ -4,6 +4,8 @@ package repositories import ( "database/sql" "fmt" + "log" + "sprechstundentool/config" "sprechstundentool/models" ) @@ -12,14 +14,16 @@ type OfficeHourRepo struct { roomRepo *RoomRepo tutorRepo *TutorRepo courseRepo *CourseRepo + config config.Config } -func NewOfficeHourRepo(db *sql.DB, roomRepo *RoomRepo, tutorRepo *TutorRepo, courseRepo *CourseRepo) *OfficeHourRepo { +func NewOfficeHourRepo(db *sql.DB, roomRepo *RoomRepo, tutorRepo *TutorRepo, courseRepo *CourseRepo, conf config.Config) *OfficeHourRepo { return &OfficeHourRepo{ db: db, roomRepo: roomRepo, tutorRepo: tutorRepo, courseRepo: courseRepo, + config: conf, } } @@ -168,14 +172,18 @@ func (r *OfficeHourRepo) NumberByTimeSpanAndRoom(date models.Date, duration int, return 0, err } var count int - for _, officeHour := range officeHours { - if models.DateLess(models.GetEndDate(officeHour.Date, officeHour.Duration, false), date) || models.GetEndDate(officeHour.Date, officeHour.Duration, false) == date { - continue + // iterate over all points in the new officehour to get the maximum parallel officehours + for minute := 0; minute < duration; minute += r.config.Date.MinuteGranularity { + var minuteCount int = 0 + for _, officeHour := range officeHours { + // increase count if officehour starts before this point in time and ends later + if models.DateLess(officeHour.Date, models.GetEndDate(date, minute, false)) && models.DateLess(models.GetEndDate(date, minute, false), models.GetEndDate(officeHour.Date, officeHour.Duration, false)) { + minuteCount += 1 + } } - if models.DateLess(models.GetEndDate(date, duration, false), officeHour.Date) || models.GetEndDate(date, duration, false) == officeHour.Date { - continue + if minuteCount > count { + count = minuteCount } - count += 1 } return count, nil }