Refactor BuildVerifyUserEmailAction to accept User entity instead of user ID

- Updated IUserRepository and its implementations to change the parameter of BuildVerifyUserEmailAction from Guid userId to User user.
- Modified related repository methods in Dapper and Entity Framework to utilize the User entity for email verification.
- Adjusted tests to reflect the new method signature, ensuring proper functionality and integration with the updated user verification process.
This commit is contained in:
Rui Tome
2026-01-29 17:19:37 +00:00
parent 7ed77176e2
commit 71047bee2a
6 changed files with 13 additions and 19 deletions

View File

@@ -328,7 +328,7 @@ public class InitPendingOrganizationCommand : IInitPendingOrganizationCommand
[
_organizationRepository.BuildUpdateOrganizationAction(org),
_organizationUserRepository.BuildConfirmOrganizationUserAction(orgUser),
_userRepository.BuildVerifyUserEmailAction(request.User.Id),
_userRepository.BuildVerifyUserEmailAction(request.User),
];
if (!string.IsNullOrWhiteSpace(request.CollectionName))

View File

@@ -97,9 +97,9 @@ public interface IUserRepository : IRepository<User, Guid>
/// <summary>
/// Builds an action that verifies a user's email if not already verified.
/// </summary>
/// <param name="userId">The user ID to verify</param>
/// <param name="user">The user entity to verify</param>
/// <returns>An action that can be executed within a transaction</returns>
OrganizationInitializationUpdateAction BuildVerifyUserEmailAction(Guid userId);
OrganizationInitializationUpdateAction BuildVerifyUserEmailAction(User user);
}
public delegate Task UpdateUserData(Microsoft.Data.SqlClient.SqlConnection? connection = null,

View File

@@ -549,16 +549,10 @@ public class UserRepository : Repository<User, Guid>, IUserRepository
}
}
public OrganizationInitializationUpdateAction BuildVerifyUserEmailAction(Guid userId)
public OrganizationInitializationUpdateAction BuildVerifyUserEmailAction(User user)
{
return async (SqlConnection? connection, SqlTransaction? transaction, object? context) =>
{
var user = (await connection!.QueryAsync<User>(
"[dbo].[User_ReadById]",
new { Id = userId },
commandType: CommandType.StoredProcedure,
transaction: transaction)).SingleOrDefault();
if (user != null && !user.EmailVerified)
{
user.EmailVerified = true;

View File

@@ -576,17 +576,17 @@ public class UserRepository : Repository<Core.Entities.User, User, Guid>, IUserR
}
}
public OrganizationInitializationUpdateAction BuildVerifyUserEmailAction(Guid userId)
public OrganizationInitializationUpdateAction BuildVerifyUserEmailAction(Core.Entities.User user)
{
return async (SqlConnection? _, SqlTransaction? _, object? context) =>
{
var dbContext = (DatabaseContext)context!;
var user = await dbContext.Users.FindAsync(userId);
if (user != null && !user.EmailVerified)
var efUser = await dbContext.Users.FindAsync(user.Id);
if (efUser != null && !efUser.EmailVerified)
{
user.EmailVerified = true;
user.RevisionDate = DateTime.UtcNow;
efUser.EmailVerified = true;
efUser.RevisionDate = DateTime.UtcNow;
await dbContext.SaveChangesAsync();
}

View File

@@ -615,7 +615,7 @@ public class InitPendingOrganizationCommandTests
.Returns(callInfo => new OrganizationInitializationUpdateAction((conn, trans, ctx) => Task.CompletedTask));
sutProvider.GetDependency<IUserRepository>()
.BuildVerifyUserEmailAction(user.Id)
.BuildVerifyUserEmailAction(Arg.Any<User>())
.Returns(new OrganizationInitializationUpdateAction((conn, trans, ctx) => Task.CompletedTask));
sutProvider.GetDependency<ICollectionRepository>()

View File

@@ -320,7 +320,7 @@ public class OrganizationRepositoryTests
{
organizationRepository.BuildUpdateOrganizationAction(organization),
organizationUserRepository.BuildConfirmOrganizationUserAction(organizationUser),
userRepository.BuildVerifyUserEmailAction(user.Id)
userRepository.BuildVerifyUserEmailAction(user)
};
var collection = new Collection
@@ -403,7 +403,7 @@ public class OrganizationRepositoryTests
{
organizationRepository.BuildUpdateOrganizationAction(organization),
organizationUserRepository.BuildConfirmOrganizationUserAction(organizationUser),
userRepository.BuildVerifyUserEmailAction(user.Id)
userRepository.BuildVerifyUserEmailAction(user)
};
// Execute all updates in single transaction
@@ -453,7 +453,7 @@ public class OrganizationRepositoryTests
{
organizationRepository.BuildUpdateOrganizationAction(organization),
organizationUserRepository.BuildConfirmOrganizationUserAction(organizationUser),
userRepository.BuildVerifyUserEmailAction(user.Id),
userRepository.BuildVerifyUserEmailAction(user),
// Add a failing action to trigger rollback
(Microsoft.Data.SqlClient.SqlConnection? _, Microsoft.Data.SqlClient.SqlTransaction? _, object? __) =>
{