feat: better API returns, asset update

This commit is contained in:
2024-01-21 01:02:40 -06:00
parent a8ee837dee
commit b2c8c2915f
7 changed files with 93 additions and 10 deletions

View File

@@ -67,6 +67,7 @@ func (s *APIServer) handleIndex(w http.ResponseWriter, r *http.Request) error {
func makeHandler(f APIFunc) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if err := f(w, r); err != nil {
log.Printf("Err: %v", err)
render.Render(w, r, errBadRequest(err))
}
}

View File

@@ -19,6 +19,7 @@ func (s *APIServer) setupAssetRoutes() func(r chi.Router) {
r.Use(s.AssetCtx)
r.Get("/", makeHandler(s.getAsset))
r.Delete("/", makeHandler(s.deleteAsset))
r.Put("/", makeHandler(s.updateAsset))
})
}
}
@@ -42,7 +43,7 @@ func (s *APIServer) AssetCtx(next http.Handler) http.Handler {
}
func (s *APIServer) getAssets(w http.ResponseWriter, r *http.Request) error {
assets, err := s.db.GetAssets(0, 50) // TODO: Proper Pagination
assets, err := s.db.GetAssets(0, 1000) // TODO: Proper Pagination
if err != nil {
return err
}
@@ -120,3 +121,41 @@ func (s *APIServer) createAsset(w http.ResponseWriter, r *http.Request) error {
Asset: asset,
})
}
func (s *APIServer) updateAsset(w http.ResponseWriter, r *http.Request) error {
ctx := r.Context()
eAsset, ok := ctx.Value("asset").(*types.Asset)
if !ok {
return render.Render(w, r, errUnprocessable)
}
data := &types.CreateAssetRequest{}
if err := render.Bind(r, data); err != nil {
return render.Render(w, r, errBadRequest(err))
}
asset := &types.Asset{
ID: eAsset.ID,
Name: data.Name,
Quantity: data.Quantity,
Length: data.Length,
Manufacturer: data.Manufacturer,
ModelName: data.ModelName,
Price: data.Price,
Comments: data.Comments,
ShelfLocationID: data.ShelfLocationID,
CategoryID: data.CategoryID,
}
err := s.db.UpdateAsset(eAsset.ID, asset)
if err != nil {
return err
}
return render.Render(w, r, &types.AssetResponse{
Response: &types.Response{
HTTPStatusCode: http.StatusOK,
},
Asset: asset,
})
}

View File

@@ -2,6 +2,7 @@ package api
import (
"context"
"log"
"net/http"
"strconv"
@@ -15,24 +16,27 @@ func (s *APIServer) setupShelfRoutes() func(chi.Router) {
r.Get("/", makeHandler(s.getShelves))
r.Post("/", makeHandler(s.createShelf))
r.Route("/{shelfID}", func(r chi.Router) {
r.Route("/{shelfId}", func(r chi.Router) {
r.Use(s.ShelfCtx)
r.Get("/", makeHandler(s.getShelf))
r.Delete("/", makeHandler(s.deleteShelf))
r.Get("/count", makeHandler(s.getShelfAssetCount))
})
}
}
func (s *APIServer) ShelfCtx(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
shelfIdStr := chi.URLParam(r, "shelfID")
shelfIdStr := chi.URLParam(r, "shelfId")
shelfId, err := strconv.ParseUint(shelfIdStr, 10, 64)
if err != nil {
log.Println("Test")
render.Render(w, r, errNotFound)
return
}
shelf, err := s.db.GetShelfByID(shelfId)
if err != nil {
log.Printf("Test 2: %v\n", err)
render.Render(w, r, errNotFound)
return
}
@@ -120,3 +124,23 @@ func (s *APIServer) createShelf(w http.ResponseWriter, r *http.Request) error {
ShelfLocation: shelf,
})
}
func (s *APIServer) getShelfAssetCount(w http.ResponseWriter, r *http.Request) error {
ctx := r.Context()
shelf, ok := ctx.Value("shelf").(*types.ShelfLocation)
if !ok {
return render.Render(w, r, errUnprocessable)
}
count, err := s.db.AssetCountInLocation(shelf.ID)
if err != nil {
return err
}
return render.Render(w, r, &types.CountResponse{
Response: &types.Response{
HTTPStatusCode: http.StatusOK,
},
Count: count,
})
}