diff --git a/backend/app/api/v1/partials.go b/backend/app/api/v1/partials.go index b981adc..7d573aa 100644 --- a/backend/app/api/v1/partials.go +++ b/backend/app/api/v1/partials.go @@ -5,34 +5,10 @@ import ( "github.com/go-chi/chi/v5" "github.com/google/uuid" - "github.com/hay-kot/homebox/backend/internal/repo" - "github.com/hay-kot/homebox/backend/internal/services" "github.com/hay-kot/homebox/backend/pkgs/server" "github.com/rs/zerolog/log" ) -/* -This is where we put partial snippets/functions for actions that are commonly -used within the controller class. This _hopefully_ helps with code duplication -and makes it a little more consistent when error handling and logging. -*/ - -// partialParseIdAndUser parses the ID from the requests URL and pulls the user -// from the context. If either of these fail, it will return an error. When an error -// occurs it will also write the error to the response. As such, if an error is returned -// from this function you can return immediately without writing to the response. -func (ctrl *V1Controller) partialParseIdAndUser(w http.ResponseWriter, r *http.Request) (uuid.UUID, *repo.UserOut, error) { - uid, err := uuid.Parse(chi.URLParam(r, "id")) - if err != nil { - log.Err(err).Msg("failed to parse id") - server.RespondError(w, http.StatusBadRequest, err) - return uuid.Nil, &repo.UserOut{}, err - } - - user := services.UseUserCtx(r.Context()) - return uid, user, nil -} - func (ctrl *V1Controller) partialRouteID(w http.ResponseWriter, r *http.Request) (uuid.UUID, error) { ID, err := uuid.Parse(chi.URLParam(r, "id")) if err != nil { diff --git a/backend/app/api/v1/v1_ctrl_items_attachments.go b/backend/app/api/v1/v1_ctrl_items_attachments.go index d246eb0..5d921b5 100644 --- a/backend/app/api/v1/v1_ctrl_items_attachments.go +++ b/backend/app/api/v1/v1_ctrl_items_attachments.go @@ -72,7 +72,7 @@ func (ctrl *V1Controller) HandleItemAttachmentCreate() http.HandlerFunc { attachmentType = attachment.TypeAttachment.String() } - id, _, err := ctrl.partialParseIdAndUser(w, r) + id, err := ctrl.partialRouteID(w, r) if err != nil { return } @@ -163,7 +163,7 @@ func (ctrl *V1Controller) HandleItemAttachmentUpdate() http.HandlerFunc { } func (ctrl *V1Controller) handleItemAttachmentsHandler(w http.ResponseWriter, r *http.Request) { - uid, user, err := ctrl.partialParseIdAndUser(w, r) + ID, err := ctrl.partialRouteID(w, r) if err != nil { return } @@ -181,7 +181,7 @@ func (ctrl *V1Controller) handleItemAttachmentsHandler(w http.ResponseWriter, r // Token Handler case http.MethodGet: - token, err := ctrl.svc.Items.AttachmentToken(ctx, uid, attachmentId) + token, err := ctrl.svc.Items.AttachmentToken(ctx, ID, attachmentId) if err != nil { switch err { case services.ErrNotFound: @@ -210,7 +210,7 @@ func (ctrl *V1Controller) handleItemAttachmentsHandler(w http.ResponseWriter, r // Delete Attachment Handler case http.MethodDelete: - err = ctrl.svc.Items.AttachmentDelete(r.Context(), user.GroupID, uid, attachmentId) + err = ctrl.svc.Items.AttachmentDelete(r.Context(), ctx.GID, ID, attachmentId) if err != nil { log.Err(err).Msg("failed to delete attachment") server.RespondServerError(w) @@ -230,7 +230,7 @@ func (ctrl *V1Controller) handleItemAttachmentsHandler(w http.ResponseWriter, r } attachment.ID = attachmentId - val, err := ctrl.svc.Items.AttachmentUpdate(ctx, uid, &attachment) + val, err := ctrl.svc.Items.AttachmentUpdate(ctx, ID, &attachment) if err != nil { log.Err(err).Msg("failed to delete attachment") server.RespondServerError(w) diff --git a/backend/app/api/v1/v1_ctrl_locations.go b/backend/app/api/v1/v1_ctrl_locations.go index 3505ff4..41546a7 100644 --- a/backend/app/api/v1/v1_ctrl_locations.go +++ b/backend/app/api/v1/v1_ctrl_locations.go @@ -70,12 +70,13 @@ func (ctrl *V1Controller) HandleLocationCreate() http.HandlerFunc { // @Security Bearer func (ctrl *V1Controller) HandleLocationDelete() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - uid, user, err := ctrl.partialParseIdAndUser(w, r) + ctx := services.NewContext(r.Context()) + ID, err := ctrl.partialRouteID(w, r) if err != nil { return } - err = ctrl.svc.Location.Delete(r.Context(), user.GroupID, uid) + err = ctrl.svc.Location.Delete(r.Context(), ctx.GID, ID) if err != nil { log.Err(err).Msg("failed to delete location") server.RespondServerError(w) @@ -95,25 +96,26 @@ func (ctrl *V1Controller) HandleLocationDelete() http.HandlerFunc { // @Security Bearer func (ctrl *V1Controller) HandleLocationGet() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - uid, user, err := ctrl.partialParseIdAndUser(w, r) + ctx := services.NewContext(r.Context()) + ID, err := ctrl.partialRouteID(w, r) if err != nil { return } - location, err := ctrl.svc.Location.GetOne(r.Context(), user.GroupID, uid) + location, err := ctrl.svc.Location.GetOne(r.Context(), ctx.GID, ID) if err != nil { if ent.IsNotFound(err) { log.Err(err). - Str("id", uid.String()). - Str("gid", user.GroupID.String()). + Str("id", ID.String()). + Str("gid", ctx.GID.String()). Msg("location not found") server.RespondError(w, http.StatusNotFound, err) return } log.Err(err). - Str("id", uid.String()). - Str("gid", user.GroupID.String()). + Str("id", ID.String()). + Str("gid", ctx.GID.String()). Msg("failed to get location") server.RespondServerError(w) return @@ -139,14 +141,15 @@ func (ctrl *V1Controller) HandleLocationUpdate() http.HandlerFunc { return } - uid, user, err := ctrl.partialParseIdAndUser(w, r) + ctx := services.NewContext(r.Context()) + ID, err := ctrl.partialRouteID(w, r) if err != nil { return } - body.ID = uid + body.ID = ID - result, err := ctrl.svc.Location.Update(r.Context(), user.GroupID, body) + result, err := ctrl.svc.Location.Update(r.Context(), ctx.GID, body) if err != nil { log.Err(err).Msg("failed to update location") server.RespondServerError(w)