From 34834f2eaaf572802f971053a879b216482325be Mon Sep 17 00:00:00 2001 From: Patryk Hegenberg Date: Sun, 9 Nov 2025 17:35:10 +0100 Subject: [PATCH] feat: add delete schoolyear route and handler --- backend/database.go | 28 ++++++++++++++++++++++++++++ backend/handlers.go | 23 +++++++++++++++++++++++ backend/main.go | 1 + 3 files changed, 52 insertions(+) diff --git a/backend/database.go b/backend/database.go index bd15b02..7987953 100644 --- a/backend/database.go +++ b/backend/database.go @@ -580,3 +580,31 @@ func calculateHours(entry TimeEntry) float64 { return calculateHoursDiff(entry.StartTime, entry.EndTime) } } + +func DeleteSchoolYear(db *sql.DB, id int) error { + var isActive bool + err := db.QueryRow("SELECT is_active FROM school_years WHERE id = ?", id).Scan(&isActive) + if err != nil { + return err + } + + if isActive { + return fmt.Errorf("cannot delete active school year") + } + + result, err := db.Exec("DELETE FROM school_years WHERE id = ? AND is_active = 0", id) + if err != nil { + return err + } + + rowsAffected, err := result.RowsAffected() + if err != nil { + return err + } + + if rowsAffected == 0 { + return sql.ErrNoRows + } + + return nil +} diff --git a/backend/handlers.go b/backend/handlers.go index 067a4ea..22d4e92 100644 --- a/backend/handlers.go +++ b/backend/handlers.go @@ -690,3 +690,26 @@ func (app *App) GenerateYearlySummaryPDFHandler(c echo.Context) error { return c.Blob(http.StatusOK, "application/pdf", pdfBytes) } + +func (app *App) DeleteSchoolYearHandler(c echo.Context) error { + id, err := strconv.Atoi(c.Param("id")) + if err != nil { + return HandleError(c, ErrInvalidInputMsg("Schuljahr-ID")) + } + + if err := DeleteSchoolYear(app.DB, id); err != nil { + if err == sql.ErrNoRows { + return HandleError(c, ErrNotFoundMsg("Schuljahr")) + } + if err.Error() == "cannot delete active school year" { + return HandleError(c, &AppError{ + Code: "CANNOT_DELETE_ACTIVE_SCHOOL_YEAR", + Message: "Aktives Schuljahr kann nicht gelöscht werden", + HTTPStatus: http.StatusBadRequest, + }) + } + return HandleError(c, ErrDatabaseMsg(err)) + } + + return c.NoContent(http.StatusNoContent) +} diff --git a/backend/main.go b/backend/main.go index 7e1903e..84cb7f1 100644 --- a/backend/main.go +++ b/backend/main.go @@ -80,6 +80,7 @@ func main() { admin.POST("/time-entry", app.AdminCreateTimeEntryHandler) admin.GET("/school-years", app.GetSchoolYearsHandler) admin.POST("/school-years", app.CreateSchoolYearHandler) + admin.DELETE("/school-years/:id", app.DeleteSchoolYearHandler) admin.PUT("/school-years/:id/activate", app.SetActiveSchoolYearHandler) admin.GET("/yearly-summary/pdf", app.GenerateYearlySummaryPDFHandler) }