more route cleanup

This commit is contained in:
Hayden 2022-10-28 17:47:52 -08:00
parent 430c503287
commit ad0cf43aca
5 changed files with 24 additions and 20 deletions

View file

@ -9,12 +9,21 @@ import (
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
) )
func (ctrl *V1Controller) routeID(w http.ResponseWriter, r *http.Request) (uuid.UUID, error) { // routeID extracts the ID from the request URL. If the ID is not in a valid
ID, err := uuid.Parse(chi.URLParam(r, "id")) // format, an error is returned. If a error is returned, it can be directly returned
// from the handler. the validate.ErrInvalidID error is known by the error middleware
// and will be handled accordingly.
//
// Example: /api/v1/ac614db5-d8b8-4659-9b14-6e913a6eb18a -> uuid.UUID{ac614db5-d8b8-4659-9b14-6e913a6eb18a}
func (ctrl *V1Controller) routeID(r *http.Request) (uuid.UUID, error) {
return ctrl.routeUUID(r, "id")
}
func (ctrl *V1Controller) routeUUID(r *http.Request, key string) (uuid.UUID, error) {
ID, err := uuid.Parse(chi.URLParam(r, key))
if err != nil { if err != nil {
log.Err(err).Msg("failed to parse id") log.Err(err).Msg("failed to parse id")
return uuid.Nil, validate.ErrInvalidID return uuid.Nil, validate.ErrInvalidID
} }
return ID, nil return ID, nil
} }

View file

@ -137,7 +137,7 @@ func (ctrl *V1Controller) HandleItemUpdate() server.HandlerFunc {
func (ctrl *V1Controller) handleItemsGeneral() server.HandlerFunc { func (ctrl *V1Controller) handleItemsGeneral() server.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) error { return func(w http.ResponseWriter, r *http.Request) error {
ctx := services.NewContext(r.Context()) ctx := services.NewContext(r.Context())
ID, err := ctrl.routeID(w, r) ID, err := ctrl.routeID(r)
if err != nil { if err != nil {
return err return err
} }

View file

@ -5,8 +5,6 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"github.com/go-chi/chi/v5"
"github.com/google/uuid"
"github.com/hay-kot/homebox/backend/ent/attachment" "github.com/hay-kot/homebox/backend/ent/attachment"
"github.com/hay-kot/homebox/backend/internal/repo" "github.com/hay-kot/homebox/backend/internal/repo"
"github.com/hay-kot/homebox/backend/internal/services" "github.com/hay-kot/homebox/backend/internal/services"
@ -71,7 +69,7 @@ func (ctrl *V1Controller) HandleItemAttachmentCreate() server.HandlerFunc {
attachmentType = attachment.TypeAttachment.String() attachmentType = attachment.TypeAttachment.String()
} }
id, err := ctrl.routeID(w, r) id, err := ctrl.routeID(r)
if err != nil { if err != nil {
return err return err
} }
@ -161,36 +159,33 @@ func (ctrl *V1Controller) HandleItemAttachmentUpdate() server.HandlerFunc {
} }
func (ctrl *V1Controller) handleItemAttachmentsHandler(w http.ResponseWriter, r *http.Request) error { func (ctrl *V1Controller) handleItemAttachmentsHandler(w http.ResponseWriter, r *http.Request) error {
ID, err := ctrl.routeID(w, r) ID, err := ctrl.routeID(r)
if err != nil { if err != nil {
return err return err
} }
attachmentId, err := uuid.Parse(chi.URLParam(r, "attachment_id")) attachmentID, err := ctrl.routeUUID(r, "attachment_id")
if err != nil { if err != nil {
log.Err(err).Msg("failed to parse attachment_id param") return err
return validate.NewRequestError(err, http.StatusBadRequest)
} }
ctx := services.NewContext(r.Context()) ctx := services.NewContext(r.Context())
switch r.Method { switch r.Method {
// Token Handler // Token Handler
case http.MethodGet: case http.MethodGet:
token, err := ctrl.svc.Items.AttachmentToken(ctx, ID, attachmentId) token, err := ctrl.svc.Items.AttachmentToken(ctx, ID, attachmentID)
if err != nil { if err != nil {
switch err { switch err {
case services.ErrNotFound: case services.ErrNotFound:
log.Err(err). log.Err(err).
Str("id", attachmentId.String()). Str("id", attachmentID.String()).
Msg("failed to find attachment with id") Msg("failed to find attachment with id")
return validate.NewRequestError(err, http.StatusNotFound) return validate.NewRequestError(err, http.StatusNotFound)
case services.ErrFileNotFound: case services.ErrFileNotFound:
log.Err(err). log.Err(err).
Str("id", attachmentId.String()). Str("id", attachmentID.String()).
Msg("failed to find file path for attachment with id") Msg("failed to find file path for attachment with id")
log.Warn().Msg("attachment with no file path removed from database") log.Warn().Msg("attachment with no file path removed from database")
@ -206,7 +201,7 @@ func (ctrl *V1Controller) handleItemAttachmentsHandler(w http.ResponseWriter, r
// Delete Attachment Handler // Delete Attachment Handler
case http.MethodDelete: case http.MethodDelete:
err = ctrl.svc.Items.AttachmentDelete(r.Context(), ctx.GID, ID, attachmentId) err = ctrl.svc.Items.AttachmentDelete(r.Context(), ctx.GID, ID, attachmentID)
if err != nil { if err != nil {
log.Err(err).Msg("failed to delete attachment") log.Err(err).Msg("failed to delete attachment")
return validate.NewRequestError(err, http.StatusInternalServerError) return validate.NewRequestError(err, http.StatusInternalServerError)
@ -223,7 +218,7 @@ func (ctrl *V1Controller) handleItemAttachmentsHandler(w http.ResponseWriter, r
return validate.NewRequestError(err, http.StatusBadRequest) return validate.NewRequestError(err, http.StatusBadRequest)
} }
attachment.ID = attachmentId attachment.ID = attachmentID
val, err := ctrl.svc.Items.AttachmentUpdate(ctx, ID, &attachment) val, err := ctrl.svc.Items.AttachmentUpdate(ctx, ID, &attachment)
if err != nil { if err != nil {
log.Err(err).Msg("failed to delete attachment") log.Err(err).Msg("failed to delete attachment")

View file

@ -96,7 +96,7 @@ func (ctrl *V1Controller) HandleLabelUpdate() server.HandlerFunc {
func (ctrl *V1Controller) handleLabelsGeneral() server.HandlerFunc { func (ctrl *V1Controller) handleLabelsGeneral() server.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) error { return func(w http.ResponseWriter, r *http.Request) error {
ctx := services.NewContext(r.Context()) ctx := services.NewContext(r.Context())
ID, err := ctrl.routeID(w, r) ID, err := ctrl.routeID(r)
if err != nil { if err != nil {
return err return err
} }

View file

@ -98,7 +98,7 @@ func (ctrl *V1Controller) HandleLocationUpdate() server.HandlerFunc {
func (ctrl *V1Controller) handleLocationGeneral() server.HandlerFunc { func (ctrl *V1Controller) handleLocationGeneral() server.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) error { return func(w http.ResponseWriter, r *http.Request) error {
ctx := services.NewContext(r.Context()) ctx := services.NewContext(r.Context())
ID, err := ctrl.routeID(w, r) ID, err := ctrl.routeID(r)
if err != nil { if err != nil {
return err return err
} }