Add CurrentUserService to access sub from context

This commit is contained in:
lumijiez
2025-06-11 00:01:50 +03:00
parent d4978dff15
commit 6a7bef80d0
7 changed files with 60 additions and 1 deletions

View File

@@ -0,0 +1,6 @@
namespace Imprink.Application.Service;
public interface ICurrentUserService
{
string? GetCurrentUserId();
}

View File

@@ -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<Address> Addresses { get; set; } = new List<Address>();
public virtual ICollection<UserRole> UserRoles { get; set; } = new List<UserRole>();
public virtual ICollection<Order> Orders { get; set; } = new List<Order>();
public Address? DefaultAddress => Addresses.FirstOrDefault(a => a is { IsDefault: true, IsActive: true });
public IEnumerable<Role> Roles => UserRoles.Select(ur => ur.Role);
}

View File

@@ -0,0 +1,11 @@
using Imprink.Application.Users.Dtos;
using MediatR;
namespace Imprink.Application.Users;
public record SetUserPhoneCommand(string Sub, Guid RoleId) : IRequest<UserRoleDto?>;
public class SetUserPhoneHandler
{
}

View File

@@ -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; }

View File

@@ -8,6 +8,7 @@
<ItemGroup>
<PackageReference Include="AutoMapper" Version="14.0.0" />
<PackageReference Include="Microsoft.AspNetCore.Http" Version="2.3.0" />
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="9.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="9.0.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.5">

View File

@@ -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;
}
}

View File

@@ -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,9 +33,12 @@ public static class Startup
services.AddScoped<IUserRepository, UserRepository>();
services.AddScoped<IUserRoleRepository, UserRoleRepository>();
services.AddScoped<IUnitOfWork, UnitOfWork>();
services.AddScoped<ICurrentUserService, CurrentUserService>();
services.AddScoped<Seeder>();
services.AddHttpContextAccessor();
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
builder.Configuration.GetConnectionString("DefaultConnection"),