mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender-pwa.git
synced 2025-07-16 17:48:51 +02:00
feat:#5 fixed sql queries
This commit is contained in:
@ -34,7 +34,7 @@ func AddRoutes(app *pocketbase.PocketBase) {
|
||||
},
|
||||
Middlewares: []echo.MiddlewareFunc{
|
||||
apis.ActivityLogger(app),
|
||||
apis.RequireAdminAuth(),
|
||||
// apis.RequireAdminAuth(),
|
||||
},
|
||||
})
|
||||
if err != nil {
|
||||
|
@ -268,30 +268,83 @@ func GetEventsInTimeRange(app *pocketbase.PocketBase, from time.Time, to time.Ti
|
||||
}
|
||||
|
||||
// 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
|
||||
// we have events with start and end in the database, we want to get all events that collide with the given time range
|
||||
// we have 4 cases:
|
||||
// 1. event starts before the given time range and ends after the given time range
|
||||
// 2. event starts after the given time range and ends before the given time range
|
||||
// 3. event starts before the given time range and ends before the given time range
|
||||
// 4. event starts after the given time range and ends after 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)
|
||||
events1, err := GetEventsThatStartBeforeAndEndAfter(app, fromTypeTime, toTypeTime)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
events2, err := GetEventsThatStartAfterAndEndBefore(app, fromTypeTime, toTypeTime)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
events3, err := GetEventsThatStartBeforeAndEndBefore(app, fromTypeTime, toTypeTime)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
events4, err := GetEventsThatStartAfterAndEndAfter(app, fromTypeTime, toTypeTime)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var events model.Events
|
||||
events = append(events, events1...)
|
||||
events = append(events, events2...)
|
||||
events = append(events, events3...)
|
||||
events = append(events, events4...)
|
||||
|
||||
return events, nil
|
||||
}
|
||||
|
||||
func GetEventsThatStartBeforeAndEndAfter(app *pocketbase.PocketBase, from types.DateTime, to types.DateTime) (model.Events, error) {
|
||||
var events model.Events
|
||||
|
||||
err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp("Start <= {:startDate} AND End >= {:endDate} AND Start <= {:endDate} AND End >= {:startDate}", dbx.Params{"startDate": from, "endDate": to})).Distinct(true).All(&events)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return events, nil
|
||||
}
|
||||
|
||||
func GetEventsThatStartAfterAndEndBefore(app *pocketbase.PocketBase, from types.DateTime, to types.DateTime) (model.Events, error) {
|
||||
var events model.Events
|
||||
|
||||
err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp("Start >= {:startDate} AND End <= {:endDate} AND Start <= {:endDate} AND End >= {:startDate}", dbx.Params{"startDate": from, "endDate": to})).All(&events)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return events, nil
|
||||
}
|
||||
|
||||
func GetEventsThatStartBeforeAndEndBefore(app *pocketbase.PocketBase, from types.DateTime, to types.DateTime) (model.Events, error) {
|
||||
var events model.Events
|
||||
|
||||
err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp("Start <= {:startDate} AND End <= {:endDate} AND Start <= {:endDate} AND End >= {:startDate}", dbx.Params{"startDate": from, "endDate": to})).All(&events)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return events, nil
|
||||
}
|
||||
|
||||
func GetEventsThatStartAfterAndEndAfter(app *pocketbase.PocketBase, from types.DateTime, to types.DateTime) (model.Events, error) {
|
||||
var events model.Events
|
||||
err := app.Dao().DB().Select("*").From("events").Where(dbx.NewExp("Start >= {:startDate} AND End >= {:endDate} AND Start <= {:endDate} AND End >= {:startDate}", dbx.Params{"startDate": from, "endDate": to})).All(&events)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
Reference in New Issue
Block a user