diff --git a/controllers/deleteOfficeHourHandler.go b/controllers/deleteOfficeHourHandler.go index 352ff02..4b609b7 100644 --- a/controllers/deleteOfficeHourHandler.go +++ b/controllers/deleteOfficeHourHandler.go @@ -2,26 +2,55 @@ package controllers import ( + "database/sql" + "errors" "net/http" - //"officeHours/models" + "officeHours/models" "officeHours/templating" "strconv" ) func (b *BaseHandler) DeleteOfficeHourHandler(w http.ResponseWriter, req *http.Request) { - // TODO: error handling here is by no means sufficient, furthermore - // 400 BadRequest is for technically wrong stuff (most promimently GET instead of POST) if req.FormValue("id") != "" { - _, err := strconv.Atoi(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) + officeHour, err := b.officeHourRepo.FindById(id) if err != nil { - w.WriteHeader(http.StatusBadRequest) + 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 } - //_, err = b.requestRepo.Add(officeHour, models.RequestDelete) - templating.ServeTemplate(w, "deleteDisabled", nil) + 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) diff --git a/templating/templates.go b/templating/templates.go index 210ec5a..7642af5 100644 --- a/templating/templates.go +++ b/templating/templates.go @@ -43,8 +43,9 @@ func InitTemplates() error { "addFailure": {"addFailure.html", false}, "addMask": {"addMask.html", false}, "addSuccess": {"addSuccess.html", false}, + "deleteFailure": {"deleteFailure.html", false}, + "deleteMailForm": {"deleteMailForm.html", false}, "deleteSuccess": {"deleteSuccess.html", false}, - "deleteDisabled": {"deleteDisabled.html", false}, "executeFailure": {"executeFailure.html", false}, "executeSuccess": {"executeSuccess.html", false}, "index": {"index.html", false}, diff --git a/templating/templates/deleteDisabled.html b/templating/templates/deleteDisabled.html deleted file mode 100644 index bd4b1b7..0000000 --- a/templating/templates/deleteDisabled.html +++ /dev/null @@ -1,6 +0,0 @@ -{{define "title"}}Sprechstunde löschen{{end}} - -{{define "content"}} -Sprechstunden zu löschen wurde wegen zu viel Spam deaktiviert.
-Falls du deine Sprechstunde löschen möchtest, melde dich bitte unter sprechstundentool@mathebau.de. -{{end}} diff --git a/templating/templates/deleteFailure.html b/templating/templates/deleteFailure.html new file mode 100644 index 0000000..88b95c5 --- /dev/null +++ b/templating/templates/deleteFailure.html @@ -0,0 +1,5 @@ +{{define "title"}}Sprechstunde löschen{{end}} + +{{define "content"}} +Das Löschen der Sprechstunde ist fehlgeschlagen: {{.Error}} +{{end}} diff --git a/templating/templates/deleteMailForm.html b/templating/templates/deleteMailForm.html new file mode 100644 index 0000000..af4b8ff --- /dev/null +++ b/templating/templates/deleteMailForm.html @@ -0,0 +1,19 @@ +{{define "title"}}Sprechstunde löschen{{end}} + +{{define "content"}} +{{.Error}} + +Willst du die Sprechstunde
+ {{printf "%02d" .OfficeHour.Date.Hour}}:{{printf "%02d" .OfficeHour.Date.Minute}} - {{printf "%02d" .OfficeHour.EndDate.Hour}}:{{printf "%02d" .OfficeHour.EndDate.Minute}}
+ {{if eq .OfficeHour.Date.Week 1}}in ungeraden Vorlesungswochen
{{end}}{{if eq .OfficeHour.Date.Week 2}}in geraden Vorlesungswochen
{{end}} + {{.OfficeHour.Course.Name}}
+ {{.OfficeHour.Tutor.Name}}
+ {{.OfficeHour.Room.Name}}
+wirklich löschen? Bitte bestätige dies durch Angabe der Mailadresse, mit der die Sprechstunde angelegt wurde:
+
+ +: +
+ +
+{{end}}