Merge branch 'refs/heads/41-bug-all-events-vanish-if-the-official-endpoint-is-offline' into 46-event-update-issue-with-old-courses-in-group-table

# Conflicts:
#	services/data-manager/service/addRoute.go
#	services/data-manager/service/course/courseFunctions.go
#	services/data-manager/service/events/courseService.go
#	services/data-manager/service/events/eventService.go
This commit is contained in:
Elmar Kresse
2024-07-06 15:42:19 +02:00
13 changed files with 350 additions and 125 deletions

View File

@@ -26,9 +26,31 @@ import (
"strconv"
)
func GetModulesForCourseDistinct(app *pocketbase.PocketBase, course string, semester string) (model.Events, error) {
type EventService interface {
GetModulesForCourseDistinct(course string, semester string) (model.Events, error)
GetAllModulesDistinct() ([]model.ModuleDTO, error)
GetModuleByUUID(uuid string) (model.Module, error)
DeleteAllEventsByCourseAndSemester(course string, semester string) error
DeleteAllEvents() error
UpdateModulesForCourse(seminarGroup model.SeminarGroup) (model.Events, error)
GetEventTypes() ([]string, error)
}
modules, err := db.GetAllModulesForCourse(app, course, semester)
type Named interface {
GetName() string
SetName(name string)
}
type PocketBaseEventService struct {
app *pocketbase.PocketBase
}
func NewPocketBaseEventService(app *pocketbase.PocketBase) *PocketBaseEventService {
return &PocketBaseEventService{app: app}
}
func (s *PocketBaseEventService) GetModulesForCourseDistinct(course string, semester string) (model.Events, error) {
modules, err := db.GetAllModulesForCourse(s.app, course, semester)
// Convert the []model.Module to []Named
var namedEvents []Named
@@ -40,11 +62,6 @@ func GetModulesForCourseDistinct(app *pocketbase.PocketBase, course string, seme
return modules, err
}
type Named interface {
GetName() string
SetName(name string)
}
// replaceEmptyEntry replaces an empty entry in a module with a replacement string
// If the module is not empty, nothing happens
func replaceEmptyEntry(namedList []Named, replacement string) {
@@ -57,8 +74,8 @@ func replaceEmptyEntry(namedList []Named, replacement string) {
// GetAllModulesDistinct returns all modules distinct by name and course from the database
// That means you get all modules with duplicates if they have different courses
func GetAllModulesDistinct(app *pocketbase.PocketBase) ([]model.ModuleDTO, error) {
modules, err := db.GetAllModulesDistinctByNameAndCourse(app)
func (s *PocketBaseEventService) GetAllModulesDistinct() ([]model.ModuleDTO, error) {
modules, err := db.GetAllModulesDistinctByNameAndCourse(s.app)
if err != nil {
return nil, err
}
@@ -70,13 +87,13 @@ func GetAllModulesDistinct(app *pocketbase.PocketBase) ([]model.ModuleDTO, error
return modules, nil
}
func GetModuleByUUID(app *pocketbase.PocketBase, uuid string) (model.Module, error) {
module, findModuleErr := db.FindModuleByUUID(app, uuid)
func (s *PocketBaseEventService) GetModuleByUUID(uuid string) (model.Module, error) {
module, findModuleErr := db.FindModuleByUUID(s.app, uuid)
if findModuleErr != nil {
return model.Module{}, findModuleErr
}
events, findEventsError := db.FindAllEventsByModule(app, module)
events, findEventsError := db.FindAllEventsByModule(s.app, module)
if findEventsError != nil || len(events) == 0 {
return model.Module{}, findEventsError
} else {
@@ -94,8 +111,8 @@ func GetModuleByUUID(app *pocketbase.PocketBase, uuid string) (model.Module, err
// DeleteAllEventsByCourseAndSemester deletes all events for a course and a semester
// If the deletion was successful, nil is returned
// If the deletion was not successful, an error is returned
func DeleteAllEventsByCourseAndSemester(app *pocketbase.PocketBase, course string, semester string) error {
err := db.DeleteAllEventsByCourse(app.Dao(), course, semester)
func (s *PocketBaseEventService) DeleteAllEventsByCourseAndSemester(course string, semester string) error {
err := db.DeleteAllEventsByCourse(s.app.Dao(), course, semester)
if err != nil {
return err
} else {
@@ -103,8 +120,8 @@ func DeleteAllEventsByCourseAndSemester(app *pocketbase.PocketBase, course strin
}
}
func DeleteAllEvents(app *pocketbase.PocketBase) error {
err := db.DeleteAllEvents(app)
func (s *PocketBaseEventService) DeleteAllEvents() error {
err := db.DeleteAllEvents(s.app)
if err != nil {
return err
} else {
@@ -120,7 +137,7 @@ func DeleteAllEvents(app *pocketbase.PocketBase) error {
// 3. Save all events for the course and the semester
// If the update was successful, nil is returned
// If the update was not successful, an error is returned
func UpdateModulesForCourse(app *pocketbase.PocketBase, seminarGroup model.SeminarGroup) (model.Events, error) {
func (s *PocketBaseEventService) UpdateModulesForCourse(seminarGroup model.SeminarGroup) (model.Events, error) {
seminarGroup, err := v1.FetchAndParse(seminarGroup.Semester, seminarGroup.Course)
if err != nil {
@@ -134,14 +151,14 @@ func UpdateModulesForCourse(app *pocketbase.PocketBase, seminarGroup model.Semin
//if there are no events in the database, save the new events
//get all events for the course and the semester
dbEvents, err := db.GetAllEventsForCourse(app, seminarGroup.Course)
dbEvents, err := db.GetAllEventsForCourse(s.app, seminarGroup.Course)
if err != nil {
return nil, err
}
//if there are no events in the database, save the new events
if len(dbEvents) == 0 {
events, dbError := db.SaveSeminarGroupEvents(seminarGroup, app)
events, dbError := db.SaveSeminarGroupEvents(seminarGroup, s.app)
if dbError != nil {
return nil, dbError
}
@@ -154,27 +171,27 @@ func UpdateModulesForCourse(app *pocketbase.PocketBase, seminarGroup model.Semin
// check which events are not already in the database and need to be inserted/saved
for _, event := range seminarGroup.Events {
if !ContainsEvent(dbEvents, event) {
if !containsEvent(dbEvents, event) {
insertList = append(insertList, event)
}
}
// check which events are in the database but not in the seminarGroup and need to be deleted
for _, dbEvent := range dbEvents {
if !ContainsEvent(seminarGroup.Events, dbEvent) {
if !containsEvent(seminarGroup.Events, dbEvent) {
deleteList = append(deleteList, dbEvent)
}
}
// delete all events that are in the deleteList
err = db.DeleteEvents(deleteList, app)
err = db.DeleteEvents(deleteList, s.app)
if err != nil {
slog.Error("Failed to delete events:", "error", err)
return nil, err
}
// save all events that are in the insertList
savedEvents, err := db.SaveEvents(insertList, app.Dao())
savedEvents, err := db.SaveEvents(insertList, s.app.Dao())
if err != nil {
slog.Error("Failed to save events: ", "error", err)
return nil, err
@@ -184,7 +201,7 @@ func UpdateModulesForCourse(app *pocketbase.PocketBase, seminarGroup model.Semin
return savedEvents, nil
}
func ContainsEvent(events model.Events, event model.Event) bool {
func containsEvent(events model.Events, event model.Event) bool {
for _, e := range events {
if e.Name == event.Name &&
e.Prof == event.Prof &&
@@ -199,8 +216,8 @@ func ContainsEvent(events model.Events, event model.Event) bool {
return false
}
func GetEventTypes(app *pocketbase.PocketBase) ([]string, error) {
dbEventTypes, err := db.GetAllEventTypes(app)
func (s *PocketBaseEventService) GetEventTypes() ([]string, error) {
dbEventTypes, err := db.GetAllEventTypes(s.app)
if err != nil {
return nil, err
}