From d91de014e90d856b3e2100b3adac8222018f8018 Mon Sep 17 00:00:00 2001 From: Gonne Date: Mon, 19 Sep 2022 18:32:15 +0200 Subject: [PATCH] =?UTF-8?q?Korrigiere=20Z=C3=A4hlung=20paralleler=20Sprech?= =?UTF-8?q?stunden?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.go | 2 +- repositories/officeHour.go | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 8 deletions(-) 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 }