From 2ca41cb4639a3f0363866fccf4cdad8b1b4293d1 Mon Sep 17 00:00:00 2001 From: Tevin Adams Date: Mon, 24 Feb 2025 00:32:41 +0000 Subject: [PATCH 1/5] Updated_at when locking or unlocking move --- pkg/services/lock_move/move_locker.go | 5 +++++ pkg/services/lock_move/move_locker_test.go | 21 ++++++++++++++++++ pkg/services/lock_move/move_unlocker.go | 5 +++++ pkg/services/lock_move/move_unlocker_test.go | 23 ++++++++++++++++++++ 4 files changed, 54 insertions(+) diff --git a/pkg/services/lock_move/move_locker.go b/pkg/services/lock_move/move_locker.go index dcef506c978..ad0233558f6 100644 --- a/pkg/services/lock_move/move_locker.go +++ b/pkg/services/lock_move/move_locker.go @@ -59,6 +59,7 @@ func (m moveLocker) LockMove(appCtx appcontext.AppContext, move *models.Move, of now := time.Now() expirationTime := now.Add(30 * time.Minute) move.LockExpiresAt = &expirationTime + moveBeforeUpdate := move transactionError := appCtx.NewTransaction(func(txnAppCtx appcontext.AppContext) error { verrs, saveErr := appCtx.DB().ValidateAndSave(move) @@ -71,6 +72,10 @@ func (m moveLocker) LockMove(appCtx appcontext.AppContext, move *models.Move, of return err } + if err := appCtx.DB().RawQuery("UPDATE moves SET updated_at=? WHERE id=?", moveBeforeUpdate.UpdatedAt, move.ID).Exec(); err != nil { + return err + } + return nil }) diff --git a/pkg/services/lock_move/move_locker_test.go b/pkg/services/lock_move/move_locker_test.go index d9de371f10c..76105e97e21 100644 --- a/pkg/services/lock_move/move_locker_test.go +++ b/pkg/services/lock_move/move_locker_test.go @@ -35,4 +35,25 @@ func (suite *MoveLockerServiceSuite) TestLockMove() { suite.Equal(move.LockedByOfficeUser.TransportationOffice.Name, tooUser.TransportationOffice.Name) suite.Equal(move.LockExpiresAt.Truncate(time.Minute), expirationTime) }) + + suite.Run("locking a move doesn't change the moves updated_at value", func() { + tooUser := factory.BuildOfficeUserWithRoles(suite.DB(), nil, []roles.RoleType{roles.RoleTypeTOO}) + appCtx := suite.AppContextWithSessionForTest(&auth.Session{ + ApplicationName: auth.OfficeApp, + Roles: tooUser.User.Roles, + OfficeUserID: tooUser.ID, + IDToken: "fake_token", + AccessToken: "fakeAccessToken", + }) + + move := factory.BuildMove(suite.DB(), nil, nil) + + actualMove, err := moveLocker.LockMove(appCtx, &move, tooUser.ID) + suite.FatalNoError(err) + + suite.Equal(move.ID, actualMove.ID) + suite.Equal(move.LockedByOfficeUserID, &tooUser.ID) + suite.Equal(move.LockedByOfficeUser.TransportationOffice.Name, tooUser.TransportationOffice.Name) + suite.Equal(actualMove.UpdatedAt, move.UpdatedAt) + }) } diff --git a/pkg/services/lock_move/move_unlocker.go b/pkg/services/lock_move/move_unlocker.go index 260ee8eb0b5..dfc1ffd0619 100644 --- a/pkg/services/lock_move/move_unlocker.go +++ b/pkg/services/lock_move/move_unlocker.go @@ -41,6 +41,7 @@ func (m moveUnlocker) UnlockMove(appCtx appcontext.AppContext, move *models.Move if move.LockedByOfficeUser != nil { move.LockedByOfficeUser = nil } + moveBeforeUpdate := move transactionError := appCtx.NewTransaction(func(txnAppCtx appcontext.AppContext) error { verrs, saveErr := appCtx.DB().ValidateAndSave(move) @@ -53,6 +54,10 @@ func (m moveUnlocker) UnlockMove(appCtx appcontext.AppContext, move *models.Move return saveErr } + if err := appCtx.DB().RawQuery("UPDATE moves SET updated_at=? WHERE id=?", moveBeforeUpdate.UpdatedAt, move.ID).Exec(); err != nil { + return err + } + return nil }) diff --git a/pkg/services/lock_move/move_unlocker_test.go b/pkg/services/lock_move/move_unlocker_test.go index 3a6c5df4987..b93492f70ff 100644 --- a/pkg/services/lock_move/move_unlocker_test.go +++ b/pkg/services/lock_move/move_unlocker_test.go @@ -104,4 +104,27 @@ func (suite *MoveLockerServiceSuite) TestCheckForLockedMovesAndUnlock() { suite.Nil(moveThreeInDB.LockedByOfficeUser) suite.Nil(moveThreeInDB.LockExpiresAt) }) + + suite.Run("successfully unlock move without changing updated_at", func() { + tooUser := factory.BuildOfficeUserWithRoles(suite.DB(), nil, []roles.RoleType{roles.RoleTypeTOO}) + appCtx := suite.AppContextWithSessionForTest(&auth.Session{ + ApplicationName: auth.OfficeApp, + Roles: tooUser.User.Roles, + OfficeUserID: tooUser.ID, + IDToken: "fake_token", + AccessToken: "fakeAccessToken", + }) + + move := factory.BuildMove(suite.DB(), nil, nil) + + lockedMove, err := moveLocker.LockMove(appCtx, &move, tooUser.ID) + suite.FatalNoError(err) + suite.Equal(move.ID, lockedMove.ID) + suite.Equal(lockedMove.LockedByOfficeUserID, &tooUser.ID) + suite.Equal(lockedMove.UpdatedAt, move.UpdatedAt) + + unlockedMove, err := moveUnlocker.UnlockMove(appCtx, lockedMove, tooUser.ID) + suite.FatalNoError(err) + suite.Equal(unlockedMove.UpdatedAt, move.UpdatedAt) + }) } From 145d30b41bc506c8da9efc9bd91e6946d9497a11 Mon Sep 17 00:00:00 2001 From: Tevin Adams Date: Mon, 24 Feb 2025 00:40:30 +0000 Subject: [PATCH 2/5] Adding comments --- pkg/services/lock_move/move_locker.go | 4 ++++ pkg/services/lock_move/move_unlocker.go | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/pkg/services/lock_move/move_locker.go b/pkg/services/lock_move/move_locker.go index ad0233558f6..b5a0f9dd81e 100644 --- a/pkg/services/lock_move/move_locker.go +++ b/pkg/services/lock_move/move_locker.go @@ -59,6 +59,8 @@ func (m moveLocker) LockMove(appCtx appcontext.AppContext, move *models.Move, of now := time.Now() expirationTime := now.Add(30 * time.Minute) move.LockExpiresAt = &expirationTime + + // Store move before update moveBeforeUpdate := move transactionError := appCtx.NewTransaction(func(txnAppCtx appcontext.AppContext) error { @@ -72,6 +74,8 @@ func (m moveLocker) LockMove(appCtx appcontext.AppContext, move *models.Move, of return err } + // Pop automatically updates updated_at. Even when passing in updated_at to the excluded columns for ValidateAndSave. + // Storing the move before update then setting the updated_at value back to what it was before go buffalo implementation. if err := appCtx.DB().RawQuery("UPDATE moves SET updated_at=? WHERE id=?", moveBeforeUpdate.UpdatedAt, move.ID).Exec(); err != nil { return err } diff --git a/pkg/services/lock_move/move_unlocker.go b/pkg/services/lock_move/move_unlocker.go index dfc1ffd0619..0acc15b06be 100644 --- a/pkg/services/lock_move/move_unlocker.go +++ b/pkg/services/lock_move/move_unlocker.go @@ -41,6 +41,8 @@ func (m moveUnlocker) UnlockMove(appCtx appcontext.AppContext, move *models.Move if move.LockedByOfficeUser != nil { move.LockedByOfficeUser = nil } + + // Store move before update moveBeforeUpdate := move transactionError := appCtx.NewTransaction(func(txnAppCtx appcontext.AppContext) error { @@ -54,6 +56,8 @@ func (m moveUnlocker) UnlockMove(appCtx appcontext.AppContext, move *models.Move return saveErr } + // Pop automatically updates updated_at. Even when passing in updated_at to the excluded columns for ValidateAndSave. + // Storing the move before update then setting the updated_at value back to what it was before go buffalo implementation. if err := appCtx.DB().RawQuery("UPDATE moves SET updated_at=? WHERE id=?", moveBeforeUpdate.UpdatedAt, move.ID).Exec(); err != nil { return err } From 3cea1b8f02b466088cd74bc250c91241f52772fb Mon Sep 17 00:00:00 2001 From: Tevin Adams Date: Mon, 24 Feb 2025 20:16:43 +0000 Subject: [PATCH 3/5] Storing move --- pkg/services/lock_move/move_locker.go | 2 +- pkg/services/lock_move/move_unlocker.go | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pkg/services/lock_move/move_locker.go b/pkg/services/lock_move/move_locker.go index b5a0f9dd81e..2a7aacc0ccd 100644 --- a/pkg/services/lock_move/move_locker.go +++ b/pkg/services/lock_move/move_locker.go @@ -61,7 +61,7 @@ func (m moveLocker) LockMove(appCtx appcontext.AppContext, move *models.Move, of move.LockExpiresAt = &expirationTime // Store move before update - moveBeforeUpdate := move + var moveBeforeUpdate = *move transactionError := appCtx.NewTransaction(func(txnAppCtx appcontext.AppContext) error { verrs, saveErr := appCtx.DB().ValidateAndSave(move) diff --git a/pkg/services/lock_move/move_unlocker.go b/pkg/services/lock_move/move_unlocker.go index 0acc15b06be..fafeabcbf11 100644 --- a/pkg/services/lock_move/move_unlocker.go +++ b/pkg/services/lock_move/move_unlocker.go @@ -43,7 +43,7 @@ func (m moveUnlocker) UnlockMove(appCtx appcontext.AppContext, move *models.Move } // Store move before update - moveBeforeUpdate := move + var moveBeforeUpdate = *move transactionError := appCtx.NewTransaction(func(txnAppCtx appcontext.AppContext) error { verrs, saveErr := appCtx.DB().ValidateAndSave(move) From 3d4cf8a9fa5576fe0d11f2c9ecfc3fddcb6e129b Mon Sep 17 00:00:00 2001 From: Tevin Adams Date: Wed, 26 Feb 2025 17:51:39 +0000 Subject: [PATCH 4/5] Update approach change --- pkg/services/lock_move/move_locker.go | 18 +++++------------- pkg/services/lock_move/move_unlocker.go | 14 +------------- 2 files changed, 6 insertions(+), 26 deletions(-) diff --git a/pkg/services/lock_move/move_locker.go b/pkg/services/lock_move/move_locker.go index 2a7aacc0ccd..f07a19a7627 100644 --- a/pkg/services/lock_move/move_locker.go +++ b/pkg/services/lock_move/move_locker.go @@ -42,6 +42,10 @@ func (m moveLocker) LockMove(appCtx appcontext.AppContext, move *models.Move, of EagerPreload("Address", "Address.Country"). First(&transportationOffice) + if err != nil { + return nil, err + } + if move.LockedByOfficeUserID != models.UUIDPointer(officeUserID) { move.LockedByOfficeUserID = models.UUIDPointer(officeUserID) } @@ -64,19 +68,7 @@ func (m moveLocker) LockMove(appCtx appcontext.AppContext, move *models.Move, of var moveBeforeUpdate = *move transactionError := appCtx.NewTransaction(func(txnAppCtx appcontext.AppContext) error { - verrs, saveErr := appCtx.DB().ValidateAndSave(move) - if verrs != nil && verrs.HasAny() { - invalidInputError := apperror.NewInvalidInputError(move.ID, nil, verrs, "Could not validate move while locking it.") - - return invalidInputError - } - if saveErr != nil { - return err - } - - // Pop automatically updates updated_at. Even when passing in updated_at to the excluded columns for ValidateAndSave. - // Storing the move before update then setting the updated_at value back to what it was before go buffalo implementation. - if err := appCtx.DB().RawQuery("UPDATE moves SET updated_at=? WHERE id=?", moveBeforeUpdate.UpdatedAt, move.ID).Exec(); err != nil { + if err := appCtx.DB().RawQuery("UPDATE moves SET locked_by=?, lock_expires_at=?, updated_at=? WHERE id=?", officeUserID, expirationTime, moveBeforeUpdate.UpdatedAt, move.ID).Exec(); err != nil { return err } diff --git a/pkg/services/lock_move/move_unlocker.go b/pkg/services/lock_move/move_unlocker.go index fafeabcbf11..bdaf5fee4d7 100644 --- a/pkg/services/lock_move/move_unlocker.go +++ b/pkg/services/lock_move/move_unlocker.go @@ -46,19 +46,7 @@ func (m moveUnlocker) UnlockMove(appCtx appcontext.AppContext, move *models.Move var moveBeforeUpdate = *move transactionError := appCtx.NewTransaction(func(txnAppCtx appcontext.AppContext) error { - verrs, saveErr := appCtx.DB().ValidateAndSave(move) - if verrs != nil && verrs.HasAny() { - invalidInputError := apperror.NewInvalidInputError(move.ID, nil, verrs, "Could not validate move while unlocking it.") - - return invalidInputError - } - if saveErr != nil { - return saveErr - } - - // Pop automatically updates updated_at. Even when passing in updated_at to the excluded columns for ValidateAndSave. - // Storing the move before update then setting the updated_at value back to what it was before go buffalo implementation. - if err := appCtx.DB().RawQuery("UPDATE moves SET updated_at=? WHERE id=?", moveBeforeUpdate.UpdatedAt, move.ID).Exec(); err != nil { + if err := appCtx.DB().RawQuery("UPDATE moves SET locked_by=?, lock_expires_at=?, updated_at=? WHERE id=?", nil, nil, moveBeforeUpdate.UpdatedAt, move.ID).Exec(); err != nil { return err } From 7dea84d932eab130c75bd940fd74072d4798ccb2 Mon Sep 17 00:00:00 2001 From: josiahzimmerman-caci Date: Fri, 7 Mar 2025 20:29:08 +0000 Subject: [PATCH 5/5] com needs default region changed to region --- .gitlab-ci.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a0f9ccd6822..77445653b40 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -116,7 +116,8 @@ stages: - unset AWS_SECRET_ACCESS_KEY - unset AWS_ACCOUNT_ID - unset AWS_DEFAULT_REGION - - export AWS_DEFAULT_REGION=$COM_REGION + - unset AWS_REGION + - export AWS_REGION=$COM_REGION - export AWS_ACCOUNT_ID=$DEV_ACCOUNT_ID - export AWS_ACCESS_KEY_ID=$DEV_ACCESS_KEY_ID - export AWS_SECRET_ACCESS_KEY=$DEV_SECRET_KEY