40 lines
1.6 KiB
C#

using FluentValidation;
using FluentValidation.Results;
using Microsoft.AspNetCore.Mvc;
using UserManager.Application.Features.Users.Interfaces;
using UserManager.Application.Features.Users.Requests;
using UserManager.Application.Features.Users.Responses;
namespace UserManager.API.Controllers
{
[ApiController]
[Route("api/[controller]")]
public class UserController(ILogger<UserController> logger, IUserService userService, IValidator<CreateUserRequestDto> createUserValidator) : ControllerBase
{
private readonly ILogger<UserController> _logger = logger;
private readonly IUserService _userService = userService;
private readonly IValidator<CreateUserRequestDto> _createUserValidator = createUserValidator;
[HttpPost(Name = "CreateUser")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
public async Task<ActionResult<CreateUserResponseDto>> CreateUserAsync(CreateUserRequestDto request)
{
_logger.LogInformation("Creating user with first name {FirstName} and last name {LastName}", request.FirstName, request.LastName);
ValidationResult? validationResult = await _createUserValidator.ValidateAsync(request);
if (!validationResult.IsValid)
{
return BadRequest(validationResult.ToDictionary());
}
else
{
CreateUserResponseDto response = await _userService.CreateUserAsync(request);
return Ok(response);
}
}
}
}