Skip to content

Commit 7611a7b

Browse files
iammukeshmjarvis
andauthored
fix: Add missing validators to Identity module commands (#1171)
Added 13 validators: - AddUsersToGroupCommandValidator - DeleteGroupCommandValidator - RemoveUserFromGroupCommandValidator - DeleteRoleCommandValidator - AdminRevokeAllSessionsCommandValidator - AdminRevokeSessionCommandValidator - RevokeAllSessionsCommandValidator - RevokeSessionCommandValidator - AssignUserRolesCommandValidator - ConfirmEmailCommandValidator - DeleteUserCommandValidator - RegisterUserCommandValidator - ToggleUserStatusCommandValidator Co-authored-by: jarvis <jarvis@codewithmukesh.com>
1 parent 99a11e0 commit 7611a7b

13 files changed

Lines changed: 223 additions & 0 deletions

File tree

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
using FluentValidation;
2+
using FSH.Modules.Identity.Contracts.v1.Groups.AddUsersToGroup;
3+
4+
namespace FSH.Modules.Identity.Features.v1.Groups.AddUsersToGroup;
5+
6+
public sealed class AddUsersToGroupCommandValidator : AbstractValidator<AddUsersToGroupCommand>
7+
{
8+
public AddUsersToGroupCommandValidator()
9+
{
10+
RuleFor(x => x.GroupId)
11+
.NotEmpty().WithMessage("Group ID is required.");
12+
13+
RuleFor(x => x.UserIds)
14+
.NotEmpty().WithMessage("At least one user ID is required.")
15+
.Must(ids => ids.All(id => !string.IsNullOrWhiteSpace(id)))
16+
.WithMessage("User IDs cannot be empty or whitespace.");
17+
}
18+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using FluentValidation;
2+
using FSH.Modules.Identity.Contracts.v1.Groups.DeleteGroup;
3+
4+
namespace FSH.Modules.Identity.Features.v1.Groups.DeleteGroup;
5+
6+
public sealed class DeleteGroupCommandValidator : AbstractValidator<DeleteGroupCommand>
7+
{
8+
public DeleteGroupCommandValidator()
9+
{
10+
RuleFor(x => x.Id)
11+
.NotEmpty().WithMessage("Group ID is required.");
12+
}
13+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using FluentValidation;
2+
using FSH.Modules.Identity.Contracts.v1.Groups.RemoveUserFromGroup;
3+
4+
namespace FSH.Modules.Identity.Features.v1.Groups.RemoveUserFromGroup;
5+
6+
public sealed class RemoveUserFromGroupCommandValidator : AbstractValidator<RemoveUserFromGroupCommand>
7+
{
8+
public RemoveUserFromGroupCommandValidator()
9+
{
10+
RuleFor(x => x.GroupId)
11+
.NotEmpty().WithMessage("Group ID is required.");
12+
13+
RuleFor(x => x.UserId)
14+
.NotEmpty().WithMessage("User ID is required.");
15+
}
16+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using FluentValidation;
2+
using FSH.Modules.Identity.Contracts.v1.Roles.DeleteRole;
3+
4+
namespace FSH.Modules.Identity.Features.v1.Roles.DeleteRole;
5+
6+
public sealed class DeleteRoleCommandValidator : AbstractValidator<DeleteRoleCommand>
7+
{
8+
public DeleteRoleCommandValidator()
9+
{
10+
RuleFor(x => x.Id)
11+
.NotEmpty().WithMessage("Role ID is required.");
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using FluentValidation;
2+
using FSH.Modules.Identity.Contracts.v1.Sessions.AdminRevokeAllSessions;
3+
4+
namespace FSH.Modules.Identity.Features.v1.Sessions.AdminRevokeAllSessions;
5+
6+
public sealed class AdminRevokeAllSessionsCommandValidator : AbstractValidator<AdminRevokeAllSessionsCommand>
7+
{
8+
public AdminRevokeAllSessionsCommandValidator()
9+
{
10+
RuleFor(x => x.UserId)
11+
.NotEmpty().WithMessage("User ID is required.");
12+
13+
RuleFor(x => x.Reason)
14+
.MaximumLength(500).WithMessage("Reason must not exceed 500 characters.")
15+
.When(x => x.Reason is not null);
16+
}
17+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using FluentValidation;
2+
using FSH.Modules.Identity.Contracts.v1.Sessions.AdminRevokeSession;
3+
4+
namespace FSH.Modules.Identity.Features.v1.Sessions.AdminRevokeSession;
5+
6+
public sealed class AdminRevokeSessionCommandValidator : AbstractValidator<AdminRevokeSessionCommand>
7+
{
8+
public AdminRevokeSessionCommandValidator()
9+
{
10+
RuleFor(x => x.UserId)
11+
.NotEmpty().WithMessage("User ID is required.");
12+
13+
RuleFor(x => x.SessionId)
14+
.NotEmpty().WithMessage("Session ID is required.");
15+
16+
RuleFor(x => x.Reason)
17+
.MaximumLength(500).WithMessage("Reason must not exceed 500 characters.")
18+
.When(x => x.Reason is not null);
19+
}
20+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using FluentValidation;
2+
using FSH.Modules.Identity.Contracts.v1.Sessions.RevokeAllSessions;
3+
4+
namespace FSH.Modules.Identity.Features.v1.Sessions.RevokeAllSessions;
5+
6+
public sealed class RevokeAllSessionsCommandValidator : AbstractValidator<RevokeAllSessionsCommand>
7+
{
8+
public RevokeAllSessionsCommandValidator()
9+
{
10+
// ExceptSessionId is optional - no validation required
11+
// This validator exists for consistency and potential future validation rules
12+
}
13+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using FluentValidation;
2+
using FSH.Modules.Identity.Contracts.v1.Sessions.RevokeSession;
3+
4+
namespace FSH.Modules.Identity.Features.v1.Sessions.RevokeSession;
5+
6+
public sealed class RevokeSessionCommandValidator : AbstractValidator<RevokeSessionCommand>
7+
{
8+
public RevokeSessionCommandValidator()
9+
{
10+
RuleFor(x => x.SessionId)
11+
.NotEmpty().WithMessage("Session ID is required.");
12+
}
13+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using FluentValidation;
2+
using FSH.Modules.Identity.Contracts.v1.Users.AssignUserRoles;
3+
4+
namespace FSH.Modules.Identity.Features.v1.Users.AssignUserRoles;
5+
6+
public sealed class AssignUserRolesCommandValidator : AbstractValidator<AssignUserRolesCommand>
7+
{
8+
public AssignUserRolesCommandValidator()
9+
{
10+
RuleFor(x => x.UserId)
11+
.NotEmpty().WithMessage("User ID is required.");
12+
13+
RuleFor(x => x.UserRoles)
14+
.NotNull().WithMessage("User roles list is required.");
15+
}
16+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using FluentValidation;
2+
using FSH.Modules.Identity.Contracts.v1.Users.ConfirmEmail;
3+
4+
namespace FSH.Modules.Identity.Features.v1.Users.ConfirmEmail;
5+
6+
public sealed class ConfirmEmailCommandValidator : AbstractValidator<ConfirmEmailCommand>
7+
{
8+
public ConfirmEmailCommandValidator()
9+
{
10+
RuleFor(x => x.UserId)
11+
.NotEmpty().WithMessage("User ID is required.");
12+
13+
RuleFor(x => x.Code)
14+
.NotEmpty().WithMessage("Confirmation code is required.");
15+
16+
RuleFor(x => x.Tenant)
17+
.NotEmpty().WithMessage("Tenant is required.");
18+
}
19+
}

0 commit comments

Comments
 (0)