feat: add delete schoolyear route and handler
This commit is contained in:
parent
3ac1947106
commit
34834f2eaa
3 changed files with 52 additions and 0 deletions
|
|
@ -580,3 +580,31 @@ func calculateHours(entry TimeEntry) float64 {
|
||||||
return calculateHoursDiff(entry.StartTime, entry.EndTime)
|
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
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -690,3 +690,26 @@ func (app *App) GenerateYearlySummaryPDFHandler(c echo.Context) error {
|
||||||
|
|
||||||
return c.Blob(http.StatusOK, "application/pdf", pdfBytes)
|
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)
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -80,6 +80,7 @@ func main() {
|
||||||
admin.POST("/time-entry", app.AdminCreateTimeEntryHandler)
|
admin.POST("/time-entry", app.AdminCreateTimeEntryHandler)
|
||||||
admin.GET("/school-years", app.GetSchoolYearsHandler)
|
admin.GET("/school-years", app.GetSchoolYearsHandler)
|
||||||
admin.POST("/school-years", app.CreateSchoolYearHandler)
|
admin.POST("/school-years", app.CreateSchoolYearHandler)
|
||||||
|
admin.DELETE("/school-years/:id", app.DeleteSchoolYearHandler)
|
||||||
admin.PUT("/school-years/:id/activate", app.SetActiveSchoolYearHandler)
|
admin.PUT("/school-years/:id/activate", app.SetActiveSchoolYearHandler)
|
||||||
admin.GET("/yearly-summary/pdf", app.GenerateYearlySummaryPDFHandler)
|
admin.GET("/yearly-summary/pdf", app.GenerateYearlySummaryPDFHandler)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue