summaryrefslogtreecommitdiffstats
path: root/cmd/web/handlers.go
diff options
context:
space:
mode:
authorMatthew Lemon <y@yulqen.org>2024-04-18 11:06:32 +0100
committerMatthew Lemon <y@yulqen.org>2024-04-18 11:06:32 +0100
commit20560419614e22fbb58567cdb0b88b54caf679f4 (patch)
tree163df44f07907d865b363db3bc198287ebd3d25f /cmd/web/handlers.go
parent435742cede199e3c85b5e2eb5a42ccbee4906a05 (diff)
Adds code from ded-go-core - no database
D2S test app code removed (nginx error). Adds all go code from `ded-go-core` using the basic Gov.UK UI for a test page for DED.
Diffstat (limited to 'cmd/web/handlers.go')
-rw-r--r--cmd/web/handlers.go144
1 files changed, 144 insertions, 0 deletions
diff --git a/cmd/web/handlers.go b/cmd/web/handlers.go
new file mode 100644
index 0000000..0827ea1
--- /dev/null
+++ b/cmd/web/handlers.go
@@ -0,0 +1,144 @@
+package main
+
+import (
+ "errors"
+ "fmt"
+ "net/http"
+ "strconv"
+
+ "github.com/defencedigital/ded-web/internal/models"
+)
+
+func (app *application) listPersons(w http.ResponseWriter, r *http.Request) {
+ ps, err := app.persons.ListAll()
+ if err != nil {
+ app.serverError(w, r, err)
+ return
+ }
+
+ app.render(w, r, http.StatusOK, "persons_list.tmpl.html", templateData{
+ Persons: ps,
+ })
+}
+
+func (app *application) listOperations(w http.ResponseWriter, r *http.Request) {
+
+ ops, err := app.operations.ListAll()
+ if err != nil {
+ app.serverError(w, r, err)
+ return
+ }
+
+ var newOps []models.Operation
+
+ for _, op := range ops {
+ esses, err := app.engagementStrategies.GetForOperation(op.ID)
+ // TODO: Check what kind of error this is, don't just continue
+ if err != nil {
+ continue
+ }
+ if len(esses) > 0 {
+ op.EngagementStrategies = esses
+ newOps = append(newOps, op)
+ } else {
+ newOps = append(newOps, op)
+ }
+ }
+
+ app.render(w, r, http.StatusOK, "operations_list.tmpl.html", templateData{
+ Operations: newOps,
+ })
+}
+
+func (app *application) listOrganisations(w http.ResponseWriter, r *http.Request) {
+
+ latest, err := app.organisations.Latest()
+ if err != nil {
+ app.serverError(w, r, err)
+ return
+ }
+
+ // We are putting latest in the Organisations field of templateData and leaving
+ // templateData.Operations as the nil value because we don't need Operations in this
+ // page, of course.
+ app.render(w, r, http.StatusOK, "organisations_list.tmpl.html", templateData{
+ Organisations: latest,
+ })
+}
+
+func (app *application) home(w http.ResponseWriter, r *http.Request) {
+ // Check if the current request URL path exactly matches "/". If it doesn't, use
+ // the http.NotFound() function to send a 404 response to the client.
+ // Importantly, we then return from the handler. If we don't return the handler
+ // would keep executing.
+ if r.URL.Path != "/" {
+ app.notFound(w)
+ return
+ }
+
+ // organisations, err := app.organisations.Latest()
+ // if err != nil {
+ // app.serverError(w, r, err)
+ // return
+ // }
+
+ // for _, organisation := range organisations {
+ // fmt.Fprintf(w, "%+v\n", organisation)
+ // }
+
+ // files := []string{
+ // "./ui/html/base.tmpl.html",
+ // "./ui/html/pages/home.tmpl.html",
+ // "./ui/html/partials/nav.tmpl.html",
+ // }
+
+ // ts, err := template.ParseFiles(files...)
+ // if err != nil {
+ // app.serverError(w, r, err) // Use the serverError() helper
+ // return
+ // }
+
+ // err = ts.ExecuteTemplate(w, "base", nil)
+ // if err != nil {
+ // app.serverError(w, r, err) // Use the serverError() helper
+ // }
+ app.render(w, r, http.StatusOK, "home.tmpl.html", templateData{})
+}
+
+func (app *application) organisationView(w http.ResponseWriter, r *http.Request) {
+ id, err := strconv.Atoi(r.URL.Query().Get("id"))
+ if err != nil || id < 1 {
+ app.notFound(w)
+ return
+ }
+
+ o, err := app.organisations.Get(id)
+ if err != nil {
+ if errors.Is(err, models.ErrNoRecord) {
+ app.notFound(w)
+ } else {
+ app.serverError(w, r, err)
+ }
+ return
+ }
+ fmt.Fprintf(w, "%+v", o)
+}
+
+func (app *application) organisationCreate(w http.ResponseWriter, r *http.Request) {
+ if r.Method != http.MethodPost {
+ w.Header().Set("Allow", http.MethodPost)
+ app.clientError(w, http.StatusMethodNotAllowed)
+ return
+ }
+
+ // Dummy data
+ name := "Test Organisation"
+
+ id, err := app.organisations.Insert(name)
+ if err != nil {
+ app.serverError(w, r, err)
+ return
+ }
+
+ http.Redirect(w, r, fmt.Sprintf("/organisation/view?id=%d", id), http.StatusSeeOther)
+}