feat:#16 fixed contains with slices

This commit is contained in:
Elmar Kresse
2023-10-25 01:34:39 +02:00
parent b48af9f2ac
commit abad60b48a
4 changed files with 52 additions and 18 deletions

View File

@@ -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 {

View File

@@ -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,
}, },
} }

View File

@@ -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 {

View File

@@ -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)