diff --git a/src/Imprink.Application/Service/ICurrentUserService.cs b/src/Imprink.Application/Service/ICurrentUserService.cs new file mode 100644 index 0000000..bd6ad1e --- /dev/null +++ b/src/Imprink.Application/Service/ICurrentUserService.cs @@ -0,0 +1,6 @@ +namespace Imprink.Application.Service; + +public interface ICurrentUserService +{ + string? GetCurrentUserId(); +} \ No newline at end of file diff --git a/src/Imprink.Application/Users/Dtos/UserDto.cs b/src/Imprink.Application/Users/Dtos/UserDto.cs new file mode 100644 index 0000000..256629e --- /dev/null +++ b/src/Imprink.Application/Users/Dtos/UserDto.cs @@ -0,0 +1,23 @@ +using Imprink.Domain.Entities.Orders; +using Imprink.Domain.Entities.Users; + +namespace Imprink.Application.Users.Dtos; + +public class UserDto +{ + public string Id { get; set; } = null!; + public required string Name { get; set; } + public required string Nickname { get; set; } + public required string Email { get; set; } + public bool EmailVerified { get; set; } + public string? FullName { get; set; } + public string? PhoneNumber { get; set; } + public required bool IsActive { get; set; } + + public virtual ICollection
Addresses { get; set; } = new List
(); + public virtual ICollection UserRoles { get; set; } = new List(); + public virtual ICollection Orders { get; set; } = new List(); + + public Address? DefaultAddress => Addresses.FirstOrDefault(a => a is { IsDefault: true, IsActive: true }); + public IEnumerable Roles => UserRoles.Select(ur => ur.Role); +} \ No newline at end of file diff --git a/src/Imprink.Application/Users/SetUserPhoneHandler.cs b/src/Imprink.Application/Users/SetUserPhoneHandler.cs new file mode 100644 index 0000000..5b2cfe3 --- /dev/null +++ b/src/Imprink.Application/Users/SetUserPhoneHandler.cs @@ -0,0 +1,11 @@ +using Imprink.Application.Users.Dtos; +using MediatR; + +namespace Imprink.Application.Users; + +public record SetUserPhoneCommand(string Sub, Guid RoleId) : IRequest; + +public class SetUserPhoneHandler +{ + +} \ No newline at end of file diff --git a/src/Imprink.Domain/Entities/Users/User.cs b/src/Imprink.Domain/Entities/Users/User.cs index 19d8ed1..d1a1a4d 100644 --- a/src/Imprink.Domain/Entities/Users/User.cs +++ b/src/Imprink.Domain/Entities/Users/User.cs @@ -8,7 +8,6 @@ public class User public required string Name { get; set; } public required string Nickname { get; set; } public required string Email { get; set; } - public bool EmailVerified { get; set; } public string? FullName { get; set; } public string? PhoneNumber { get; set; } diff --git a/src/Imprink.Infrastructure/Imprink.Infrastructure.csproj b/src/Imprink.Infrastructure/Imprink.Infrastructure.csproj index fc58356..8650de1 100644 --- a/src/Imprink.Infrastructure/Imprink.Infrastructure.csproj +++ b/src/Imprink.Infrastructure/Imprink.Infrastructure.csproj @@ -8,6 +8,7 @@ + diff --git a/src/Imprink.Infrastructure/Services/CurrentUserService.cs b/src/Imprink.Infrastructure/Services/CurrentUserService.cs new file mode 100644 index 0000000..6579e54 --- /dev/null +++ b/src/Imprink.Infrastructure/Services/CurrentUserService.cs @@ -0,0 +1,14 @@ +using System.Security.Claims; +using Imprink.Application.Service; +using Microsoft.AspNetCore.Http; + +namespace Imprink.Infrastructure.Services; + +public class CurrentUserService(IHttpContextAccessor httpContextAccessor) : ICurrentUserService +{ + public string? GetCurrentUserId() + { + return httpContextAccessor.HttpContext?.User?.FindFirst(ClaimTypes.NameIdentifier)?.Value + ?? httpContextAccessor.HttpContext?.User?.FindFirst("sub")?.Value; + } +} \ No newline at end of file diff --git a/src/Imprink.WebApi/Startup.cs b/src/Imprink.WebApi/Startup.cs index 60e1eae..3ea0697 100644 --- a/src/Imprink.WebApi/Startup.cs +++ b/src/Imprink.WebApi/Startup.cs @@ -2,6 +2,7 @@ using System.Security.Claims; using FluentValidation; using Imprink.Application; using Imprink.Application.Products.Create; +using Imprink.Application.Service; using Imprink.Application.Validation.Models; using Imprink.Domain.Repositories; using Imprink.Domain.Repositories.Products; @@ -10,6 +11,7 @@ using Imprink.Infrastructure; using Imprink.Infrastructure.Database; using Imprink.Infrastructure.Repositories.Products; using Imprink.Infrastructure.Repositories.Users; +using Imprink.Infrastructure.Services; using Imprink.WebApi.Filters; using Imprink.WebApi.Middleware; using Microsoft.AspNetCore.Authentication.JwtBearer; @@ -31,8 +33,11 @@ public static class Startup services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); services.AddScoped(); + + services.AddHttpContextAccessor(); services.AddDbContext(options => options.UseSqlServer(