mirror of
https://github.com/aaronpo97/the-biergarten-app.git
synced 2026-10-14 17:54:42 +00:00
Rename auth feature to Features.Users (#281)
This commit is contained in:
@@ -1,6 +1,5 @@
|
||||
using API.Core.Authentication;
|
||||
using Database.Connection.DependencyInjection;
|
||||
using Features.Auth.Controllers;
|
||||
using Features.Breweries.Controllers;
|
||||
using Features.Breweries.DependencyInjection;
|
||||
using Features.Emails.DependencyInjection;
|
||||
@@ -9,6 +8,7 @@ using Features.ImageUploads.Commands.UploadPhoto;
|
||||
using Features.ImageUploads.DependencyInjection;
|
||||
using Features.Locations.Controllers;
|
||||
using Features.Locations.DependencyInjection;
|
||||
using Features.Users.Controllers;
|
||||
using Features.Users.DependencyInjection;
|
||||
using FluentValidation;
|
||||
using FluentValidation.AspNetCore;
|
||||
|
||||
@@ -2,10 +2,6 @@ using Database.Seed.DatabaseHelpers;
|
||||
using Database.Seed.Sqlite;
|
||||
using Database.Seed.SourceDataModels;
|
||||
using Domain.Entities;
|
||||
using Features.Auth.Commands.Authentication.RegisterUser;
|
||||
using Features.Auth.Commands.Profile.UpdateBiography;
|
||||
using Features.Auth.Commands.Profile.UploadAvatar;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Breweries.Commands.CreateBrewery;
|
||||
using Features.Locations.Commands.CreateCity;
|
||||
using Features.Locations.Commands.CreateCountry;
|
||||
@@ -13,6 +9,10 @@ using Features.Locations.Commands.CreateStateProvince;
|
||||
using Features.Locations.Queries.GetCity;
|
||||
using Features.Locations.Queries.GetCountry;
|
||||
using Features.Locations.Queries.GetStateProvince;
|
||||
using Features.Users.Commands.Authentication.RegisterUser;
|
||||
using Features.Users.Commands.Profile.UpdateBiography;
|
||||
using Features.Users.Commands.Profile.UploadAvatar;
|
||||
using Features.Users.Dtos;
|
||||
using idunno.Password;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Features.Auth.Services;
|
||||
using Features.Users.Services;
|
||||
|
||||
namespace Database.Seed.DatabaseHelpers;
|
||||
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
using Database.Connection.DependencyInjection;
|
||||
using Database.Seed.DatabaseHelpers;
|
||||
using Database.Seed.Sqlite;
|
||||
using Features.Auth.Commands.Profile.UploadAvatar;
|
||||
using Features.Auth.Services;
|
||||
using Features.Breweries.Commands.CreateBrewery;
|
||||
using Features.Breweries.DependencyInjection;
|
||||
using Features.ImageUploads.Commands.UploadPhoto;
|
||||
using Features.ImageUploads.DependencyInjection;
|
||||
using Features.Locations.DependencyInjection;
|
||||
using Features.Locations.Queries.GetCountry;
|
||||
using Features.Users.Commands.Profile.UploadAvatar;
|
||||
using Features.Users.DependencyInjection;
|
||||
using Features.Users.Services;
|
||||
using Infrastructure.FileUpload;
|
||||
using MediatR;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Features.Auth.Notifications;
|
||||
using Features.Emails.Notifications;
|
||||
using Features.Emails.Services;
|
||||
using Features.Users.Notifications;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Moq;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Features.Auth.Notifications;
|
||||
using Features.Emails.Notifications;
|
||||
using Features.Emails.Services;
|
||||
using Features.Users.Notifications;
|
||||
using FluentAssertions;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using Moq;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using Features.Auth.Notifications;
|
||||
using Features.Emails.Services;
|
||||
using Features.Users.Notifications;
|
||||
using MediatR;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using Features.Auth.Notifications;
|
||||
using Features.Emails.Services;
|
||||
using Features.Users.Notifications;
|
||||
using MediatR;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Security.Claims;
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Commands.Authentication.ConfirmUser;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Services;
|
||||
using Features.Auth.Tests.TestSupport;
|
||||
using Features.Users.Commands.Authentication.ConfirmUser;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Services;
|
||||
using Features.Users.Tests.TestSupport;
|
||||
using FluentAssertions;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Commands;
|
||||
namespace Features.Users.Tests.Commands;
|
||||
|
||||
public class ConfirmUserHandlerTests
|
||||
{
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Commands.Account.DeleteAccount;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Tests.TestSupport;
|
||||
using Features.Users.Commands.Account.DeleteAccount;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Tests.TestSupport;
|
||||
using FluentAssertions;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Commands;
|
||||
namespace Features.Users.Tests.Commands;
|
||||
|
||||
public class DeleteAccountHandlerTests
|
||||
{
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
using Features.Auth.Commands.Authentication.RefreshToken;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Services;
|
||||
using Features.Users.Commands.Authentication.RefreshToken;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Services;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Commands;
|
||||
namespace Features.Users.Tests.Commands;
|
||||
|
||||
public class RefreshTokenHandlerTests
|
||||
{
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Commands.Authentication.RegisterUser;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Notifications;
|
||||
using Features.Auth.Services;
|
||||
using Features.Auth.Tests.TestSupport;
|
||||
using Features.Users.Commands.Authentication.RegisterUser;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Notifications;
|
||||
using Features.Users.Services;
|
||||
using Features.Users.Tests.TestSupport;
|
||||
using FluentAssertions;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Commands;
|
||||
namespace Features.Users.Tests.Commands;
|
||||
|
||||
public class RegisterUserHandlerTests
|
||||
{
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
using Features.Auth.Commands.Authentication.ResendConfirmationEmail;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Notifications;
|
||||
using Features.Auth.Services;
|
||||
using Features.Auth.Tests.TestSupport;
|
||||
using Features.Users.Commands.Authentication.ResendConfirmationEmail;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Notifications;
|
||||
using Features.Users.Services;
|
||||
using Features.Users.Tests.TestSupport;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Commands;
|
||||
namespace Features.Users.Tests.Commands;
|
||||
|
||||
public class ResendConfirmationEmailHandlerTests
|
||||
{
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Commands.Account.UpdateEmail;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Tests.TestSupport;
|
||||
using Features.Users.Commands.Account.UpdateEmail;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Tests.TestSupport;
|
||||
using FluentAssertions;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Commands;
|
||||
namespace Features.Users.Tests.Commands;
|
||||
|
||||
public class UpdateEmailHandlerTests
|
||||
{
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Commands.Account.UpdatePassword;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Tests.TestSupport;
|
||||
using Features.Users.Commands.Account.UpdatePassword;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Tests.TestSupport;
|
||||
using FluentAssertions;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Commands;
|
||||
namespace Features.Users.Tests.Commands;
|
||||
|
||||
public class UpdatePasswordHandlerTests
|
||||
{
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Commands.Profile.UpdateProfile;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Tests.TestSupport;
|
||||
using Features.Users.Commands.Profile.UpdateProfile;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Tests.TestSupport;
|
||||
using FluentAssertions;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Commands;
|
||||
namespace Features.Users.Tests.Commands;
|
||||
|
||||
public class UpdateProfileHandlerTests
|
||||
{
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Commands.Account.UpdateUsername;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Tests.TestSupport;
|
||||
using Features.Users.Commands.Account.UpdateUsername;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Tests.TestSupport;
|
||||
using FluentAssertions;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Commands;
|
||||
namespace Features.Users.Tests.Commands;
|
||||
|
||||
public class UpdateUsernameHandlerTests
|
||||
{
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<IsPackable>false</IsPackable>
|
||||
<RootNamespace>Features.Auth.Tests</RootNamespace>
|
||||
<RootNamespace>Features.Users.Tests</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
using Domain.Entities;
|
||||
using Features.Auth.Queries.GetAllUsers;
|
||||
using Features.Auth.Repository;
|
||||
using Features.Users.Queries.GetAllUsers;
|
||||
using Features.Users.Repository;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Queries;
|
||||
namespace Features.Users.Tests.Queries;
|
||||
|
||||
public class GetAllUsersHandlerTests
|
||||
{
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
using Domain.Entities;
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Queries.GetUserById;
|
||||
using Features.Auth.Repository;
|
||||
using Features.Users.Queries.GetUserById;
|
||||
using Features.Users.Repository;
|
||||
using FluentAssertions;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Queries;
|
||||
namespace Features.Users.Tests.Queries;
|
||||
|
||||
public class GetUserByIdHandlerTests
|
||||
{
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Commands.Authentication.Login;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Services;
|
||||
using Features.Auth.Tests.TestSupport;
|
||||
using Features.Users.Commands.Authentication.Login;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Services;
|
||||
using Features.Users.Tests.TestSupport;
|
||||
using FluentAssertions;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Queries;
|
||||
namespace Features.Users.Tests.Queries;
|
||||
|
||||
public class LoginHandlerTests
|
||||
{
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Security.Claims;
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Services;
|
||||
using Features.Auth.Tests.TestSupport;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Services;
|
||||
using Features.Users.Tests.TestSupport;
|
||||
using FluentAssertions;
|
||||
using Infrastructure.Configuration;
|
||||
using Infrastructure.Jwt;
|
||||
@@ -11,7 +11,7 @@ using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Services;
|
||||
namespace Features.Users.Tests.Services;
|
||||
|
||||
public class TokenServiceRefreshTests
|
||||
{
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Security.Claims;
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Services;
|
||||
using Features.Auth.Tests.TestSupport;
|
||||
using Features.Users.Services;
|
||||
using Features.Users.Tests.TestSupport;
|
||||
using FluentAssertions;
|
||||
using Infrastructure.Configuration;
|
||||
using Infrastructure.Jwt;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.Services;
|
||||
namespace Features.Users.Tests.Services;
|
||||
|
||||
public class TokenServiceValidationTests
|
||||
{
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using Features.Auth.Identity;
|
||||
using Features.Users.Identity;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Moq;
|
||||
|
||||
namespace Features.Auth.Tests.TestSupport;
|
||||
namespace Features.Users.Tests.TestSupport;
|
||||
|
||||
public static class UserManagerMockFactory
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Account.DeleteAccount;
|
||||
namespace Features.Users.Commands.Account.DeleteAccount;
|
||||
|
||||
/// <summary>Permanently deletes the given user account.</summary>
|
||||
/// <param name="UserAccountId">
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Users.Identity;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace Features.Auth.Commands.Account.DeleteAccount;
|
||||
namespace Features.Users.Commands.Account.DeleteAccount;
|
||||
|
||||
/// <summary>Handles <see cref="DeleteAccountCommand" /> by deleting the user via <see cref="UserManager{TUser}" />.</summary>
|
||||
public class DeleteAccountHandler(UserManager<ApplicationUser> userManager)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Users.Dtos;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Account.UpdateEmail;
|
||||
namespace Features.Users.Commands.Account.UpdateEmail;
|
||||
|
||||
/// <summary>
|
||||
/// Changes the email address of the given user account. The account's <c>EmailConfirmed</c> status
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace Features.Auth.Commands.Account.UpdateEmail;
|
||||
namespace Features.Users.Commands.Account.UpdateEmail;
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="UpdateEmailCommand" /> via <see cref="UserManager{TUser}" />.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace Features.Auth.Commands.Account.UpdateEmail;
|
||||
namespace Features.Users.Commands.Account.UpdateEmail;
|
||||
|
||||
/// <summary>Validates <see cref="UpdateEmailCommand" />, mirroring the email rules in <c>RegisterUserValidator</c>.</summary>
|
||||
public class UpdateEmailValidator : AbstractValidator<UpdateEmailCommand>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Users.Dtos;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Account.UpdatePassword;
|
||||
namespace Features.Users.Commands.Account.UpdatePassword;
|
||||
|
||||
/// <summary>Changes the password of the given user account, verifying the current password first.</summary>
|
||||
/// <param name="UserAccountId">
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace Features.Auth.Commands.Account.UpdatePassword;
|
||||
namespace Features.Users.Commands.Account.UpdatePassword;
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="UpdatePasswordCommand" /> via <see cref="UserManager{TUser}.ChangePasswordAsync" />,
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace Features.Auth.Commands.Account.UpdatePassword;
|
||||
namespace Features.Users.Commands.Account.UpdatePassword;
|
||||
|
||||
/// <summary>Validates <see cref="UpdatePasswordCommand" />, mirroring the password rules in <c>RegisterUserValidator</c>.</summary>
|
||||
public class UpdatePasswordValidator : AbstractValidator<UpdatePasswordCommand>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Users.Dtos;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Account.UpdateUsername;
|
||||
namespace Features.Users.Commands.Account.UpdateUsername;
|
||||
|
||||
/// <summary>Changes the username of the given user account.</summary>
|
||||
/// <param name="UserAccountId">
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace Features.Auth.Commands.Account.UpdateUsername;
|
||||
namespace Features.Users.Commands.Account.UpdateUsername;
|
||||
|
||||
/// <summary>Handles <see cref="UpdateUsernameCommand" /> via <see cref="UserManager{TUser}" />.</summary>
|
||||
public class UpdateUsernameHandler(UserManager<ApplicationUser> userManager)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace Features.Auth.Commands.Account.UpdateUsername;
|
||||
namespace Features.Users.Commands.Account.UpdateUsername;
|
||||
|
||||
/// <summary>Validates <see cref="UpdateUsernameCommand" />, mirroring the username rules in <c>RegisterUserValidator</c>.</summary>
|
||||
public class UpdateUsernameValidator : AbstractValidator<UpdateUsernameCommand>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Users.Dtos;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.ConfirmUser;
|
||||
namespace Features.Users.Commands.Authentication.ConfirmUser;
|
||||
|
||||
/// <summary>Validates a confirmation token and confirms the corresponding user account.</summary>
|
||||
public record ConfirmUserCommand(string Token) : IRequest<ConfirmationPayload>;
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Services;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Services;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.ConfirmUser;
|
||||
namespace Features.Users.Commands.Authentication.ConfirmUser;
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="ConfirmUserCommand" /> by validating the confirmation token and marking the
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Users.Dtos;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.Login;
|
||||
namespace Features.Users.Commands.Authentication.Login;
|
||||
|
||||
/// <summary>
|
||||
/// Authenticates a user using their username and password and issues new tokens. Bound directly
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Services;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Services;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.Login;
|
||||
namespace Features.Users.Commands.Authentication.Login;
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="LoginCommand" /> by verifying credentials via
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.Login;
|
||||
namespace Features.Users.Commands.Authentication.Login;
|
||||
|
||||
/// <summary>Validates that <see cref="LoginCommand.Username" /> and <see cref="LoginCommand.Password" /> are present.</summary>
|
||||
public class LoginValidator : AbstractValidator<LoginCommand>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Users.Dtos;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.RefreshToken;
|
||||
namespace Features.Users.Commands.Authentication.RefreshToken;
|
||||
|
||||
/// <summary>
|
||||
/// Exchanges a valid refresh token for a new access/refresh token pair. Constructed from the
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Services;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Services;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.RefreshToken;
|
||||
namespace Features.Users.Commands.Authentication.RefreshToken;
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="RefreshTokenCommand" /> by validating the refresh token and issuing a new
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.RefreshToken;
|
||||
namespace Features.Users.Commands.Authentication.RefreshToken;
|
||||
|
||||
/// <summary>Validates that <see cref="RefreshTokenCommand.RefreshToken" /> is present.</summary>
|
||||
public class RefreshTokenValidator : AbstractValidator<RefreshTokenCommand>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Users.Dtos;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.RegisterUser;
|
||||
namespace Features.Users.Commands.Authentication.RegisterUser;
|
||||
|
||||
/// <summary>
|
||||
/// Registers a new user account. Bound directly from the request body of <c>POST /api/auth/register</c>.
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
using Domain.Entities;
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Commands.Profile.CreateUserProfile;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Notifications;
|
||||
using Features.Auth.Services;
|
||||
using Features.Users.Commands.Profile.CreateUserProfile;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Notifications;
|
||||
using Features.Users.Services;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.RegisterUser;
|
||||
namespace Features.Users.Commands.Authentication.RegisterUser;
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="RegisterUserCommand" />: creates the user via <see cref="UserManager{TUser}" />
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.RegisterUser;
|
||||
namespace Features.Users.Commands.Authentication.RegisterUser;
|
||||
|
||||
/// <summary>
|
||||
/// Validates the field-level constraints on <see cref="RegisterUserCommand" />: username format and
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.ResendConfirmationEmail;
|
||||
namespace Features.Users.Commands.Authentication.ResendConfirmationEmail;
|
||||
|
||||
/// <summary>Resends the account confirmation email to a user, generating a fresh confirmation token.</summary>
|
||||
public record ResendConfirmationEmailCommand(Guid UserId) : IRequest;
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Notifications;
|
||||
using Features.Auth.Services;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Notifications;
|
||||
using Features.Users.Services;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace Features.Auth.Commands.Authentication.ResendConfirmationEmail;
|
||||
namespace Features.Users.Commands.Authentication.ResendConfirmationEmail;
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="ResendConfirmationEmailCommand" /> by generating a fresh confirmation token and
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Profile.CreateUserProfile;
|
||||
namespace Features.Users.Commands.Profile.CreateUserProfile;
|
||||
|
||||
/// <summary>Creates a new user profile for a user account.</summary>
|
||||
public record CreateUserProfileCommand(Guid UserAccountId, string Biography) : IRequest<Guid>;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Features.Auth.Repository;
|
||||
using Features.Users.Repository;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Profile.CreateUserProfile;
|
||||
namespace Features.Users.Commands.Profile.CreateUserProfile;
|
||||
|
||||
/// <summary>Handles <see cref="CreateUserProfileCommand" /> by inserting the new profile record.</summary>
|
||||
public class CreateUserProfileHandler(IUserProfileRepository userProfileRepository)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Profile.UpdateBiography;
|
||||
namespace Features.Users.Commands.Profile.UpdateBiography;
|
||||
|
||||
/// <summary>Updates the biography of the given user account's profile.</summary>
|
||||
/// <param name="UserAccountId">
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Features.Auth.Repository;
|
||||
using Features.Users.Repository;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Profile.UpdateBiography;
|
||||
namespace Features.Users.Commands.Profile.UpdateBiography;
|
||||
|
||||
/// <summary>Handles <see cref="UpdateBiographyCommand" /> by updating the stored biography.</summary>
|
||||
public class UpdateBiographyHandler(IUserProfileRepository userProfileRepository)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Users.Dtos;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Profile.UpdateProfile;
|
||||
namespace Features.Users.Commands.Profile.UpdateProfile;
|
||||
|
||||
/// <summary>
|
||||
/// Updates the non-credential profile fields (first name, last name, date of birth) of the given
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Users.Dtos;
|
||||
using Features.Users.Identity;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace Features.Auth.Commands.Profile.UpdateProfile;
|
||||
namespace Features.Users.Commands.Profile.UpdateProfile;
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="UpdateProfileCommand" /> via <see cref="UserManager{TUser}" />. First/last name
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using FluentValidation;
|
||||
|
||||
namespace Features.Auth.Commands.Profile.UpdateProfile;
|
||||
namespace Features.Users.Commands.Profile.UpdateProfile;
|
||||
|
||||
/// <summary>Validates <see cref="UpdateProfileCommand" />, mirroring the profile rules in <c>RegisterUserValidator</c>.</summary>
|
||||
public class UpdateProfileValidator : AbstractValidator<UpdateProfileCommand>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Http;
|
||||
|
||||
namespace Features.Auth.Commands.Profile.UploadAvatar;
|
||||
namespace Features.Users.Commands.Profile.UploadAvatar;
|
||||
|
||||
/// <summary>Uploads a new avatar photo for a user account, replacing any existing avatar.</summary>
|
||||
public record UploadAvatarCommand(Guid UserAccountId, IFormFile File) : IRequest<Guid>;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using Domain.Entities;
|
||||
using Features.Auth.Repository;
|
||||
using Features.ImageUploads.Commands.UploadPhoto;
|
||||
using Features.Users.Repository;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Commands.Profile.UploadAvatar;
|
||||
namespace Features.Users.Commands.Profile.UploadAvatar;
|
||||
|
||||
/// <summary>
|
||||
/// Handles <see cref="UploadAvatarCommand" />: uploads the photo via <see cref="UploadPhotoCommand" />,
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
using Features.Auth.Commands.Account.DeleteAccount;
|
||||
using Features.Auth.Commands.Account.UpdateEmail;
|
||||
using Features.Auth.Commands.Account.UpdatePassword;
|
||||
using Features.Auth.Commands.Account.UpdateUsername;
|
||||
using Features.Auth.Commands.Authentication.ConfirmUser;
|
||||
using Features.Auth.Commands.Authentication.Login;
|
||||
using Features.Auth.Commands.Authentication.RefreshToken;
|
||||
using Features.Auth.Commands.Authentication.RegisterUser;
|
||||
using Features.Auth.Commands.Authentication.ResendConfirmationEmail;
|
||||
using Features.Auth.Commands.Profile.UpdateProfile;
|
||||
using Features.Auth.Dtos;
|
||||
using Features.Users.Commands.Account.DeleteAccount;
|
||||
using Features.Users.Commands.Account.UpdateEmail;
|
||||
using Features.Users.Commands.Account.UpdatePassword;
|
||||
using Features.Users.Commands.Account.UpdateUsername;
|
||||
using Features.Users.Commands.Authentication.ConfirmUser;
|
||||
using Features.Users.Commands.Authentication.Login;
|
||||
using Features.Users.Commands.Authentication.RefreshToken;
|
||||
using Features.Users.Commands.Authentication.RegisterUser;
|
||||
using Features.Users.Commands.Authentication.ResendConfirmationEmail;
|
||||
using Features.Users.Commands.Profile.UpdateProfile;
|
||||
using Features.Users.Dtos;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Shared.Contracts;
|
||||
|
||||
namespace Features.Auth.Controllers;
|
||||
namespace Features.Users.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// Handles user authentication concerns: registration, login, email confirmation, token refresh, and
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
using Domain.Entities;
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Queries.GetAllUsers;
|
||||
using Features.Auth.Queries.GetUserById;
|
||||
using Features.Users.Queries.GetAllUsers;
|
||||
using Features.Users.Queries.GetUserById;
|
||||
using MediatR;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
|
||||
namespace Features.Auth.Controllers;
|
||||
namespace Features.Users.Controllers;
|
||||
|
||||
/// <summary>
|
||||
/// Exposes read endpoints for user accounts.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Features.Auth.Identity;
|
||||
using Features.Auth.Repository;
|
||||
using Features.Auth.Services;
|
||||
using Features.Users.Identity;
|
||||
using Features.Users.Repository;
|
||||
using Features.Users.Services;
|
||||
using Infrastructure.PasswordHashing;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Features.Auth.Dtos;
|
||||
namespace Features.Users.Dtos;
|
||||
|
||||
/// <summary>Payload returned to the client after a successful login or token refresh.</summary>
|
||||
public record LoginPayload(
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
|
||||
<RootNamespace>Features.Auth</RootNamespace>
|
||||
<RootNamespace>Features.Users</RootNamespace>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
namespace Features.Auth.Identity;
|
||||
namespace Features.Users.Identity;
|
||||
|
||||
/// <summary>
|
||||
/// The user type driving <see cref="Microsoft.AspNetCore.Identity.UserManager{TUser}" /> for
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Infrastructure.PasswordHashing;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
|
||||
namespace Features.Auth.Identity;
|
||||
namespace Features.Users.Identity;
|
||||
|
||||
/// <summary>Adapts <see cref="IPasswordInfrastructure" />'s Argon2 hashing to <see cref="IPasswordHasher{TUser}" />.</summary>
|
||||
public sealed class Argon2PasswordHasher(IPasswordInfrastructure passwordInfrastructure)
|
||||
|
||||
@@ -4,7 +4,7 @@ using Database.Connection;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.Data.SqlClient;
|
||||
|
||||
namespace Features.Auth.Identity;
|
||||
namespace Features.Users.Identity;
|
||||
|
||||
/// <summary>
|
||||
/// Dapper-based implementation of the ASP.NET Core Identity store interfaces consumed by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Domain.Entities;
|
||||
|
||||
namespace Features.Auth.Identity;
|
||||
namespace Features.Users.Identity;
|
||||
|
||||
/// <summary>
|
||||
/// Converts the persistence-agnostic <see cref="UserAccount" /> domain entity into the
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Notifications;
|
||||
namespace Features.Users.Notifications;
|
||||
|
||||
/// <summary>
|
||||
/// Published after a user requests a fresh confirmation link. Handled by Features.Emails to send the
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Notifications;
|
||||
namespace Features.Users.Notifications;
|
||||
|
||||
/// <summary>
|
||||
/// Published after a new user registers. Handled by Features.Emails to send the registration
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using Domain.Entities;
|
||||
using Features.Auth.Repository;
|
||||
using Features.Users.Repository;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Queries.GetAllUsers;
|
||||
namespace Features.Users.Queries.GetAllUsers;
|
||||
|
||||
public class GetAllUsersHandler(IUserListRepository repository)
|
||||
: IRequestHandler<GetAllUsersQuery, IEnumerable<UserAccount>>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
using Domain.Entities;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Queries.GetAllUsers;
|
||||
namespace Features.Users.Queries.GetAllUsers;
|
||||
|
||||
/// <summary>
|
||||
/// Requests a page of user accounts, ordered by creation date descending.
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
using Domain.Entities;
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Repository;
|
||||
using Features.Users.Repository;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Queries.GetUserById;
|
||||
namespace Features.Users.Queries.GetUserById;
|
||||
|
||||
public class GetUserByIdHandler(IUserListRepository repository)
|
||||
: IRequestHandler<GetUserByIdQuery, UserAccount>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Domain.Entities;
|
||||
using MediatR;
|
||||
|
||||
namespace Features.Auth.Queries.GetUserById;
|
||||
namespace Features.Users.Queries.GetUserById;
|
||||
|
||||
public record GetUserByIdQuery(Guid UserAccountId) : IRequest<UserAccount>;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Domain.Entities;
|
||||
|
||||
namespace Features.Auth.Repository;
|
||||
namespace Features.Users.Repository;
|
||||
|
||||
/// <summary>
|
||||
/// Read access for user account listing. Everything else on user accounts (lookup by
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Domain.Entities;
|
||||
|
||||
namespace Features.Auth.Repository;
|
||||
namespace Features.Users.Repository;
|
||||
|
||||
/// <summary>
|
||||
/// Repository for user profile records and their avatars.
|
||||
|
||||
@@ -3,7 +3,7 @@ using Dapper;
|
||||
using Database.Connection;
|
||||
using Domain.Entities;
|
||||
|
||||
namespace Features.Auth.Repository;
|
||||
namespace Features.Users.Repository;
|
||||
|
||||
/// <summary>
|
||||
/// Dapper-based implementation of <see cref="IUserListRepository" />.
|
||||
|
||||
@@ -4,7 +4,7 @@ using Database.Connection;
|
||||
using Domain.Entities;
|
||||
using Domain.Exceptions;
|
||||
|
||||
namespace Features.Auth.Repository;
|
||||
namespace Features.Users.Repository;
|
||||
|
||||
/// <summary>
|
||||
/// Dapper-based implementation of <see cref="IUserProfileRepository" />.
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using System.Security.Claims;
|
||||
|
||||
namespace Features.Auth.Services;
|
||||
namespace Features.Users.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Identifies the kind of token being generated or validated.
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Security.Claims;
|
||||
using Domain.Exceptions;
|
||||
using Features.Auth.Identity;
|
||||
using Features.Users.Identity;
|
||||
using Infrastructure.Configuration;
|
||||
using Infrastructure.Jwt;
|
||||
using Microsoft.AspNetCore.Identity;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
|
||||
namespace Features.Auth.Services;
|
||||
namespace Features.Users.Services;
|
||||
|
||||
/// <summary>
|
||||
/// Default implementation of <see cref="ITokenService" /> that generates and validates JWTs
|
||||
|
||||
Reference in New Issue
Block a user