satellite/{payment,console} add legal hold user status

This change introduces a new user status, LegalHold to be used to pause
an account while it is under legal review. It also modifies the
condition whether to generate invoices for a user to apply to this new
status.

Issue: storj/storj-private#492

Change-Id: Idc9a6166cc96178a95e45cf7c0f2e982631ca021
This commit is contained in:
Wilfred Asomani 2023-11-09 10:16:39 +00:00 committed by Storj Robot
parent 76594466ef
commit 98234e76b7
3 changed files with 18 additions and 6 deletions

View File

@ -168,6 +168,8 @@ const (
Deleted UserStatus = 2
// PendingDeletion is a user status that he receives before deleting account.
PendingDeletion UserStatus = 3
// LegalHold is a user status that he receives for legal reasons.
LegalHold UserStatus = 4
)
// User is a database object that describes User entity.

View File

@ -1294,13 +1294,13 @@ func (service *Service) payInvoicesWithTokenBalance(ctx context.Context, cusID s
return errGrp.Err()
}
// isUserInactive checks whether a user has a status of console.Deleted or console.PendingDeletion.
// isUserInactive checks whether a user does not have a status of console.Active.
func (service *Service) isUserInactive(ctx context.Context, userID uuid.UUID) (bool, error) {
user, err := service.usersDB.Get(ctx, userID)
if err != nil {
return false, err
}
return user.Status == console.Deleted || user.Status == console.PendingDeletion, nil
return user.Status != console.Active, nil
}
// projectUsagePrice represents pricing for project usage.

View File

@ -357,6 +357,7 @@ func TestService_BalanceInvoiceItems(t *testing.T) {
// Deactivate the users and give them balances
statusPending := console.PendingDeletion
statusDeleted := console.Deleted
statusLegalHold := console.LegalHold
for i, user := range users {
cusID, err = satellite.DB.StripeCoinPayments().Customers().GetCustomerID(ctx, user.ID)
require.NoError(t, err)
@ -371,8 +372,10 @@ func TestService_BalanceInvoiceItems(t *testing.T) {
var status *console.UserStatus
if i%2 == 0 {
status = &statusDeleted
} else {
} else if i%3 == 0 {
status = &statusPending
} else {
status = &statusLegalHold
}
err := satellite.DB.Console().Users().Update(ctx, user.ID, console.UpdateUserRequest{
Status: status,
@ -409,7 +412,7 @@ func TestService_InvoiceElementsProcessing(t *testing.T) {
numberOfProjects := 19
numberOfInactiveUsers := 5
pendingDeletionStatus := console.PendingDeletion
status := console.PendingDeletion
// user to be deactivated later
var activeUser console.User
// generate test data, each user has one project and some credits
@ -431,8 +434,15 @@ func TestService_InvoiceElementsProcessing(t *testing.T) {
activeUser = *user
continue
}
if i%2 == 0 {
status = console.Deleted
} else if i%3 == 0 {
status = console.PendingDeletion
} else {
status = console.LegalHold
}
err = satellite.DB.Console().Users().Update(ctx, user.ID, console.UpdateUserRequest{
Status: &pendingDeletionStatus,
Status: &status,
})
require.NoError(t, err)
}
@ -453,7 +463,7 @@ func TestService_InvoiceElementsProcessing(t *testing.T) {
// deactivate user
err = satellite.DB.Console().Users().Update(ctx, activeUser.ID, console.UpdateUserRequest{
Status: &pendingDeletionStatus,
Status: &status,
})
require.NoError(t, err)