Skip to content

Commit

Permalink
Merge pull request #11779 from transcom/B-18192-moving-expense-api-de…
Browse files Browse the repository at this point in the history
…lete

B-18192 move query logic from handler to service object
  • Loading branch information
deandreJones authored Feb 8, 2024
2 parents c301b49 + 3b307ce commit b843800
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 43 deletions.
35 changes: 2 additions & 33 deletions pkg/handlers/internalapi/moving_expense.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,9 @@ import (

"github.com/transcom/mymove/pkg/appcontext"
"github.com/transcom/mymove/pkg/apperror"
"github.com/transcom/mymove/pkg/db/utilities"
movingexpenseops "github.com/transcom/mymove/pkg/gen/internalapi/internaloperations/ppm"
"github.com/transcom/mymove/pkg/handlers"
"github.com/transcom/mymove/pkg/handlers/internalapi/internal/payloads"
"github.com/transcom/mymove/pkg/models"
"github.com/transcom/mymove/pkg/services"
)

Expand Down Expand Up @@ -186,39 +184,10 @@ func (h DeleteMovingExpenseHandler) Handle(params movingexpenseops.DeleteMovingE

// Make sure the service member is not modifying another service member's PPM
ppmID := uuid.FromStringOrNil(params.PpmShipmentID.String())
var ppmShipment models.PPMShipment
err := appCtx.DB().Scope(utilities.ExcludeDeletedScope()).
EagerPreload(
"Shipment.MoveTaskOrder.Orders",
"MovingExpenses",
).
Find(&ppmShipment, ppmID)
if err != nil {
if err == sql.ErrNoRows {
return movingexpenseops.NewDeleteMovingExpenseNotFound(), err
}
return movingexpenseops.NewDeleteMovingExpenseInternalServerError(), err
}
if ppmShipment.Shipment.MoveTaskOrder.Orders.ServiceMemberID != appCtx.Session().ServiceMemberID {
wrongServiceMemberIDErr := apperror.NewSessionError("Attempted delete by wrong service member")
appCtx.Logger().Error("internalapi.DeleteMovingExpenseHandler", zap.Error(wrongServiceMemberIDErr))
return movingexpenseops.NewDeleteMovingExpenseForbidden(), wrongServiceMemberIDErr
}

movingExpenseID := uuid.FromStringOrNil(params.MovingExpenseID.String())
found := false
for _, lineItem := range ppmShipment.MovingExpenses {
if lineItem.ID == movingExpenseID {
found = true
break
}
}
if !found {
mismatchedPPMShipmentAndMovingExpenseIDErr := apperror.NewSessionError("Moving expense does not exist on ppm shipment")
appCtx.Logger().Error("internalapi.DeleteMovingExpenseHandler", zap.Error(mismatchedPPMShipmentAndMovingExpenseIDErr))
return movingexpenseops.NewDeleteMovingExpenseNotFound(), mismatchedPPMShipmentAndMovingExpenseIDErr
}
err = h.movingExpenseDeleter.DeleteMovingExpense(appCtx, movingExpenseID)

err := h.movingExpenseDeleter.DeleteMovingExpense(appCtx, ppmID, movingExpenseID)
if err != nil {
appCtx.Logger().Error("internalapi.DeleteMovingExpenseHandler", zap.Error(err))

Expand Down
1 change: 1 addition & 0 deletions pkg/handlers/internalapi/moving_expense_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -425,6 +425,7 @@ func (suite *HandlerSuite) TestDeleteMovingExpenseHandler() {
mockDeleter.On("DeleteMovingExpense",
mock.AnythingOfType("*appcontext.appContext"),
mock.AnythingOfType("uuid.UUID"),
mock.AnythingOfType("uuid.UUID"),
).Return(err)

// Use createS3HandlerConfig for the HandlerConfig because we are required to upload a doc
Expand Down
10 changes: 5 additions & 5 deletions pkg/services/mocks/MovingExpenseDeleter.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pkg/services/moving_expense.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,5 @@ type MovingExpenseUpdater interface {
//
//go:generate mockery --name MovingExpenseDeleter
type MovingExpenseDeleter interface {
DeleteMovingExpense(appCtx appcontext.AppContext, movingExpenseID uuid.UUID) error
DeleteMovingExpense(appCtx appcontext.AppContext, ppmID uuid.UUID, movingExpenseID uuid.UUID) error
}
40 changes: 39 additions & 1 deletion pkg/services/moving_expense/moving_expense_deleter.go
Original file line number Diff line number Diff line change
@@ -1,10 +1,15 @@
package movingexpense

import (
"database/sql"

"github.com/gofrs/uuid"
"go.uber.org/zap"

"github.com/transcom/mymove/pkg/appcontext"
"github.com/transcom/mymove/pkg/apperror"
"github.com/transcom/mymove/pkg/db/utilities"
"github.com/transcom/mymove/pkg/models"
"github.com/transcom/mymove/pkg/services"
)

Expand All @@ -15,7 +20,40 @@ func NewMovingExpenseDeleter() services.MovingExpenseDeleter {
return &movingExpenseDeleter{}
}

func (d *movingExpenseDeleter) DeleteMovingExpense(appCtx appcontext.AppContext, movingExpenseID uuid.UUID) error {
func (d *movingExpenseDeleter) DeleteMovingExpense(appCtx appcontext.AppContext, ppmID uuid.UUID, movingExpenseID uuid.UUID) error {
var ppmShipment models.PPMShipment
err := appCtx.DB().Scope(utilities.ExcludeDeletedScope()).
EagerPreload(
"Shipment.MoveTaskOrder.Orders",
"MovingExpenses",
).
Find(&ppmShipment, ppmID)
if err != nil {
if err == sql.ErrNoRows {
return apperror.NewNotFoundError(movingExpenseID, "while looking for MovingExpense")
}
return apperror.NewQueryError("MovingExpense fetch original", err, "")
}

if ppmShipment.Shipment.MoveTaskOrder.Orders.ServiceMemberID != appCtx.Session().ServiceMemberID {
wrongServiceMemberIDErr := apperror.NewForbiddenError("Attempted delete by wrong service member")
appCtx.Logger().Error("internalapi.DeleteMovingExpenseHandler", zap.Error(wrongServiceMemberIDErr))
return wrongServiceMemberIDErr
}

found := false
for _, lineItem := range ppmShipment.MovingExpenses {
if lineItem.ID == movingExpenseID {
found = true
break
}
}
if !found {
mismatchedPPMShipmentAndMovingExpenseIDErr := apperror.NewNotFoundError(movingExpenseID, "Moving expense does not exist on ppm shipment")
appCtx.Logger().Error("internalapi.DeleteMovingExpenseHandler", zap.Error(mismatchedPPMShipmentAndMovingExpenseIDErr))
return mismatchedPPMShipmentAndMovingExpenseIDErr
}

movingExpense, err := FetchMovingExpenseByID(appCtx, movingExpenseID)
if err != nil {
return err
Expand Down
8 changes: 5 additions & 3 deletions pkg/services/moving_expense/moving_expense_deleter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,9 +65,10 @@ func (suite *MovingExpenseSuite) TestDeleteMovingExpense() {
}
suite.Run("Returns an error if the original doesn't exist", func() {
notFoundMovingExpenseID := uuid.Must(uuid.NewV4())
ppmID := uuid.Must(uuid.NewV4())
deleter := NewMovingExpenseDeleter()

err := deleter.DeleteMovingExpense(suite.AppContextWithSessionForTest(&auth.Session{}), notFoundMovingExpenseID)
err := deleter.DeleteMovingExpense(suite.AppContextWithSessionForTest(&auth.Session{}), ppmID, notFoundMovingExpenseID)

if suite.Error(err) {
suite.IsType(apperror.NotFoundError{}, err)
Expand All @@ -81,11 +82,12 @@ func (suite *MovingExpenseSuite) TestDeleteMovingExpense() {

suite.Run("Successfully deletes as a customer's moving expense", func() {
originalMovingExpense := setupForTest(nil, true)

deleter := NewMovingExpenseDeleter()

suite.Nil(originalMovingExpense.DeletedAt)
err := deleter.DeleteMovingExpense(suite.AppContextWithSessionForTest(&auth.Session{}), originalMovingExpense.ID)
err := deleter.DeleteMovingExpense(suite.AppContextWithSessionForTest(&auth.Session{
ServiceMemberID: originalMovingExpense.Document.ServiceMemberID,
}), originalMovingExpense.PPMShipmentID, originalMovingExpense.ID)
suite.NoError(err)

var movingExpenseInDB models.MovingExpense
Expand Down

0 comments on commit b843800

Please sign in to comment.