mirror of
https://gitlab.dit.htwk-leipzig.de/htwk-software/htwkalender-pwa.git
synced 2025-08-04 02:39:16 +02:00
refactored and extracted new functions
This commit is contained in:
@@ -2,7 +2,16 @@ package model
|
|||||||
|
|
||||||
import "github.com/pocketbase/pocketbase/models"
|
import "github.com/pocketbase/pocketbase/models"
|
||||||
|
|
||||||
type Events []*Event
|
type Events []Event
|
||||||
|
|
||||||
|
func (m Events) Contains(event Event) bool {
|
||||||
|
for _, e := range m {
|
||||||
|
if e.Equals(event) {
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
type Event struct {
|
type Event struct {
|
||||||
UUID string `db:"uuid" json:"uuid"`
|
UUID string `db:"uuid" json:"uuid"`
|
||||||
@@ -21,6 +30,18 @@ type Event struct {
|
|||||||
models.BaseModel
|
models.BaseModel
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (m *Event) Equals(event Event) bool {
|
||||||
|
return m.Day == event.Day &&
|
||||||
|
m.Week == event.Week &&
|
||||||
|
m.Start == event.Start &&
|
||||||
|
m.End == event.End &&
|
||||||
|
m.Name == event.Name &&
|
||||||
|
m.Course == event.Course &&
|
||||||
|
m.Prof == event.Prof &&
|
||||||
|
m.Rooms == event.Rooms &&
|
||||||
|
m.EventType == event.EventType
|
||||||
|
}
|
||||||
|
|
||||||
func (m *Event) TableName() string {
|
func (m *Event) TableName() string {
|
||||||
return "events"
|
return "events"
|
||||||
}
|
}
|
||||||
|
126
backend/model/eventModel_test.go
Normal file
126
backend/model/eventModel_test.go
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
package model
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/pocketbase/pocketbase/models"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestEvents_Contains(t *testing.T) {
|
||||||
|
type args struct {
|
||||||
|
event Event
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
m Events
|
||||||
|
args args
|
||||||
|
want bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "empty events",
|
||||||
|
m: Events{},
|
||||||
|
args: args{event: Event{}},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "one event",
|
||||||
|
m: Events{{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}},
|
||||||
|
args: args{event: Event{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}},
|
||||||
|
want: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "two events",
|
||||||
|
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"}},
|
||||||
|
args: args{event: Event{Day: "test2", Week: "test2", Start: "test2", End: "test2", Name: "test2", Course: "test2", Prof: "test2", Rooms: "test2", EventType: "test2"}},
|
||||||
|
want: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
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"}},
|
||||||
|
args: args{event: Event{Day: "test3", Week: "test3", Start: "test3", End: "test3", Name: "test3", Course: "test3", Prof: "test3", Rooms: "test3", EventType: "test3"}},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := tt.m.Contains(tt.args.event); got != tt.want {
|
||||||
|
t.Errorf("Contains() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestEvent_Equals(t *testing.T) {
|
||||||
|
type fields struct {
|
||||||
|
UUID string
|
||||||
|
Day string
|
||||||
|
Week string
|
||||||
|
Start string
|
||||||
|
End string
|
||||||
|
Name string
|
||||||
|
EventType string
|
||||||
|
Prof string
|
||||||
|
Rooms string
|
||||||
|
Notes string
|
||||||
|
BookedAt string
|
||||||
|
Course string
|
||||||
|
Semester string
|
||||||
|
BaseModel models.BaseModel
|
||||||
|
}
|
||||||
|
type args struct {
|
||||||
|
event Event
|
||||||
|
}
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
fields fields
|
||||||
|
args args
|
||||||
|
want bool
|
||||||
|
}{
|
||||||
|
{
|
||||||
|
name: "empty events",
|
||||||
|
fields: fields{},
|
||||||
|
args: args{event: Event{}},
|
||||||
|
want: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "one empty one not",
|
||||||
|
fields: fields{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"},
|
||||||
|
args: args{event: Event{}},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "one event",
|
||||||
|
fields: fields{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"},
|
||||||
|
args: args{event: Event{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"}},
|
||||||
|
want: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "two events",
|
||||||
|
fields: fields{Day: "test", Week: "test", Start: "test", End: "test", Name: "test", Course: "test", Prof: "test", Rooms: "test", EventType: "test"},
|
||||||
|
args: args{event: Event{Day: "test2", Week: "test2", Start: "test2", End: "test2", Name: "test2", Course: "test2", Prof: "test2", Rooms: "test2", EventType: "test2"}},
|
||||||
|
want: false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
m := &Event{
|
||||||
|
UUID: tt.fields.UUID,
|
||||||
|
Day: tt.fields.Day,
|
||||||
|
Week: tt.fields.Week,
|
||||||
|
Start: tt.fields.Start,
|
||||||
|
End: tt.fields.End,
|
||||||
|
Name: tt.fields.Name,
|
||||||
|
EventType: tt.fields.EventType,
|
||||||
|
Prof: tt.fields.Prof,
|
||||||
|
Rooms: tt.fields.Rooms,
|
||||||
|
Notes: tt.fields.Notes,
|
||||||
|
BookedAt: tt.fields.BookedAt,
|
||||||
|
Course: tt.fields.Course,
|
||||||
|
Semester: tt.fields.Semester,
|
||||||
|
BaseModel: tt.fields.BaseModel,
|
||||||
|
}
|
||||||
|
if got := m.Equals(tt.args.event); got != tt.want {
|
||||||
|
t.Errorf("Equals() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@@ -7,15 +7,15 @@ 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.Event
|
var toBeSavedEvents model.Events
|
||||||
var savedRecords []model.Event
|
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)
|
dbGroup, err := findEventByDayWeekStartEndNameCourse(event, seminarGroup.Course, app)
|
||||||
|
|
||||||
if dbGroup.UUID != "" && err.Error() == "sql: no rows in result set" && !containsEvent(toBeSavedEvents, event) {
|
if dbGroup.UUID != "" && err.Error() == "sql: no rows in result set" && toBeSavedEvents.Contains(event) == false {
|
||||||
toBeSavedEvents = append(toBeSavedEvents, event)
|
toBeSavedEvents = append(toBeSavedEvents, event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -36,24 +36,6 @@ func SaveEvents(seminarGroup []model.SeminarGroup, app *pocketbase.PocketBase) (
|
|||||||
return savedRecords, nil
|
return savedRecords, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func containsEvent(events []model.Event, event model.Event) bool {
|
|
||||||
for _, e := range events {
|
|
||||||
if e.Day == event.Day &&
|
|
||||||
e.Week == event.Week &&
|
|
||||||
e.Start == event.Start &&
|
|
||||||
e.End == event.End &&
|
|
||||||
e.Name == event.Name &&
|
|
||||||
e.Course == event.Course &&
|
|
||||||
e.Prof == event.Prof &&
|
|
||||||
e.Rooms == event.Rooms &&
|
|
||||||
e.EventType == event.EventType {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func findEventByDayWeekStartEndNameCourse(event model.Event, course string, app *pocketbase.PocketBase) (*model.Event, error) {
|
func findEventByDayWeekStartEndNameCourse(event model.Event, course string, app *pocketbase.PocketBase) (*model.Event, error) {
|
||||||
err := app.Dao().DB().Select("*").From("events").Where(
|
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.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}",
|
||||||
|
@@ -50,7 +50,7 @@ func replaceNameIfUserDefined(name string, mapping []model.FeedCollection) strin
|
|||||||
return name
|
return name
|
||||||
}
|
}
|
||||||
|
|
||||||
func generateDescription(event *model.Event) string {
|
func generateDescription(event model.Event) string {
|
||||||
var description string
|
var description string
|
||||||
|
|
||||||
if !functions.OnlyWhitespace(event.Notes) {
|
if !functions.OnlyWhitespace(event.Notes) {
|
||||||
|
Reference in New Issue
Block a user