From c6d99690edb7ee60609930ea1f6746cff688a31c Mon Sep 17 00:00:00 2001 From: "Gustavo \"Guz\" L de Mello" Date: Mon, 17 Mar 2025 09:13:55 -0300 Subject: [PATCH] feat(router,service): list projects endpoint --- router/projects.go | 33 +++++++++++++++++++++++++++++++++ service/projects.go | 19 +++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/router/projects.go b/router/projects.go index 4d86916..fd6741e 100644 --- a/router/projects.go +++ b/router/projects.go @@ -1,6 +1,7 @@ package router import ( + "encoding/json" "errors" "fmt" "net/http" @@ -20,6 +21,11 @@ func (router *router) projects(w http.ResponseWriter, r *http.Request) { return } + if r.Method == http.MethodGet { + router.listProjects(w, r) + return + } + router.createProject(w, r) } @@ -84,3 +90,30 @@ func (router *router) getProject(w http.ResponseWriter, r *http.Request) { return } } + +func (router *router) listProjects(w http.ResponseWriter, r *http.Request) { + router.assert.NotNil(w) + router.assert.NotNil(r) + router.assert.NotNil(router.service) + router.assert.NotNil(router.templates) + + ps, err := router.service.ListProjects() + if err != nil { + exception.InternalServerError(err).ServeHTTP(w, r) + return + } + + b, err := json.Marshal(ps) + if err != nil { + exception.InternalServerError(err).ServeHTTP(w, r) + return + } + + w.Header().Add("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _, err = w.Write(b) + if err != nil { + exception.InternalServerError(err).ServeHTTP(w, r) + return + } +} diff --git a/service/projects.go b/service/projects.go index 57ac53e..fc2dbbc 100644 --- a/service/projects.go +++ b/service/projects.go @@ -113,3 +113,22 @@ func (s *Service) GetProject(id string) (Project, error) { return p, nil } + +func (s *Service) ListProjects() ([]Project, error) { + s.assert.NotNil(s.db) + + ps, err := s.db.ListProjects() + if err != nil { + return []Project{}, err + } + + p := make([]Project, len(ps)) + for i := range p { + p[i] = Project{ + ID: ps[i].ID, + Title: ps[i].Title, + } + } + + return p, nil +}