fix:#5 added room table and changed sql query

This commit is contained in:
Elmar Kresse
2024-01-25 00:34:42 +01:00
parent 1b536dd008
commit fe8e22da5a
4 changed files with 119 additions and 19 deletions

View File

@ -2,6 +2,7 @@ package db
import (
"fmt"
"github.com/pocketbase/pocketbase/tools/types"
"htwkalender/model"
"log/slog"
"time"
@ -265,3 +266,36 @@ func GetEventsInTimeRange(app *pocketbase.PocketBase, from time.Time, to time.Ti
return events, nil
}
// GetEventsThatCollideWithTimeRange returns all events that collide with the given time range
// events that collide are events that start before the given time range and end after the given time range
// or events that start before the given time range and end in the given time range
// or events that start in the given time range and end after the given time range
// or events that start in the given time range and end in the given time range
func GetEventsThatCollideWithTimeRange(app *pocketbase.PocketBase, from time.Time, to time.Time) (model.Events, error) {
var events model.Events
var fromTypeTime, _ = types.ParseDateTime(from)
var toTypeTime, _ = types.ParseDateTime(to)
//TODO check if this query is correct returns null or events on complete other days
err := app.Dao().DB().Select("*").From("events").Where(
dbx.And(
dbx.NewExp("(Start <= {:startDate1}", dbx.Params{"startDate1": fromTypeTime}),
dbx.NewExp("AND End >= {:endDate1})", dbx.Params{"endDate1": toTypeTime}))).OrWhere(
dbx.And(
dbx.NewExp("(Start >= {:startDate2}", dbx.Params{"startDate2": fromTypeTime}),
dbx.NewExp("AND End <= {:endDate2})", dbx.Params{"endDate2": toTypeTime}))).OrWhere(
dbx.And(
dbx.NewExp("(Start <= {:startDate3}", dbx.Params{"startDate3": fromTypeTime}),
dbx.NewExp("AND End <= {:endDate3})", dbx.Params{"endDate3": toTypeTime}))).OrWhere(
dbx.And(
dbx.NewExp("(Start >= {:startDate4}", dbx.Params{"startDate4": fromTypeTime}),
dbx.NewExp("AND End >= {:endDate4})", dbx.Params{"endDate4": toTypeTime}))).All(&events)
if err != nil {
return nil, err
}
return events, nil
}

View File

@ -50,7 +50,7 @@ func GetFreeRooms(app *pocketbase.PocketBase, from time.Time, to time.Time) ([]s
return nil, err
}
var events model.Events
events, err = db.GetEventsInTimeRange(app, from, to)
events, err = db.GetEventsThatCollideWithTimeRange(app, from, to)
if err != nil {
return nil, err
}