Add UserRole controller + bits and pieces
This commit is contained in:
@@ -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);
|
||||
|
||||
15
src/Imprink.Application/Users/GetUserRolesHandler.cs
Normal file
15
src/Imprink.Application/Users/GetUserRolesHandler.cs
Normal 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);;
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,6 @@
|
||||
using Imprink.Domain.Entities.Product;
|
||||
|
||||
namespace Imprink.Domain.Repositories;
|
||||
namespace Imprink.Domain.Repositories.Products;
|
||||
|
||||
public interface ICategoryRepository
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
using Imprink.Domain.Entities.Product;
|
||||
|
||||
namespace Imprink.Domain.Repositories;
|
||||
namespace Imprink.Domain.Repositories.Products;
|
||||
|
||||
public interface IProductVariantRepository
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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
|
||||
{
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
23
src/Imprink.WebApi/Controllers/Users/UserRoleController.cs
Normal file
23
src/Imprink.WebApi/Controllers/Users/UserRoleController.cs
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user