Add UserRole controller + bits and pieces

This commit is contained in:
lumijiez
2025-06-10 20:17:31 +03:00
parent 9c2257581d
commit 2fd188ad57
14 changed files with 62 additions and 13 deletions

View File

@@ -1,4 +1,5 @@
using Imprink.Domain.Repositories;
using Imprink.Domain.Repositories.Products;
namespace Imprink.Application;
@@ -8,6 +9,8 @@ public interface IUnitOfWork
public ICategoryRepository CategoryRepository { get; }
public IProductVariantRepository ProductVariantRepository { get; }
public IUserRepository UserRepository { get; }
public IUserRoleRepository UserRoleRepository { get; }
public IRoleRepository RoleRepository { get; }
Task SaveAsync(CancellationToken cancellationToken = default);
Task BeginTransactionAsync(CancellationToken cancellationToken = default);

View File

@@ -0,0 +1,15 @@
using Imprink.Domain.Entities.Users;
using MediatR;
namespace Imprink.Application.Users;
public record GetUserRolesCommand(string Sub) : IRequest<IEnumerable<Role>>;
public class GetUserRolesHandler(IUnitOfWork uw): IRequestHandler<GetUserRolesCommand, IEnumerable<Role>>
{
public async Task<IEnumerable<Role>> Handle(GetUserRolesCommand request, CancellationToken cancellationToken)
{
if (await uw.UserRepository.UserExistsAsync(request.Sub, cancellationToken)) return [];
return await uw.UserRoleRepository.GetUserRolesAsync(request.Sub, cancellationToken);;
}
}

View File

@@ -1,6 +1,6 @@
using Imprink.Domain.Entities.Product;
namespace Imprink.Domain.Repositories;
namespace Imprink.Domain.Repositories.Products;
public interface ICategoryRepository
{

View File

@@ -1,7 +1,7 @@
using Imprink.Domain.Entities.Product;
using Imprink.Domain.Models;
namespace Imprink.Domain.Repositories;
namespace Imprink.Domain.Repositories.Products;
public interface IProductRepository
{

View File

@@ -1,6 +1,6 @@
using Imprink.Domain.Entities.Product;
namespace Imprink.Domain.Repositories;
namespace Imprink.Domain.Repositories.Products;
public interface IProductVariantRepository
{

View File

@@ -1,9 +1,9 @@
using Imprink.Domain.Entities.Product;
using Imprink.Domain.Repositories;
using Imprink.Domain.Repositories.Products;
using Imprink.Infrastructure.Database;
using Microsoft.EntityFrameworkCore;
namespace Imprink.Infrastructure.Repositories;
namespace Imprink.Infrastructure.Repositories.Products;
public class CategoryRepository(ApplicationDbContext context) : ICategoryRepository
{

View File

@@ -1,10 +1,11 @@
using Imprink.Domain.Entities.Product;
using Imprink.Domain.Models;
using Imprink.Domain.Repositories;
using Imprink.Domain.Repositories.Products;
using Imprink.Infrastructure.Database;
using Microsoft.EntityFrameworkCore;
namespace Imprink.Infrastructure.Repositories;
namespace Imprink.Infrastructure.Repositories.Products;
public class ProductRepository(ApplicationDbContext context) : IProductRepository
{

View File

@@ -1,9 +1,9 @@
using Imprink.Domain.Entities.Product;
using Imprink.Domain.Repositories;
using Imprink.Domain.Repositories.Products;
using Imprink.Infrastructure.Database;
using Microsoft.EntityFrameworkCore;
namespace Imprink.Infrastructure.Repositories;
namespace Imprink.Infrastructure.Repositories.Products;
public class ProductVariantRepository(ApplicationDbContext context) : IProductVariantRepository
{

View File

@@ -3,7 +3,7 @@ using Imprink.Domain.Repositories;
using Imprink.Infrastructure.Database;
using Microsoft.EntityFrameworkCore;
namespace Imprink.Infrastructure.Repositories;
namespace Imprink.Infrastructure.Repositories.Users;
public class RoleRepository(ApplicationDbContext context) : IRoleRepository
{

View File

@@ -4,7 +4,7 @@ using Imprink.Domain.Repositories;
using Imprink.Infrastructure.Database;
using Microsoft.EntityFrameworkCore;
namespace Imprink.Infrastructure.Repositories;
namespace Imprink.Infrastructure.Repositories.Users;
public class UserRepository(ApplicationDbContext context) : IUserRepository
{

View File

@@ -3,7 +3,7 @@ using Imprink.Domain.Repositories;
using Imprink.Infrastructure.Database;
using Microsoft.EntityFrameworkCore;
namespace Imprink.Infrastructure.Repositories;
namespace Imprink.Infrastructure.Repositories.Users;
public class UserRoleRepository(ApplicationDbContext context) : IUserRoleRepository
{

View File

@@ -1,7 +1,7 @@
using Imprink.Application;
using Imprink.Domain.Repositories;
using Imprink.Domain.Repositories.Products;
using Imprink.Infrastructure.Database;
using Microsoft.Identity.Client;
namespace Imprink.Infrastructure;
@@ -10,12 +10,16 @@ public class UnitOfWork(
IProductRepository productRepository,
IProductVariantRepository productVariantRepository,
ICategoryRepository categoryRepository,
IUserRepository userRepository) : IUnitOfWork
IUserRepository userRepository,
IUserRoleRepository userRoleRepository,
IRoleRepository roleRepository) : IUnitOfWork
{
public IProductRepository ProductRepository => productRepository;
public IProductVariantRepository ProductVariantRepository => productVariantRepository;
public ICategoryRepository CategoryRepository => categoryRepository;
public IUserRepository UserRepository => userRepository;
public IUserRoleRepository UserRoleRepository => userRoleRepository;
public IRoleRepository RoleRepository => roleRepository;
public async Task SaveAsync(CancellationToken cancellationToken = default)
{

View File

@@ -0,0 +1,23 @@
using System.Security.Claims;
using Imprink.Application.Users;
using MediatR;
using Microsoft.AspNetCore.Mvc;
namespace Imprink.WebApi.Controllers.Users;
[ApiController]
[Route("/api/users/roles")]
public class UserRoleController(IMediator mediator) : ControllerBase
{
//[Authorize]
[HttpGet("me")]
public async Task<IActionResult> GetMyRoles()
{
var claims = User.Claims as Claim[] ?? User.Claims.ToArray();
var sub = claims.FirstOrDefault(c => c.Type == ClaimTypes.NameIdentifier)?.Value ?? string.Empty;
var myRoles = await mediator.Send(new GetUserRolesCommand(sub));
return Ok(myRoles);
}
}

View File

@@ -4,9 +4,12 @@ using Imprink.Application;
using Imprink.Application.Products.Create;
using Imprink.Application.Validation.Models;
using Imprink.Domain.Repositories;
using Imprink.Domain.Repositories.Products;
using Imprink.Infrastructure;
using Imprink.Infrastructure.Database;
using Imprink.Infrastructure.Repositories;
using Imprink.Infrastructure.Repositories.Products;
using Imprink.Infrastructure.Repositories.Users;
using Imprink.WebApi.Filters;
using Imprink.WebApi.Middleware;
using Microsoft.AspNetCore.Authentication.JwtBearer;