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)
|
||||
}
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
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.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)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue