fix:#65 fixed fetching and deleting events in front

This commit is contained in:
Elmar Kresse
2024-03-11 03:33:14 +01:00
parent 1f99e26f80
commit 9f316c596a
5 changed files with 42 additions and 28 deletions

View File

@ -5,7 +5,6 @@ import (
"github.com/pocketbase/pocketbase/core"
"github.com/pocketbase/pocketbase/tools/cron"
"htwkalender/service/course"
"htwkalender/service/events"
"htwkalender/service/feed"
"htwkalender/service/fetch/sport"
v2 "htwkalender/service/fetch/v2"
@ -44,13 +43,8 @@ func AddSchedules(app *pocketbase.PocketBase) {
slog.Info("Successfully fetched " + strconv.FormatInt(int64(len(sportEvents)), 10) + " sport events")
})
//delete all events and then fetch all events from remote this should be done every sunday at 2am
//fetch all events for semester and delete from remote this should be done every sunday at 2am
scheduler.MustAdd("fetchEvents", "0 2 * * 0", func() {
err := events.DeleteAllEvents(app)
if err != nil {
slog.Error("Failed to delete all events: %v", err)
}
savedEvents, err := v2.FetchAllEventsAndSave(app, time.RealClock{})
if err != nil {
slog.Error("Failed to fetch and save events: %v", err)

View File

@ -203,7 +203,7 @@ func GetAllModulesDistinctByNameAndCourse(app *pocketbase.PocketBase) ([]model.M
return modules, nil
}
func DeleteAllEventsForCourse(app *pocketbase.PocketBase, course string, semester string) error {
func DeleteAllEventsByCourse(app *pocketbase.PocketBase, course string, semester string) error {
_, err := app.Dao().DB().Delete("events", dbx.NewExp("course = {:course} AND semester = {:semester}", dbx.Params{"course": course, "semester": semester})).Execute()
if err != nil {
@ -212,6 +212,16 @@ func DeleteAllEventsForCourse(app *pocketbase.PocketBase, course string, semeste
return nil
}
func DeleteAllEventsBySemester(app *pocketbase.PocketBase, semester string) error {
_, err := app.Dao().DB().Delete("events", dbx.NewExp("semester = {:semester}", dbx.Params{"semester": semester})).Execute()
if err != nil {
return err
}
return nil
}
func DeleteAllEvents(app *pocketbase.PocketBase) error {
_, err := app.Dao().DB().Delete("events", dbx.NewExp("1=1")).Execute()

View File

@ -77,7 +77,7 @@ func GetModuleByUUID(app *pocketbase.PocketBase, uuid string) (model.Module, err
// 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.DeleteAllEventsForCourse(app, course, semester)
err := db.DeleteAllEventsByCourse(app, course, semester)
if err != nil {
return err
} else {

View File

@ -65,7 +65,7 @@ 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.DeleteAllEventsForCourse(app, "Sport", functions.GetCurrentSemesterString())
err = db.DeleteAllEventsByCourse(app, "Sport", functions.GetCurrentSemesterString())
if err != nil {
return nil, err
}

View File

@ -12,6 +12,7 @@ import (
localTime "htwkalender/service/functions/time"
"log/slog"
"strings"
"time"
)
func ParseEventsFromRemote(app *pocketbase.PocketBase) (model.Events, error) {
@ -52,29 +53,38 @@ func FetchAllEventsAndSave(app *pocketbase.PocketBase, clock localTime.Clock) ([
"%0A?&template=sws_modul&weeks=1-65&combined=yes",
}
if (clock.Now().Month() >= 3) && (clock.Now().Month() <= 10) {
url := stubUrl[0] + "ss" + stubUrl[1]
var events []model.Event
events, err = parseEventForOneSemester(url)
if err != nil {
// append new error to err
// fmt.Errorf("failed to parse events for summmer semester: %w", err)
err = fmt.Errorf("failed to parse events for summmer semester: %w", err)
}
savedEvents, dbError := db.SaveEvents(events, app)
if dbError != nil {
// fmt.Errorf("failed to save events: %w", dbError)
err = fmt.Errorf("failed to save events: %w", dbError)
}
savedRecords = append(savedEvents, events...)
savedRecordsSs, errSs := fetchAndSaveAllEventsForSemester(app, time.March, time.October, "ss", clock, stubUrl)
if errSs == nil {
savedRecords = append(savedRecords, savedRecordsSs...)
}
savedRecordsWs, errWs := fetchAndSaveAllEventsForSemester(app, time.September, time.April, "ws", clock, stubUrl)
if errWs == nil {
savedRecords = append(savedRecords, savedRecordsWs...)
}
return savedRecords, err
}
if (clock.Now().Month() >= 9) || (clock.Now().Month() <= 4) {
url := stubUrl[0] + "ws" + stubUrl[1]
func fetchAndSaveAllEventsForSemester(
app *pocketbase.PocketBase,
before time.Month,
after time.Month,
semester string,
clock localTime.Clock,
stubUrl [2]string,
) ([]model.Event, error) {
var err error = nil
var savedRecords []model.Event
if (clock.Now().Month() >= after) || (clock.Now().Month() <= before) {
url := stubUrl[0] + semester + stubUrl[1]
var events []model.Event
events, err = parseEventForOneSemester(url)
if err != nil {
err = fmt.Errorf("failed to parse events for winter semester: %w", err)
err = fmt.Errorf("failed to parse events for "+semester+": %w", err)
}
err = db.DeleteAllEventsBySemester(app, semester)
if err != nil {
err = fmt.Errorf("failed to delete all events for "+semester+": %w", err)
}
savedEvents, dbError := db.SaveEvents(events, app)
if dbError != nil {