Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ tab_width = 4
# New line preferences
insert_final_newline = false

[**/DTOs/**/*.cs]
# Enforce DTO suffix naming convention
[**/Dtos/**/*.cs] # Enforce Dto suffix naming convention
dotnet_naming_rule.dto_classes_should_end_with_dto.severity = error
dotnet_naming_rule.dto_classes_should_end_with_dto.symbols = dto_classes
dotnet_naming_rule.dto_classes_should_end_with_dto.style = dto_suffix_style
Expand All @@ -48,10 +47,11 @@ dotnet_naming_symbols.dto_classes.applicable_accessibilities = public
dotnet_naming_symbols.dto_classes.required_modifiers =

# Define the naming style (must end with DTO)
dotnet_naming_style.dto_suffix_style.required_suffix = DTO
dotnet_naming_style.dto_suffix_style.required_suffix = Dto
dotnet_naming_style.dto_suffix_style.capitalization = pascal_case



#### .NET Coding Conventions ####
[*.{cs,vb}]

Expand Down
3 changes: 2 additions & 1 deletion analyze.sh
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ SONAR_BEGIN_ARGS=(
**/Settings/**,\
**/Interceptors/**,\
**/Constants/**,\
**/Models/**,\
**/Dtos/**,\
**/DomainEvents/**,\
**/Exceptions/**,\
**/Abstractions/**,\
**/DependencyInjection.cs,\
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Riber.Application.Models.User;
using Riber.Application.Dtos.User;

namespace Riber.Application.Abstractions.Services.Authentication;

Expand All @@ -10,7 +10,7 @@ public interface IAuthenticationService
/// <param name="userNameOrEmail">Nome de usuário ou endereço de e-mail.</param>
/// <param name="password">Senha correspondente ao usuário.</param>
/// <returns>Modelo com os detalhes do usuário autenticado ou <c>null</c> em caso de falha na autenticação.</returns>
Task<UserDetailsModel?> LoginAsync(string userNameOrEmail, string password);
Task<UserDetailsDto?> LoginAsync(string userNameOrEmail, string password);

/// <summary>
/// Atualiza o *security stamp* do usuário, invalidando quaisquer tokens de autenticação existentes.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Riber.Application.Common;
using Riber.Application.Models.Auth;
using Riber.Application.Dtos.Auth;

namespace Riber.Application.Abstractions.Services.Authentication;

Expand All @@ -26,5 +26,5 @@ public interface IPermissionDataService
/// Retorna todas as permissões disponíveis com suas descrições.
/// </summary>
/// <returns>Coleção de permissões com detalhes e descrições.</returns>
Task<Result<IReadOnlyCollection<PermissionModel>>> GetAllWithDescriptionsAsync();
Task<Result<IReadOnlyCollection<PermissionDto>>> GetAllWithDescriptionsAsync();
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Riber.Application.Models.User;
using Riber.Application.Dtos.User;

namespace Riber.Application.Abstractions.Services.Authentication;

Expand All @@ -12,7 +12,7 @@ public interface ITokenService
/// </summary>
/// <param name="user">Os detalhes do usuário para quem o token está sendo gerado.</param>
/// <returns>Uma string representando o token de autenticação gerado.</returns>
public string GenerateToken(UserDetailsModel user);
public string GenerateToken(UserDetailsDto user);

/// <summary>
/// Gera um token de atualização, que pode ser usado para substituir um token expirado ou inválido.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Riber.Application.Models.User;
using Riber.Application.Dtos.User;

namespace Riber.Application.Abstractions.Services.Authentication;

Expand All @@ -7,11 +7,11 @@ public interface IUserManagementService
/// <summary>
/// Cria um novo usuário no sistema de identidade com base nos dados fornecidos.
/// </summary>
/// <param name="model">Modelo contendo as informações necessárias para a criação do usuário.</param>
/// <param name="dto">Modelo contendo as informações necessárias para a criação do usuário.</param>
/// <returns>
/// <c>true</c> se o usuário for criado com sucesso; caso contrário, <c>false</c>.
/// </returns>
Task<bool> CreateUserAsync(CreateApplicationUserModel model);
Task<bool> CreateUserAsync(CreateApplicationUserDto dto);

/// <summary>
/// Remove permanentemente um usuário do sistema de identidade.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using Riber.Application.Models.User;
using Riber.Application.Dtos.User;

namespace Riber.Application.Abstractions.Services.Authentication;

Expand All @@ -9,39 +9,39 @@ public interface IUserQueryService
/// </summary>
/// <param name="userId">Identificador exclusivo do usuário.</param>
/// <returns>
/// Um <see cref="UserDetailsModel"/> contendo os detalhes do usuário,
/// Um <see cref="UserDetailsDto"/> contendo os detalhes do usuário,
/// ou <c>null</c> caso o usuário não seja encontrado.
/// </returns>
Task<UserDetailsModel?> FindByIdAsync(Guid userId);
Task<UserDetailsDto?> FindByIdAsync(Guid userId);

/// <summary>
/// Obtém um usuário com base em seu endereço de e-mail.
/// </summary>
/// <param name="email">Endereço de e-mail do usuário.</param>
/// <returns>
/// Um <see cref="UserDetailsModel"/> contendo os detalhes do usuário,
/// Um <see cref="UserDetailsDto"/> contendo os detalhes do usuário,
/// ou <c>null</c> caso o usuário não seja encontrado.
/// </returns>
Task<UserDetailsModel?> FindByEmailAsync(string email);
Task<UserDetailsDto?> FindByEmailAsync(string email);

/// <summary>
/// Obtém um usuário com base em seu nome de usuário.
/// </summary>
/// <param name="userName">Nome de usuário.</param>
/// <returns>
/// Um <see cref="UserDetailsModel"/> contendo os detalhes do usuário,
/// Um <see cref="UserDetailsDto"/> contendo os detalhes do usuário,
/// ou <c>null</c> caso o usuário não seja encontrado.
/// </returns>
Task<UserDetailsModel?> FindByUserNameAsync(string userName);
Task<UserDetailsDto?> FindByUserNameAsync(string userName);

/// <summary>
/// Obtém um usuário com base em seu número de telefone.
/// </summary>
/// <param name="phoneNumber">Número de telefone do usuário.</param>
/// <returns>
/// Um <see cref="UserDetailsModel"/> contendo os detalhes do usuário,
/// Um <see cref="UserDetailsDto"/> contendo os detalhes do usuário,
/// ou <c>null</c> caso o usuário não seja encontrado.
/// </returns>
Task<UserDetailsModel?> FindByPhoneAsync(string phoneNumber);
Task<UserDetailsDto?> FindByPhoneAsync(string phoneNumber);

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
using Riber.Application.Common;
using Riber.Application.Models.User;
using Riber.Application.Dtos.User;

namespace Riber.Application.Abstractions.Services;

Expand All @@ -11,8 +11,8 @@ public interface IUserCreationService
/// <summary>
/// Cria um usuário completo no sistema, incluindo entidade de domínio e conta de aplicação.
/// </summary>
/// <param name="model">Dados necessários para criação do usuário completo.</param>
/// <param name="dto">Dados necessários para criação do usuário completo.</param>
/// <param name="cancellationToken">Token para cancelamento da operação.</param>
/// <returns>Resultado da operação de criação do usuário.</returns>
Task<Result<EmptyResult>> CreateCompleteUserAsync(CreateUserCompleteModel model, CancellationToken cancellationToken = default);
Task<Result<EmptyResult>> CreateCompleteUserAsync(CreateUserCompleteDto dto, CancellationToken cancellationToken = default);
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Riber.Application.Abstractions.Dispatchers;
using Riber.Application.Abstractions.Events;
using Riber.Application.Dtos.Email;
using Riber.Application.Extensions;
using Riber.Application.Models.Email;
using Riber.Domain.Enums;
using Riber.Domain.Events;

Expand All @@ -14,7 +14,7 @@ internal sealed class CompanyWelcomeEmailRequestedEventHandler(
public async ValueTask Handle(CompanyWelcomeEmailRequestedEvent notification, CancellationToken cancellationToken)
=> await emailDispatcher.SendAsync(
EmailAddress.NoReply,
new WelcomeBaseEmailModel(
new WelcomeBaseEmailDto(
TemplatePath: $"{EmailAudience.Company.GetDescription()}-{EmailTemplate.Welcome.GetDescription()}",
Name: notification.Name,
Subject: "Seja bem-vindo ao Riber!",
Expand Down
6 changes: 6 additions & 0 deletions src/Riber.Application/Dtos/Auth/ClaimDto.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace Riber.Application.Dtos.Auth;

public sealed record ClaimDto(
string Type,
string Value
);
7 changes: 7 additions & 0 deletions src/Riber.Application/Dtos/Auth/PermissionDto.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace Riber.Application.Dtos.Auth;

public sealed record PermissionDto(
string Name,
string Description,
bool IsActive = true
);
7 changes: 7 additions & 0 deletions src/Riber.Application/Dtos/Email/BaseEmailDto.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace Riber.Application.Dtos.Email;

public abstract record BaseEmailDto(
string To,
string Subject,
string TemplatePath
);
8 changes: 8 additions & 0 deletions src/Riber.Application/Dtos/Email/WelcomeBaseEmailDto.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
namespace Riber.Application.Dtos.Email;

public sealed record WelcomeBaseEmailDto(
string Name,
string To,
string Subject,
string TemplatePath
) : BaseEmailDto(To, Subject, TemplatePath);
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
namespace Riber.Application.Models.User;
namespace Riber.Application.Dtos.User;

public sealed record CreateApplicationUserModel(
public sealed record CreateApplicationUserDto(
string UserName,
string Name,
string Email,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
using Riber.Domain.Enums;

namespace Riber.Application.Models.User;
namespace Riber.Application.Dtos.User;

public sealed record CreateUserCompleteModel(
public sealed record CreateUserCompleteDto(
string FullName,
string UserName,
string Email,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
using Riber.Application.Models.Auth;
using Riber.Application.Dtos.Auth;

namespace Riber.Application.Models.User;
namespace Riber.Application.Dtos.User;

public sealed record UserDetailsModel(
public sealed record UserDetailsDto(
Guid Id,
string UserName,
string Email,
bool EmailConfirmed,
string PhoneNumber,
string SecurityStamp,
ICollection<string> Roles,
ICollection<ClaimModel> Claims,
ICollection<ClaimDto> Claims,
Guid UserDomainId,
Domain.Entities.User UserDomain
);
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@
using Riber.Application.Abstractions.Commands;
using Riber.Application.Abstractions.Services;
using Riber.Application.Common;
using Riber.Application.Dtos.User;
using Riber.Application.Extensions;
using Riber.Application.Models.User;
using Riber.Domain.Constants.Messages.Common;
using Riber.Domain.Entities;
using Riber.Domain.Enums;
Expand Down Expand Up @@ -67,7 +67,7 @@ private async Task<Result<CreateCompanyWithAdminCommandResponse>> CreateUserAsyn
CancellationToken cancellationToken)
{
await unitOfWork.Companies.CreateAsync(companyEntity, cancellationToken);
var createUserModel = new CreateUserCompleteModel(
var createUserDto = new CreateUserCompleteDto(
FullName: request.AdminFullName,
UserName: request.AdminUserName,
Email: request.AdminEmail,
Expand All @@ -79,7 +79,7 @@ private async Task<Result<CreateCompanyWithAdminCommandResponse>> CreateUserAsyn
CompanyId: companyEntity.Id
);

var userCreationResult = await userCreationService.CreateCompleteUserAsync(createUserModel, cancellationToken);
var userCreationResult = await userCreationService.CreateCompleteUserAsync(createUserDto, cancellationToken);
return !userCreationResult.IsSuccess
? Result.Failure<CreateCompanyWithAdminCommandResponse>(userCreationResult.Error.Message,
userCreationResult.StatusCode)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
using Riber.Application.Abstractions.Commands;
using Riber.Application.Abstractions.Services;
using Riber.Application.Common;
using Riber.Application.Models.User;
using Riber.Application.Dtos.User;
using Riber.Domain.Repositories;

namespace Riber.Application.Features.Users.Commands.CreateUser;
Expand All @@ -20,7 +20,7 @@ public async ValueTask<Result<CreateUserCommandResponse>> Handle(
try
{
var result = await userCreationService.CreateCompleteUserAsync(
new CreateUserCompleteModel(
new CreateUserCompleteDto(
FullName: command.FullName,
UserName: command.UserName,
Email: command.Email,
Expand Down
6 changes: 0 additions & 6 deletions src/Riber.Application/Models/Auth/ClaimModel.cs

This file was deleted.

7 changes: 0 additions & 7 deletions src/Riber.Application/Models/Auth/PermissionModel.cs

This file was deleted.

7 changes: 0 additions & 7 deletions src/Riber.Application/Models/Email/BaseEmailModel.cs

This file was deleted.

8 changes: 0 additions & 8 deletions src/Riber.Application/Models/Email/WelcomeBaseEmailModel.cs

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Riber.Application.Abstractions.Services.Authentication;
using Riber.Application.Models.User;
using Riber.Application.Dtos.User;
using Riber.Infrastructure.Persistence.Identity;

namespace Riber.Infrastructure.Services.Authentication.Identity;
Expand All @@ -14,7 +14,7 @@ public sealed class AuthenticationService(
private IQueryable<ApplicationUser> GetBaseUserQuery
=> userManager.Users.Include(u => u.UserDomain);

public async Task<UserDetailsModel?> LoginAsync(string userNameOrEmail, string password)
public async Task<UserDetailsDto?> LoginAsync(string userNameOrEmail, string password)
{
var normalizedInput = userNameOrEmail.ToUpperInvariant();
var user = await GetBaseUserQuery.FirstOrDefaultAsync(u =>
Expand Down
Loading
Loading