94 lines
2.7 KiB
Go
94 lines
2.7 KiB
Go
package web
|
|
|
|
import (
|
|
"gardomatic.kleiax.de/lib/client"
|
|
"net/http"
|
|
"strings"
|
|
)
|
|
|
|
type careInstructionForm struct {
|
|
Text string `form:"text"`
|
|
Status string `form:"status"`
|
|
}
|
|
|
|
func (app *application) careInstructionSave(w http.ResponseWriter, r *http.Request) {
|
|
gardenID, e := app.readPathID(r, "gardenID")
|
|
if e != nil {
|
|
app.notFound(w)
|
|
return
|
|
}
|
|
speciesID, e := app.readPathID(r, "speciesID")
|
|
if e != nil {
|
|
app.notFound(w)
|
|
return
|
|
}
|
|
var form careInstructionForm
|
|
if e = app.decodePostForm(r, &form); e != nil {
|
|
app.clientError(w, http.StatusBadRequest)
|
|
return
|
|
}
|
|
form.Text = strings.TrimSpace(form.Text)
|
|
if form.Status == "" {
|
|
form.Status = "untested"
|
|
}
|
|
input := client.CareInstructionInput{Text: &form.Text, Status: &form.Status}
|
|
instructionID, _ := app.readPathID(r, "instructionID")
|
|
if instructionID > 0 {
|
|
_, _, e = client.FromContext(r.Context()).UpdateCareInstruction(r.Context(), gardenID, speciesID, instructionID, input)
|
|
} else {
|
|
_, _, e = client.FromContext(r.Context()).CreateCareInstruction(r.Context(), gardenID, speciesID, input)
|
|
}
|
|
if e != nil {
|
|
app.handleAPIError(w, r, e)
|
|
return
|
|
}
|
|
if r.Header.Get("HX-Request") == "true" {
|
|
apiClient := client.FromContext(r.Context())
|
|
instructions, _, loadErr := apiClient.CareInstructions(r.Context(), gardenID, speciesID)
|
|
if loadErr != nil {
|
|
app.handleAPIError(w, r, loadErr)
|
|
return
|
|
}
|
|
data := app.newTemplateData(r)
|
|
garden, _, loadErr := apiClient.Garden(r.Context(), gardenID)
|
|
if loadErr != nil {
|
|
app.handleAPIError(w, r, loadErr)
|
|
return
|
|
}
|
|
species, _, loadErr := apiClient.Species(r.Context(), gardenID, speciesID)
|
|
if loadErr != nil {
|
|
app.handleAPIError(w, r, loadErr)
|
|
return
|
|
}
|
|
data.Garden = &garden
|
|
data.SpeciesID = speciesID
|
|
data.SpeciesGlobal = species.GardenID == nil
|
|
data.CareInstructions = instructions
|
|
app.renderTemplate(w, http.StatusOK, "species_form.tmpl", "care_instruction_list", data)
|
|
return
|
|
}
|
|
http.Redirect(w, r, pathWithQuery(webPath("species.edit", gardenID, speciesID), "step", "care"), http.StatusSeeOther)
|
|
}
|
|
func (app *application) careInstructionDelete(w http.ResponseWriter, r *http.Request) {
|
|
gardenID, e := app.readPathID(r, "gardenID")
|
|
if e != nil {
|
|
app.notFound(w)
|
|
return
|
|
}
|
|
speciesID, e := app.readPathID(r, "speciesID")
|
|
if e != nil {
|
|
app.notFound(w)
|
|
return
|
|
}
|
|
instructionID, e := app.readPathID(r, "instructionID")
|
|
if e != nil {
|
|
app.notFound(w)
|
|
return
|
|
}
|
|
if _, e = client.FromContext(r.Context()).DeleteCareInstruction(r.Context(), gardenID, speciesID, instructionID); e != nil {
|
|
app.handleAPIError(w, r, e)
|
|
return
|
|
}
|
|
http.Redirect(w, r, pathWithQuery(webPath("species.edit", gardenID, speciesID), "step", "care"), http.StatusSeeOther)
|
|
}
|