// deleteOfficeHourHandler package controllers import ( "database/sql" "errors" "net/http" "officeHours/models" "officeHours/templating" "strconv" ) // Offer a table of all office hours to delete, // verify the corresponding mail address and // then send a confirmation mail. func (b *BaseHandler) DeleteOfficeHourHandler(w http.ResponseWriter, req *http.Request) { if req.FormValue("id") != "" { id, err := strconv.Atoi(req.FormValue("id")) if err != nil { w.WriteHeader(http.StatusBadRequest) templating.ServeTemplate(w, "deleteFailure", struct{ Error string }{"Id konnte nicht gelesen werden."}) return } officeHour, err := b.officeHourRepo.FindById(id) if err != nil { if errors.Is(err, sql.ErrNoRows) { w.WriteHeader(http.StatusNotFound) templating.ServeTemplate(w, "deleteFailure", struct{ Error string }{"Sprechstunde wurde nicht gefunden."}) } else { w.WriteHeader(http.StatusInternalServerError) templating.ServeTemplate(w, "deleteFailure", struct{ Error error }{err}) } return } if req.FormValue("email") == "" { templating.ServeTemplate(w, "deleteMailForm", struct { Error string OfficeHour models.OfficeHour }{"", officeHour}) return } if req.FormValue("email") != officeHour.Tutor.Email { w.WriteHeader(http.StatusUnauthorized) templating.ServeTemplate(w, "deleteMailForm", struct { Error string OfficeHour models.OfficeHour }{"Die Sprechstunde wurde nicht mit dieser Mailadresse angegeben.", officeHour}) return } _, err = b.requestRepo.Add(officeHour, models.RequestDelete) if err != nil { w.WriteHeader(http.StatusInternalServerError) templating.ServeTemplate(w, "deleteFailure", struct{ Error error }{err}) return } templating.ServeTemplate(w, "deleteSuccess", nil) } else { officeHours, _ := b.officeHourRepo.GetAll(true) timetable, slots := b.GetTimetable(officeHours) b.writeTimetablePage(w, req, b.printTimetable(timetable, slots, true)) } }