diff --git a/backend/app/api/v1/v1_ctrl_locations.go b/backend/app/api/v1/v1_ctrl_locations.go index 41546a7..b351233 100644 --- a/backend/app/api/v1/v1_ctrl_locations.go +++ b/backend/app/api/v1/v1_ctrl_locations.go @@ -69,21 +69,8 @@ func (ctrl *V1Controller) HandleLocationCreate() http.HandlerFunc { // @Router /v1/locations/{id} [DELETE] // @Security Bearer func (ctrl *V1Controller) HandleLocationDelete() http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - ctx := services.NewContext(r.Context()) - ID, err := ctrl.partialRouteID(w, r) - if err != nil { - return - } + return ctrl.handleLocationGeneral() - err = ctrl.svc.Location.Delete(r.Context(), ctx.GID, ID) - if err != nil { - log.Err(err).Msg("failed to delete location") - server.RespondServerError(w) - return - } - server.Respond(w, http.StatusNoContent, nil) - } } // HandleLocationGet godocs @@ -95,33 +82,7 @@ func (ctrl *V1Controller) HandleLocationDelete() http.HandlerFunc { // @Router /v1/locations/{id} [GET] // @Security Bearer func (ctrl *V1Controller) HandleLocationGet() http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - ctx := services.NewContext(r.Context()) - ID, err := ctrl.partialRouteID(w, r) - if err != nil { - return - } - - location, err := ctrl.svc.Location.GetOne(r.Context(), ctx.GID, ID) - if err != nil { - if ent.IsNotFound(err) { - log.Err(err). - 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", ID.String()). - Str("gid", ctx.GID.String()). - Msg("failed to get location") - server.RespondServerError(w) - return - } - server.Respond(w, http.StatusOK, location) - } + return ctrl.handleLocationGeneral() } // HandleLocationUpdate godocs @@ -133,28 +94,61 @@ func (ctrl *V1Controller) HandleLocationGet() http.HandlerFunc { // @Router /v1/locations/{id} [PUT] // @Security Bearer func (ctrl *V1Controller) HandleLocationUpdate() http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - body := repo.LocationUpdate{} - if err := server.Decode(r, &body); err != nil { - log.Err(err).Msg("failed to decode location update data") - server.RespondError(w, http.StatusInternalServerError, err) - return - } + return ctrl.handleLocationGeneral() +} +func (ctrl *V1Controller) handleLocationGeneral() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { ctx := services.NewContext(r.Context()) ID, err := ctrl.partialRouteID(w, r) if err != nil { return } - body.ID = ID + switch r.Method { + case http.MethodGet: + location, err := ctrl.svc.Location.GetOne(r.Context(), ctx.GID, ID) + if err != nil { + l := log.Err(err). + Str("ID", ID.String()). + Str("GID", ctx.GID.String()) - 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) - return + if ent.IsNotFound(err) { + l.Msg("location not found") + server.RespondError(w, http.StatusNotFound, err) + return + } + + l.Msg("failed to get location") + server.RespondServerError(w) + return + } + server.Respond(w, http.StatusOK, location) + case http.MethodPut: + body := repo.LocationUpdate{} + if err := server.Decode(r, &body); err != nil { + log.Err(err).Msg("failed to decode location update data") + server.RespondError(w, http.StatusInternalServerError, err) + return + } + + body.ID = ID + + 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) + return + } + server.Respond(w, http.StatusOK, result) + case http.MethodDelete: + err = ctrl.svc.Location.Delete(r.Context(), ctx.GID, ID) + if err != nil { + log.Err(err).Msg("failed to delete location") + server.RespondServerError(w) + return + } + server.Respond(w, http.StatusNoContent, nil) } - server.Respond(w, http.StatusOK, result) } }