initial commit

This commit is contained in:
2026-07-21 15:03:40 +07:00
commit 5c20bb8a9e
2752 changed files with 864209 additions and 0 deletions
@@ -0,0 +1,55 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class ConfirmEmailResult
{
public string? Email { get; init; }
}
public class ConfirmEmailRequest : IRequest<ConfirmEmailResult>
{
public required string Email { get; init; }
public required string Code { get; init; }
}
public class ConfirmEmailValidator : AbstractValidator<ConfirmEmailRequest>
{
public ConfirmEmailValidator()
{
RuleFor(x => x.Email)
.NotEmpty()
.EmailAddress();
RuleFor(x => x.Code)
.NotEmpty();
}
}
public class ConfirmEmailHandler : IRequestHandler<ConfirmEmailRequest, ConfirmEmailResult>
{
private readonly ISecurityService _securityService;
public ConfirmEmailHandler(
ISecurityService securityService
)
{
_securityService = securityService;
}
public async Task<ConfirmEmailResult> Handle(ConfirmEmailRequest request, CancellationToken cancellationToken)
{
var result = await _securityService.ConfirmEmailAsync(
request.Email,
request.Code,
cancellationToken
);
return new ConfirmEmailResult { Email = result };
}
}
@@ -0,0 +1,67 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class CreateUserResult
{
public CreateUserResultDto? Data { get; set; }
}
public class CreateUserRequest : IRequest<CreateUserResult>
{
public string? Email { get; init; }
public string? Password { get; init; }
public string? ConfirmPassword { get; init; }
public string? FirstName { get; init; }
public string? LastName { get; init; }
public bool? EmailConfirmed { get; init; }
public bool? IsBlocked { get; init; }
public bool? IsDeleted { get; init; }
public string? CreatedById { get; init; }
}
public class CreateUserValidator : AbstractValidator<CreateUserRequest>
{
public CreateUserValidator()
{
RuleFor(x => x.Email).NotEmpty();
RuleFor(x => x.Password).NotEmpty();
RuleFor(x => x.ConfirmPassword).NotEmpty();
RuleFor(x => x.FirstName).NotEmpty();
RuleFor(x => x.LastName).NotEmpty();
}
}
public class CreateUserHandler : IRequestHandler<CreateUserRequest, CreateUserResult>
{
private readonly ISecurityService _securityService;
public CreateUserHandler(ISecurityService securityService)
{
_securityService = securityService;
}
public async Task<CreateUserResult> Handle(CreateUserRequest request, CancellationToken cancellationToken)
{
var result = await _securityService.CreateUserAsync(
request.Email ?? "",
request.Password ?? "",
request.ConfirmPassword ?? "",
request.FirstName ?? "",
request.LastName ?? "",
request.EmailConfirmed ?? true,
request.IsBlocked ?? false,
request.IsDeleted ?? false,
request.CreatedById ?? "",
cancellationToken
);
return new CreateUserResult
{
Data = result
};
}
}
@@ -0,0 +1,51 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class DeleteUserResult
{
public DeleteUserResultDto? Data { get; set; }
}
public class DeleteUserRequest : IRequest<DeleteUserResult>
{
public string? UserId { get; init; }
public string? DeletedById { get; init; }
}
public class DeleteUserValidator : AbstractValidator<DeleteUserRequest>
{
public DeleteUserValidator()
{
RuleFor(x => x.UserId).NotEmpty();
}
}
public class DeleteUserHandler : IRequestHandler<DeleteUserRequest, DeleteUserResult>
{
private readonly ISecurityService _securityService;
public DeleteUserHandler(ISecurityService securityService)
{
_securityService = securityService;
}
public async Task<DeleteUserResult> Handle(DeleteUserRequest request, CancellationToken cancellationToken)
{
var result = await _securityService.DeleteUserAsync(
request.UserId ?? "",
request.DeletedById ?? "",
cancellationToken
);
return new DeleteUserResult
{
Data = result
};
}
}
@@ -0,0 +1,52 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class ForgotPasswordResult
{
public string? Data { get; init; }
}
public class ForgotPasswordRequest : IRequest<ForgotPasswordResult>
{
public required string Email { get; init; }
}
public class ForgotPasswordValidator : AbstractValidator<ForgotPasswordRequest>
{
public ForgotPasswordValidator()
{
RuleFor(x => x.Email)
.NotEmpty()
.EmailAddress();
}
}
public class ForgotPasswordHandler : IRequestHandler<ForgotPasswordRequest, ForgotPasswordResult>
{
private readonly ISecurityService _securityService;
public ForgotPasswordHandler(
ISecurityService securityService
)
{
_securityService = securityService;
}
public async Task<ForgotPasswordResult> Handle(ForgotPasswordRequest request, CancellationToken cancellationToken)
{
var result = await _securityService.ForgotPasswordAsync(
request.Email,
cancellationToken
);
return new ForgotPasswordResult
{
Data = result
};
}
}
@@ -0,0 +1,60 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class ForgotPasswordConfirmationResult
{
public string? Email { get; init; }
}
public class ForgotPasswordConfirmationRequest : IRequest<ForgotPasswordConfirmationResult>
{
public required string Email { get; init; }
public required string TempPassword { get; init; }
public required string Code { get; init; }
}
public class ForgotPasswordConfirmationValidator : AbstractValidator<ForgotPasswordConfirmationRequest>
{
public ForgotPasswordConfirmationValidator()
{
RuleFor(x => x.Email)
.NotEmpty()
.EmailAddress();
RuleFor(x => x.TempPassword)
.NotEmpty();
RuleFor(x => x.Code)
.NotEmpty();
}
}
public class ForgotPasswordConfirmationHandler : IRequestHandler<ForgotPasswordConfirmationRequest, ForgotPasswordConfirmationResult>
{
private readonly ISecurityService _securityService;
public ForgotPasswordConfirmationHandler(
ISecurityService securityService
)
{
_securityService = securityService;
}
public async Task<ForgotPasswordConfirmationResult> Handle(ForgotPasswordConfirmationRequest request, CancellationToken cancellationToken)
{
var result = await _securityService.ForgotPasswordConfirmationAsync(
request.Email,
request.TempPassword,
request.Code,
cancellationToken
);
return new ForgotPasswordConfirmationResult { Email = result };
}
}
@@ -0,0 +1,46 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class LogoutResult
{
public LogoutResultDto? Data { get; set; }
}
public class LogoutRequest : IRequest<LogoutResult>
{
public string? UserId { get; init; }
}
public class LogoutValidator : AbstractValidator<LogoutRequest>
{
public LogoutValidator()
{
RuleFor(x => x.UserId).NotEmpty();
}
}
public class LogoutHandler : IRequestHandler<LogoutRequest, LogoutResult>
{
private readonly ISecurityService _securityService;
public LogoutHandler(ISecurityService securityService)
{
_securityService = securityService;
}
public async Task<LogoutResult> Handle(LogoutRequest request, CancellationToken cancellationToken)
{
var result = await _securityService.LogoutAsync(
request.UserId ?? "",
cancellationToken
);
return new LogoutResult
{
Data = result
};
}
}
@@ -0,0 +1,47 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Queries;
public class RefreshTokenResult
{
public RefreshTokenResultDto? Data { get; init; }
}
public class RefreshTokenRequest : IRequest<RefreshTokenResult>
{
public string? RefreshToken { get; set; }
}
public class RefreshTokenValidator : AbstractValidator<RefreshTokenRequest>
{
public RefreshTokenValidator()
{
RuleFor(x => x.RefreshToken).NotEmpty();
}
}
public class RefreshTokenHandler : IRequestHandler<RefreshTokenRequest, RefreshTokenResult>
{
private readonly ISecurityService _securityService;
public RefreshTokenHandler(ISecurityService securityService)
{
_securityService = securityService;
}
public async Task<RefreshTokenResult> Handle(RefreshTokenRequest request, CancellationToken cancellationToken)
{
var result = await _securityService.RefreshTokenAsync(
request.RefreshToken ?? "",
cancellationToken
);
return new RefreshTokenResult
{
Data = result
};
}
}
@@ -0,0 +1,60 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class RegisterResult
{
public RegisterResultDto? Data { get; set; }
}
public class RegisterRequest : IRequest<RegisterResult>
{
public string? Email { get; init; }
public string? Password { get; init; }
public string? ConfirmPassword { get; init; }
public string? FirstName { get; init; }
public string? LastName { get; init; }
public string? CompanyName { get; init; }
}
public class RegisterValidator : AbstractValidator<RegisterRequest>
{
public RegisterValidator()
{
RuleFor(x => x.Email).NotEmpty();
RuleFor(x => x.Password).NotEmpty();
RuleFor(x => x.ConfirmPassword).NotEmpty();
RuleFor(x => x.FirstName).NotEmpty();
RuleFor(x => x.LastName).NotEmpty();
}
}
public class RegisterHandler : IRequestHandler<RegisterRequest, RegisterResult>
{
private readonly ISecurityService _securityService;
public RegisterHandler(ISecurityService securityService)
{
_securityService = securityService;
}
public async Task<RegisterResult> Handle(RegisterRequest request, CancellationToken cancellationToken)
{
var result = await _securityService.RegisterAsync(
request.Email ?? "",
request.Password ?? "",
request.ConfirmPassword ?? "",
request.FirstName ?? "",
request.LastName ?? "",
request.CompanyName ?? "",
cancellationToken
);
return new RegisterResult
{
Data = result
};
}
}
@@ -0,0 +1,56 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class UpdateMyProfileResult
{
public string? Data { get; init; }
}
public class UpdateMyProfileRequest : IRequest<UpdateMyProfileResult>
{
public string? UserId { get; init; }
public string? FirstName { get; init; }
public string? LastName { get; init; }
public string? CompanyName { get; init; }
}
public class UpdateMyProfileValidator : AbstractValidator<UpdateMyProfileRequest>
{
public UpdateMyProfileValidator()
{
RuleFor(x => x.UserId).NotEmpty();
RuleFor(x => x.FirstName).NotEmpty();
RuleFor(x => x.LastName).NotEmpty();
}
}
public class UpdateMyProfileHandler : IRequestHandler<UpdateMyProfileRequest, UpdateMyProfileResult>
{
private readonly ISecurityService _securityService;
public UpdateMyProfileHandler(ISecurityService securityService)
{
_securityService = securityService;
}
public async Task<UpdateMyProfileResult> Handle(UpdateMyProfileRequest request, CancellationToken cancellationToken)
{
await _securityService.UpdateMyProfileAsync(
request.UserId ?? "",
request.FirstName ?? "",
request.LastName ?? "",
request.CompanyName ?? "",
cancellationToken
);
return new UpdateMyProfileResult
{
Data = "Update MyProfile Success"
};
}
}
@@ -0,0 +1,52 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class UpdateMyProfileAvatarResult
{
public string? Data { get; init; }
}
public class UpdateMyProfileAvatarRequest : IRequest<UpdateMyProfileAvatarResult>
{
public string? UserId { get; init; }
public string? Avatar { get; init; }
}
public class UpdateMyProfileAvatarValidator : AbstractValidator<UpdateMyProfileAvatarRequest>
{
public UpdateMyProfileAvatarValidator()
{
RuleFor(x => x.UserId).NotEmpty();
RuleFor(x => x.Avatar).NotEmpty();
}
}
public class UpdateMyProfileAvatarHandler : IRequestHandler<UpdateMyProfileAvatarRequest, UpdateMyProfileAvatarResult>
{
private readonly ISecurityService _securityService;
public UpdateMyProfileAvatarHandler(ISecurityService securityService)
{
_securityService = securityService;
}
public async Task<UpdateMyProfileAvatarResult> Handle(UpdateMyProfileAvatarRequest request, CancellationToken cancellationToken)
{
await _securityService.ChangeAvatarAsync(
request.UserId ?? "",
request.Avatar ?? "",
cancellationToken
);
return new UpdateMyProfileAvatarResult
{
Data = "Update Avatar Success"
};
}
}
@@ -0,0 +1,58 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class UpdateMyProfilePasswordResult
{
public string? Data { get; init; }
}
public class UpdateMyProfilePasswordRequest : IRequest<UpdateMyProfilePasswordResult>
{
public string? UserId { get; init; }
public string? OldPassword { get; init; }
public string? NewPassword { get; init; }
public string? ConfirmNewPassword { get; init; }
}
public class UpdateMyProfilePasswordValidator : AbstractValidator<UpdateMyProfilePasswordRequest>
{
public UpdateMyProfilePasswordValidator()
{
RuleFor(x => x.UserId).NotEmpty();
RuleFor(x => x.OldPassword).NotEmpty();
RuleFor(x => x.NewPassword).NotEmpty();
RuleFor(x => x.ConfirmNewPassword).NotEmpty();
}
}
public class UpdateMyProfilePasswordHandler : IRequestHandler<UpdateMyProfilePasswordRequest, UpdateMyProfilePasswordResult>
{
private readonly ISecurityService _securityService;
public UpdateMyProfilePasswordHandler(ISecurityService securityService)
{
_securityService = securityService;
}
public async Task<UpdateMyProfilePasswordResult> Handle(UpdateMyProfilePasswordRequest request, CancellationToken cancellationToken)
{
await _securityService.ChangePasswordAsync(
request.UserId ?? "",
request.OldPassword ?? "",
request.NewPassword ?? "",
request.ConfirmNewPassword ?? "",
cancellationToken
);
return new UpdateMyProfilePasswordResult
{
Data = "Update Password Success"
};
}
}
@@ -0,0 +1,52 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class UpdatePasswordUserResult
{
public string? Data { get; init; }
}
public class UpdatePasswordUserRequest : IRequest<UpdatePasswordUserResult>
{
public string? UserId { get; init; }
public string? NewPassword { get; init; }
}
public class UpdatePasswordUserValidator : AbstractValidator<UpdatePasswordUserRequest>
{
public UpdatePasswordUserValidator()
{
RuleFor(x => x.UserId).NotEmpty();
RuleFor(x => x.NewPassword).NotEmpty();
}
}
public class UpdatePasswordUserHandler : IRequestHandler<UpdatePasswordUserRequest, UpdatePasswordUserResult>
{
private readonly ISecurityService _securityService;
public UpdatePasswordUserHandler(ISecurityService securityService)
{
_securityService = securityService;
}
public async Task<UpdatePasswordUserResult> Handle(UpdatePasswordUserRequest request, CancellationToken cancellationToken)
{
await _securityService.UpdatePasswordUserAsync(
request.UserId ?? "",
request.NewPassword ?? "",
cancellationToken
);
return new UpdatePasswordUserResult
{
Data = "Update Password Success"
};
}
}
@@ -0,0 +1,62 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class UpdateUserResult
{
public UpdateUserResultDto? Data { get; set; }
}
public class UpdateUserRequest : IRequest<UpdateUserResult>
{
public string? UserId { get; init; }
public string? FirstName { get; init; }
public string? LastName { get; init; }
public bool? EmailConfirmed { get; init; }
public bool? IsBlocked { get; init; }
public bool? IsDeleted { get; init; }
public string? UpdatedById { get; init; }
}
public class UpdateUserValidator : AbstractValidator<UpdateUserRequest>
{
public UpdateUserValidator()
{
RuleFor(x => x.UserId).NotEmpty();
RuleFor(x => x.FirstName).NotEmpty();
RuleFor(x => x.LastName).NotEmpty();
}
}
public class UpdateUserHandler : IRequestHandler<UpdateUserRequest, UpdateUserResult>
{
private readonly ISecurityService _securityService;
public UpdateUserHandler(ISecurityService securityService)
{
_securityService = securityService;
}
public async Task<UpdateUserResult> Handle(UpdateUserRequest request, CancellationToken cancellationToken)
{
var result = await _securityService.UpdateUserAsync(
request.UserId ?? "",
request.FirstName ?? "",
request.LastName ?? "",
request.EmailConfirmed ?? true,
request.IsBlocked ?? false,
request.IsDeleted ?? false,
request.UpdatedById ?? "",
cancellationToken
);
return new UpdateUserResult
{
Data = result
};
}
}
@@ -0,0 +1,55 @@
using Application.Common.Services.SecurityManager;
using FluentValidation;
using MediatR;
namespace Application.Features.SecurityManager.Commands;
public class UpdateUserRoleResult
{
public List<string>? Data { get; set; }
}
public class UpdateUserRoleRequest : IRequest<UpdateUserRoleResult>
{
public string? UserId { get; init; }
public string? RoleName { get; init; }
public bool? AccessGranted { get; init; }
}
public class UpdateUserRoleValidator : AbstractValidator<UpdateUserRoleRequest>
{
public UpdateUserRoleValidator()
{
RuleFor(x => x.UserId).NotEmpty();
RuleFor(x => x.RoleName).NotEmpty();
}
}
public class UpdateUserRoleHandler : IRequestHandler<UpdateUserRoleRequest, UpdateUserRoleResult>
{
private readonly ISecurityService _securityService;
public UpdateUserRoleHandler(ISecurityService securityService)
{
_securityService = securityService;
}
public async Task<UpdateUserRoleResult> Handle(UpdateUserRoleRequest request, CancellationToken cancellationToken)
{
var result = await _securityService.UpdateUserRoleAsync(
request.UserId ?? "",
request.RoleName ?? "",
request.AccessGranted ?? true,
cancellationToken
);
return new UpdateUserRoleResult
{
Data = result
};
}
}