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 logger, IUserService userService, IValidator createUserValidator) : ControllerBase { private readonly ILogger _logger = logger; private readonly IUserService _userService = userService; private readonly IValidator _createUserValidator = createUserValidator; [HttpPost(Name = "CreateUser")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status400BadRequest)] public async Task> 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); } } } }