diff --git a/src/core/DigitalData.TaskFlow.Application/Features/Users/Queries/GetAuthorizedUsersQuery.cs b/src/core/DigitalData.TaskFlow.Application/Features/Users/Queries/GetAuthorizedUsersQuery.cs new file mode 100644 index 0000000..6c81a42 --- /dev/null +++ b/src/core/DigitalData.TaskFlow.Application/Features/Users/Queries/GetAuthorizedUsersQuery.cs @@ -0,0 +1,22 @@ +using DigitalData.TaskFlow.Application.Common.Interfaces; +using MediatR; + +namespace DigitalData.TaskFlow.Application.Features.Users.Queries; + +public sealed record GetAuthorizedUsersQuery : IRequest; + +public sealed record GetAuthorizedUsersResult(IEnumerable Meta, IEnumerable Wisagids); + +public sealed record GetAuthorizedUsersMeta(int? Code, string Message); + +public sealed class GetAuthorizedUsersQueryHandler(IUserRepository repo) : IRequestHandler +{ + public async Task Handle(GetAuthorizedUsersQuery request, CancellationToken cancellationToken) + { + var users = await repo.GetAuthorizedAsync(cancellationToken); + + return new GetAuthorizedUsersResult( + Meta: [new GetAuthorizedUsersMeta(Code: 0, Message: "OK")], + Wisagids: users.Select(x => x.WisagId)); + } +} diff --git a/src/presentation/DigitalData.TaskFlow.API/Controllers/UsersController.cs b/src/presentation/DigitalData.TaskFlow.API/Controllers/UsersController.cs new file mode 100644 index 0000000..a860daf --- /dev/null +++ b/src/presentation/DigitalData.TaskFlow.API/Controllers/UsersController.cs @@ -0,0 +1,36 @@ +using DigitalData.TaskFlow.Application.Features.Users.Queries; +using MediatR; +using Microsoft.AspNetCore.Mvc; + +namespace DigitalData.TaskFlow.API.Controllers; + +/// +/// +/// +/// +[ApiController] +[Route("api/users")] +public sealed class UsersController(ISender sender) : ControllerBase +{ + /// + /// + /// + /// + /// + [HttpGet("authorized")] + [ProducesResponseType(typeof(GetAuthorizedUsersResult), StatusCodes.Status200OK)] + [ProducesResponseType(typeof(GetAuthorizedUsersResult), StatusCodes.Status401Unauthorized)] + [ProducesResponseType(typeof(GetAuthorizedUsersResult), StatusCodes.Status500InternalServerError)] + public async Task GetAuthorizedAsync(CancellationToken cancellationToken) + { + var result = await sender.Send(new GetAuthorizedUsersQuery(), cancellationToken); + var code = result.Meta.FirstOrDefault()?.Code; + + return code switch + { + 0 => Ok(result), + 4 => Unauthorized(result), + _ => StatusCode(StatusCodes.Status500InternalServerError, result) + }; + } +}