Структура
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
using Knot.Shared.Kernel;
|
||||
using Knot.Modules.Auth.Contracts.Domain;
|
||||
using Knot.Modules.Auth.Contracts.Application.Auth.DTOs;
|
||||
using Knot.Contracts.Auth.Domain;
|
||||
using Knot.Contracts.Auth.Application.Auth.DTOs;
|
||||
|
||||
namespace Knot.Modules.Auth.Application.Users.GetMe;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Knot.Modules.Auth.Contracts.Domain;
|
||||
using Knot.Modules.Auth.Contracts.Application.Abstractions;
|
||||
using Knot.Modules.Auth.Contracts.Application.Auth.DTOs;
|
||||
using Knot.Contracts.Auth.Domain;
|
||||
using Knot.Contracts.Auth.Application.Abstractions;
|
||||
using Knot.Contracts.Auth.Application.Auth.DTOs;
|
||||
using Knot.Shared.Kernel;
|
||||
using BCrypt.Net;
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
using Knot.Modules.Auth.Contracts.Domain;
|
||||
using Knot.Modules.Auth.Contracts.Application.Abstractions;
|
||||
using Knot.Modules.Auth.Contracts.Application.Auth.DTOs;
|
||||
using Knot.Contracts.Auth.Domain;
|
||||
using Knot.Contracts.Auth.Application.Abstractions;
|
||||
using Knot.Contracts.Auth.Application.Auth.DTOs;
|
||||
using Knot.Modules.Auth.Domain;
|
||||
using Knot.Shared.Kernel;
|
||||
using Knot.Modules.Settings.Contracts.Application.Abstractions;
|
||||
using Knot.Modules.Settings.Contracts.Application.DTOs;
|
||||
using Knot.Contracts.Settings.Application.Abstractions;
|
||||
using Knot.Contracts.Settings.Application.DTOs;
|
||||
using BCrypt.Net;
|
||||
|
||||
namespace Knot.Modules.Auth.Application.Users.Register;
|
||||
|
||||
/// <summary>
|
||||
/// Команда для регистрации нового пользователя.
|
||||
/// Êîìàíäà äëÿ ðåãèñòðàöèè íîâîãî ïîëüçîâàòåëÿ.
|
||||
/// </summary>
|
||||
public sealed record RegisterUserCommand(
|
||||
string Username,
|
||||
@@ -20,7 +20,7 @@ public sealed record RegisterUserCommand(
|
||||
string? Bio) : ICommand<AuthResponseDto>;
|
||||
|
||||
/// <summary>
|
||||
/// Обработчик команды регистрации.
|
||||
/// Îáðàáîò÷èê êîìàíäû ðåãèñòðàöèè.
|
||||
/// </summary>
|
||||
internal sealed class RegisterUserCommandHandler : ICommandHandler<RegisterUserCommand, AuthResponseDto>
|
||||
{
|
||||
@@ -48,16 +48,16 @@ internal sealed class RegisterUserCommandHandler : ICommandHandler<RegisterUserC
|
||||
return Result.Failure<AuthResponseDto>(AuthErrors.IdentityRegistrationDisabled);
|
||||
}
|
||||
|
||||
// 1. Проверка уникальности username
|
||||
// 1. Ïðîâåðêà óíèêàëüíîñòè username
|
||||
if (!await _userRepository.IsUsernameUniqueAsync(request.Username, cancellationToken))
|
||||
{
|
||||
return Result.Failure<AuthResponseDto>(AuthErrors.IdentityUsernameNotUnique);
|
||||
}
|
||||
|
||||
// 2. Хеширование пароля
|
||||
// 2. Õåøèðîâàíèå ïàðîëÿ
|
||||
string passwordHash = BCrypt.Net.BCrypt.HashPassword(request.Password);
|
||||
|
||||
// 3. Создание сущности
|
||||
// 3. Ñîçäàíèå ñóùíîñòè
|
||||
var user = User.Create(
|
||||
request.Username,
|
||||
passwordHash,
|
||||
@@ -65,7 +65,7 @@ internal sealed class RegisterUserCommandHandler : ICommandHandler<RegisterUserC
|
||||
request.Email,
|
||||
request.Bio);
|
||||
|
||||
// 4. Сохранение - используем метод с Domain User
|
||||
// 4. Ñîõðàíåíèå - èñïîëüçóåì ìåòîä ñ Domain User
|
||||
var repoWithDomainUserAdd = _userRepository as Infrastructure.Persistence.UserRepository;
|
||||
repoWithDomainUserAdd?.Add(user);
|
||||
|
||||
|
||||
@@ -2,9 +2,9 @@ using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Knot.Modules.Auth.Infrastructure.Persistence;
|
||||
using Knot.Modules.Auth.Contracts.Domain;
|
||||
using Knot.Modules.Auth.Contracts.Domain;
|
||||
using Knot.Modules.Auth.Contracts.Application.Abstractions;
|
||||
using Knot.Contracts.Auth.Domain;
|
||||
using Knot.Contracts.Auth.Domain;
|
||||
using Knot.Contracts.Auth.Application.Abstractions;
|
||||
using Knot.Modules.Auth.Infrastructure.Authentication;
|
||||
using Knot.Shared.Kernel;
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
using Knot.Shared.Kernel;
|
||||
using Knot.Shared.Kernel;
|
||||
using Knot.Shared.Kernel.Events;
|
||||
using Knot.Modules.Auth.Contracts.Domain;
|
||||
using Knot.Contracts.Auth.Domain;
|
||||
|
||||
namespace Knot.Modules.Auth.Domain;
|
||||
|
||||
/// <summary>
|
||||
/// Сущность пользователя в контексте идентификации (Identity).
|
||||
/// Ñóùíîñòü ïîëüçîâàòåëÿ â êîíòåêñòå èäåíòèôèêàöèè (Identity).
|
||||
/// </summary>
|
||||
public sealed class User : AggregateRoot<Guid>
|
||||
{
|
||||
@@ -44,7 +44,7 @@ public sealed class User : AggregateRoot<Guid>
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Фабричный метод для создания нового пользователя.
|
||||
/// Ôàáðè÷íûé ìåòîä äëÿ ñîçäàíèÿ íîâîãî ïîëüçîâàòåëÿ.
|
||||
/// </summary>
|
||||
public static User Create(string username, string passwordHash, string displayName, string? email = null, string? bio = null)
|
||||
{
|
||||
@@ -54,7 +54,7 @@ public sealed class User : AggregateRoot<Guid>
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Создает "теневого" пользователя для контакта с другого сервера.
|
||||
/// Ñîçäàåò "òåíåâîãî" ïîëüçîâàòåëÿ äëÿ êîíòàêòà ñ äðóãîãî ñåðâåðà.
|
||||
/// </summary>
|
||||
public static User CreateExternal(Guid id, string username, string displayName, string domain, string? avatar = null)
|
||||
{
|
||||
|
||||
@@ -3,8 +3,9 @@ using System.Security.Claims;
|
||||
using System.Text;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using Knot.Modules.Auth.Contracts.Application.Abstractions;
|
||||
using Knot.Modules.Auth.Domain;
|
||||
using Knot.Contracts.Auth.Application.Abstractions;
|
||||
using Knot.Contracts.Auth.Domain;
|
||||
using DomainUser = Knot.Modules.Auth.Domain.User;
|
||||
|
||||
namespace Knot.Modules.Auth.Infrastructure.Authentication;
|
||||
|
||||
@@ -75,7 +76,7 @@ internal sealed class JwtTokenProvider : IJwtTokenProvider
|
||||
return new JwtSecurityTokenHandler().WriteToken(token);
|
||||
}
|
||||
|
||||
public string Generate(User user)
|
||||
public string Generate(UserContract user)
|
||||
{
|
||||
return Generate(user.Id, user.Username, user.DisplayName, user.Avatar);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
using MediatR;
|
||||
using MediatR;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.EntityFrameworkCore.Diagnostics;
|
||||
using Knot.Modules.Auth.Contracts.Application.Abstractions;
|
||||
using Knot.Modules.Auth.Contracts.Domain;
|
||||
using Knot.Contracts.Auth.Application.Abstractions;
|
||||
using Knot.Contracts.Auth.Domain;
|
||||
using Knot.Shared.Kernel;
|
||||
using Knot.Shared.Kernel.Security;
|
||||
using DomainUser = Knot.Modules.Auth.Domain.User;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Knot.Modules.Auth.Contracts.Domain;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Knot.Contracts.Auth.Domain;
|
||||
using Knot.Modules.Auth.Domain;
|
||||
|
||||
namespace Knot.Modules.Auth.Infrastructure.Persistence;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Knot.Shared.Kernel;
|
||||
using Knot.Modules.Auth.Contracts.Domain;
|
||||
using Knot.Modules.Auth.Contracts.Domain;
|
||||
using Knot.Contracts.Auth.Domain;
|
||||
using Knot.Contracts.Auth.Domain;
|
||||
|
||||
namespace Knot.Modules.Auth.Infrastructure.Services;
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net10.0</TargetFramework>
|
||||
@@ -8,9 +8,9 @@
|
||||
|
||||
<ItemGroup>
|
||||
<ProjectReference Include="..\..\Shared\Knot.Shared.Kernel\Knot.Shared.Kernel.csproj" />
|
||||
<ProjectReference Include="..\..\Contracts\Knot.Modules.Auth.Contracts\Knot.Modules.Auth.Contracts.csproj" />
|
||||
<ProjectReference Include="..\..\Contracts\Knot.Modules.Profiles.Contracts\Knot.Modules.Profiles.Contracts.csproj" />
|
||||
<ProjectReference Include="..\..\Contracts\Knot.Modules.Settings.Contracts\Knot.Modules.Settings.Contracts.csproj" />
|
||||
<ProjectReference Include="..\..\Contracts\Auth\Knot.Contracts.Auth.csproj" />
|
||||
<ProjectReference Include="..\..\Contracts\Profiles\Knot.Contracts.Profiles.csproj" />
|
||||
<ProjectReference Include="..\..\Contracts\Settings\Knot.Contracts.Settings.csproj" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -33,6 +33,3 @@
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ namespace Knot.Modules.Auth.Migrations
|
||||
|
||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("Knot.Modules.Auth.Contracts.Domain.User", b =>
|
||||
modelBuilder.Entity("Knot.Contracts.Auth.Domain.User", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
|
||||
+1
-1
@@ -27,7 +27,7 @@ namespace Knot.Modules.Auth.Migrations
|
||||
|
||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("Knot.Modules.Auth.Contracts.Domain.User", b =>
|
||||
modelBuilder.Entity("Knot.Contracts.Auth.Domain.User", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
|
||||
+1
-1
@@ -26,7 +26,7 @@ namespace Knot.Modules.Auth.Migrations
|
||||
|
||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("Knot.Modules.Auth.Contracts.Domain.User", b =>
|
||||
modelBuilder.Entity("Knot.Contracts.Auth.Domain.User", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
|
||||
@@ -23,7 +23,7 @@ namespace Knot.Modules.Auth.Migrations
|
||||
|
||||
NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
|
||||
|
||||
modelBuilder.Entity("Knot.Modules.Auth.Contracts.Domain.User", b =>
|
||||
modelBuilder.Entity("Knot.Contracts.Auth.Domain.User", b =>
|
||||
{
|
||||
b.Property<Guid>("Id")
|
||||
.ValueGeneratedOnAdd()
|
||||
|
||||
Reference in New Issue
Block a user