mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender.git
synced 2025-08-02 17:59:14 +02:00
feat:#16 fixed contains with slices
This commit is contained in:
@@ -1,16 +1,14 @@
|
|||||||
package model
|
package model
|
||||||
|
|
||||||
import "github.com/pocketbase/pocketbase/models"
|
import (
|
||||||
|
"github.com/pocketbase/pocketbase/models"
|
||||||
|
"slices"
|
||||||
|
)
|
||||||
|
|
||||||
type Events []Event
|
type Events []Event
|
||||||
|
|
||||||
func (m Events) Contains(event Event) bool {
|
func (m Events) Contains(event Event) bool {
|
||||||
for _, e := range m {
|
return slices.Contains(m, event)
|
||||||
if e.Equals(event) {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type Event struct {
|
type Event struct {
|
||||||
|
@@ -35,8 +35,8 @@ func TestEvents_Contains(t *testing.T) {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: "two events with different values",
|
name: "two events with different values",
|
||||||
m: Events{{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}, {Day: "test2", Week: "test2", Start: "test2", End: "test2", Name: "test2", Course: "test2", Prof: "test2", Rooms: "test2", EventType: "test2"}},
|
m: Events{{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test", UUID: "439ßu56rf8u9ijn4f4-2345345"}, {Day: "test2", Week: "test2", Start: "test2", End: "test2", Name: "test2", Course: "test2", Prof: "test2", Rooms: "test2", EventType: "test2", UUID: "432a39ßu545349ijn4f4-23dsa45"}},
|
||||||
args: args{event: Event{Day: "test3", Week: "test3", Start: "test3", End: "test3", Name: "test3", Course: "test3", Prof: "test3", Rooms: "test3", EventType: "test3"}},
|
args: args{event: Event{Day: "test3", Week: "test3", Start: "test3", End: "test3", Name: "test3", Course: "test3", Prof: "test3", Rooms: "test3", EventType: "test3", UUID: "934mf43r34f-g68h7655tg3"}},
|
||||||
want: false,
|
want: false,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
@@ -9,13 +9,19 @@ import (
|
|||||||
func SaveEvents(seminarGroup []model.SeminarGroup, app *pocketbase.PocketBase) ([]model.Event, error) {
|
func SaveEvents(seminarGroup []model.SeminarGroup, app *pocketbase.PocketBase) ([]model.Event, error) {
|
||||||
var toBeSavedEvents model.Events
|
var toBeSavedEvents model.Events
|
||||||
var savedRecords model.Events
|
var savedRecords model.Events
|
||||||
|
|
||||||
// check if event is already in database and add to toBeSavedEvents if not
|
// check if event is already in database and add to toBeSavedEvents if not
|
||||||
for _, seminarGroup := range seminarGroup {
|
for _, seminarGroup := range seminarGroup {
|
||||||
for _, event := range seminarGroup.Events {
|
for _, event := range seminarGroup.Events {
|
||||||
event = event.SetCourse(seminarGroup.Course)
|
event = event.SetCourse(seminarGroup.Course)
|
||||||
dbGroup, err := findEventByDayWeekStartEndNameCourse(event, seminarGroup.Course, app)
|
existsInDatabase, err := findEventByDayWeekStartEndNameCourse(event, seminarGroup.Course, app)
|
||||||
|
alreadyAddedToSave := toBeSavedEvents.Contains(event)
|
||||||
|
|
||||||
if dbGroup.UUID != "" && err.Error() == "sql: no rows in result set" && toBeSavedEvents.Contains(event) == false {
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !existsInDatabase && !alreadyAddedToSave {
|
||||||
toBeSavedEvents = append(toBeSavedEvents, event)
|
toBeSavedEvents = append(toBeSavedEvents, event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -36,12 +42,42 @@ func SaveEvents(seminarGroup []model.SeminarGroup, app *pocketbase.PocketBase) (
|
|||||||
return savedRecords, nil
|
return savedRecords, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func findEventByDayWeekStartEndNameCourse(event model.Event, course string, app *pocketbase.PocketBase) (*model.Event, error) {
|
// check if event is already in database and return true if it is and false if it's not
|
||||||
err := app.Dao().DB().Select("*").From("events").Where(
|
func findEventByDayWeekStartEndNameCourse(event model.Event, course string, app *pocketbase.PocketBase) (bool, error) {
|
||||||
dbx.NewExp("Day = {:day} AND Week = {:week} AND Start = {:start} AND End = {:end} AND Name = {:name} AND course = {:course} AND Prof = {:prof} AND Rooms = {:rooms} AND EventType = {:eventType}",
|
|
||||||
dbx.Params{"day": event.Day, "week": event.Week, "start": event.Start, "end": event.End, "name": event.Name, "course": course, "prof": event.Prof, "rooms": event.Rooms, "eventType": event.EventType}),
|
var dbEvent model.Event
|
||||||
).One(&event)
|
|
||||||
return &event, err
|
err := app.Dao().DB().Select("*").From("events").
|
||||||
|
Where(dbx.NewExp(
|
||||||
|
"Day = {:day} AND "+
|
||||||
|
"Week = {:week} AND "+
|
||||||
|
"Start = {:start} AND "+
|
||||||
|
"End = {:end} AND "+
|
||||||
|
"Name = {:name} AND "+
|
||||||
|
"course = {:course} AND "+
|
||||||
|
"Prof = {:prof} AND "+
|
||||||
|
"Rooms = {:rooms} AND "+
|
||||||
|
"EventType = {:eventType}",
|
||||||
|
dbx.Params{
|
||||||
|
"day": event.Day,
|
||||||
|
"week": event.Week,
|
||||||
|
"start": event.Start,
|
||||||
|
"end": event.End,
|
||||||
|
"name": event.Name,
|
||||||
|
"course": course,
|
||||||
|
"prof": event.Prof,
|
||||||
|
"rooms": event.Rooms,
|
||||||
|
"eventType": event.EventType}),
|
||||||
|
).One(&dbEvent)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
if err.Error() == "sql: no rows in result set" {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
return false, err
|
||||||
|
} else {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildIcalQueryForModules(modules []model.FeedCollection) dbx.Expression {
|
func buildIcalQueryForModules(modules []model.FeedCollection) dbx.Expression {
|
||||||
|
@@ -31,7 +31,7 @@ func GetSeminarEvents(c echo.Context, app *pocketbase.PocketBase) error {
|
|||||||
savedRecords, dbError := db.SaveEvents(seminarGroups, app)
|
savedRecords, dbError := db.SaveEvents(seminarGroups, app)
|
||||||
|
|
||||||
if dbError != nil {
|
if dbError != nil {
|
||||||
return apis.NewNotFoundError("Events could not be saved", dbError)
|
return apis.NewNotFoundError("Events could not be saved", dbError.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
return c.JSON(http.StatusOK, savedRecords)
|
return c.JSON(http.StatusOK, savedRecords)
|
||||||
|
Reference in New Issue
Block a user