From 75ca6ff6c070548bfdf8d1a2629e1dbc80e5a883 Mon Sep 17 00:00:00 2001 From: Brett Bender Date: Sat, 20 Jan 2024 01:46:47 -0600 Subject: [PATCH] feat: shelf creation --- internal/api/assets.go | 2 -- internal/api/shelves.go | 28 +++++++++++++++++++++++++++- internal/types/buildings.go | 7 +++++++ internal/types/shelves.go | 10 ++++++++++ 4 files changed, 44 insertions(+), 3 deletions(-) diff --git a/internal/api/assets.go b/internal/api/assets.go index 03a1b37..6566ce6 100644 --- a/internal/api/assets.go +++ b/internal/api/assets.go @@ -2,7 +2,6 @@ package api import ( "context" - "log" "net/http" "strconv" @@ -94,7 +93,6 @@ func (s *APIServer) deleteAsset(w http.ResponseWriter, r *http.Request) error { func (s *APIServer) createAsset(w http.ResponseWriter, r *http.Request) error { data := &types.CreateAssetRequest{} if err := render.Bind(r, data); err != nil { - log.Printf("ERR: %v\n", err) return render.Render(w, r, errBadRequest(err)) } diff --git a/internal/api/shelves.go b/internal/api/shelves.go index 7daba74..cb06dfd 100644 --- a/internal/api/shelves.go +++ b/internal/api/shelves.go @@ -13,7 +13,7 @@ import ( func (s *APIServer) setupShelfRoutes() func(chi.Router) { return func(r chi.Router) { r.Get("/", makeHandler(s.getShelves)) - //r.Post("/", makeHandler(s.createShelf)) + r.Post("/", makeHandler(s.createShelf)) r.Route("/{shelfID}", func(r chi.Router) { r.Use(s.ShelfCtx) @@ -94,3 +94,29 @@ func (s *APIServer) deleteShelf(w http.ResponseWriter, r *http.Request) error { ShelfLocation: shelf, }) } + +func (s *APIServer) createShelf(w http.ResponseWriter, r *http.Request) error { + data := &types.CreateShelfRequest{} + if err := render.Bind(r, data); err != nil { + return render.Render(w, r, errBadRequest(err)) + } + + shelf := &types.ShelfLocation{ + Name: data.Name, + RoomNumber: data.RoomNumber, + Description: data.Description, + BuildingID: data.BuildingID, + } + + err := s.db.CreateShelfLocation(shelf) + if err != nil { + return err + } + + return render.Render(w, r, &types.ShelfResponse{ + Response: &types.Response{ + HTTPStatusCode: http.StatusOK, + }, + ShelfLocation: shelf, + }) +} diff --git a/internal/types/buildings.go b/internal/types/buildings.go index 8754fc9..f22c35d 100644 --- a/internal/types/buildings.go +++ b/internal/types/buildings.go @@ -1,6 +1,7 @@ package types import ( + "net/http" "time" "gorm.io/gorm" @@ -23,6 +24,12 @@ type Building struct { Requests */ +type CreateBuildingRequest struct { + Name string `json:"name"` +} + +func (c CreateBuildingRequest) Bind(r *http.Request) error { return nil } + /* Responses */ diff --git a/internal/types/shelves.go b/internal/types/shelves.go index efef07f..586e9c5 100644 --- a/internal/types/shelves.go +++ b/internal/types/shelves.go @@ -1,6 +1,7 @@ package types import ( + "net/http" "time" "gorm.io/gorm" @@ -27,6 +28,15 @@ type ShelfLocation struct { Requests */ +type CreateShelfRequest struct { + Name string `json:"name"` + RoomNumber string `json:"room_number,omitempty"` + Description string `json:"description,omitempty"` + BuildingID uint64 `json:"building_id"` +} + +func (c CreateShelfRequest) Bind(r *http.Request) error { return nil } + /* Responses */