Merge branch 'refs/heads/main' into 7-scalability

# Conflicts:
#	backend/service/addCalDavRoutes.go
This commit is contained in:
Elmar Kresse
2024-06-10 21:01:12 +02:00
23 changed files with 566 additions and 20957 deletions

View File

@@ -82,13 +82,13 @@ func FetchAndUpdateSportEvents(app *pocketbase.PocketBase) ([]model.Event, error
}
// @TODO: delete and save events in one transaction and it only should delete events that are not in the new events list and save events that are not in the database
err = db.DeleteAllEventsByCourse(app, "Sport", functions.GetCurrentSemesterString(clock.RealClock{}))
err = db.DeleteAllEventsByCourse(app.Dao(), "Sport", functions.GetCurrentSemesterString(clock.RealClock{}))
if err != nil {
return nil, err
}
// save events to database
savedEvents, err := db.SaveEvents(events, app)
savedEvents, err := db.SaveEvents(events, app.Dao())
if err != nil {
return nil, err

View File

@@ -20,6 +20,7 @@ import (
"fmt"
"github.com/google/uuid"
"github.com/pocketbase/pocketbase"
"github.com/pocketbase/pocketbase/daos"
"golang.org/x/net/html"
"htwkalender/model"
"htwkalender/service/db"
@@ -89,21 +90,44 @@ func fetchAndSaveAllEventsForSemester(
var savedRecords []model.Event
url := stubUrl[0] + semester + stubUrl[1]
events, err := parseEventForOneSemester(url)
if err != nil {
return nil, fmt.Errorf("failed to parse events for "+semester+": %w", err)
}
err = db.DeleteAllEventsBySemesterWithoutCourse(app, "Sport", semester)
if err != nil {
return nil, fmt.Errorf("failed to delete all events for "+semester+": %w", err)
}
savedEvents, dbError := db.SaveEvents(events, app)
if dbError != nil {
return nil, fmt.Errorf("failed to save events for "+semester+": %w", dbError)
}
savedRecords = append(savedRecords, savedEvents...)
err = updateDatabase(app, events, "Sport", semester)
return savedRecords, err
}
func updateDatabase(app *pocketbase.PocketBase, eventsToBeAdded []model.Event, course string, semester string) error {
var addedEvents []model.Event
var err error
// to in transaction the events will be added and deleted
err = app.Dao().RunInTransaction(func(txDao *daos.Dao) error {
err = db.DeleteAllEventsRatherThenCourse(txDao, course, semester)
if err != nil {
return err
}
addedEvents, err = db.SaveEvents(eventsToBeAdded, txDao)
if err != nil {
return err
}
return nil
})
if err != nil {
return err
}
slog.Info("Added events: ", "events", len(addedEvents))
return nil
}
func parseEventForOneSemester(url string) ([]model.Event, error) {
// Fetch Webpage from URL
webpage, err := fetch.GetHTML(url)