MqttApps/mqttApi/src/Mqtt.App.api/Controllers/UserController.cs

181 lines
7.3 KiB
C#

using Mqtt.App.Application.Exceptions;
using Mqtt.App.Application.Features;
using Mqtt.App.Application.Persistencia.user.commands.CreateUser;
using Mqtt.App.Application.Persistencia.user.commands.DeleteUser;
using Mqtt.App.Application.Persistencia.user.commands.UpdateUser;
using Mqtt.App.Application.Persistencia.user.Queries.GetAllUser;
using Mqtt.App.Application.Persistencia.user.Queries.GetUserById;
using Mqtt.App.Application.Persistencia.user.Queries.GetUserByPassAndName;
using FluentValidation;
using Microsoft.AspNetCore.Authorization;
//using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
//using System.Web.Http;
namespace Mqtt.App.api.Controllers
{
[Authorize]
[Route("api/v1/User")]
[ApiController]
[TypeFilter(typeof(ExceptionManager))]//captura errores de todo el controller
public class UserController : ControllerBase
{
/*public UserController()
{
}*/
[AllowAnonymous]//no securizada
[HttpGet("test")]
public async Task<IActionResult> test()
{
//var n=int.Parse("h");
return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, "{}", "Ejecucion exitosa"));
}
[HttpGet]
public async Task<IActionResult> GetAll(
[FromServices] IGetAllUserQuery service
)
{
var data = await service.Execute();
if(data==null|| data.Count<=0)
return StatusCode(StatusCodes.Status404NotFound, ResponseApiService.Response(StatusCodes.Status404NotFound, data));
return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data));
}
[HttpGet("{userId}")]
public async Task<IActionResult> Getuser(
int userId,
[FromServices] IGetUserByIdQuery service
)
{
if (userId <= 0)
{
return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest));
}
var data = await service.Execute(userId);
if (data == null)
return StatusCode(StatusCodes.Status404NotFound, ResponseApiService.Response(StatusCodes.Status404NotFound, data));
return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data));
}
[HttpGet("{userName}/{password}")]
public async Task<IActionResult> Getuser(
string userName,
string password,
[FromServices] IGetUserByPassAndNameQuery service,
[FromServices] IValidator<(string, string)> validador
)
{
var validacion = await validador.ValidateAsync(( userName, password));
if (!validacion.IsValid)
return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest, validacion.Errors));
/*
if (userName==null || userName.Length <= 0|| password == null || password.Length <= 0)
{
return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest));
}*/
var data = await service.Execute(password,userName);
if (data == null)
return StatusCode(StatusCodes.Status404NotFound, ResponseApiService.Response(StatusCodes.Status404NotFound, data));
return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data));
}
[HttpGet("login")]//se pasa parametros con ?userName=nombre&password=pass
public async Task<IActionResult> Getuser2(
[FromQuery] string userName,
[FromQuery] string password,
[FromServices] IGetUserByPassAndNameQuery service,
[FromServices] IValidator<(string, string)> validador
)
{
var validacion = await validador.ValidateAsync((userName, password));
if (!validacion.IsValid)
return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest, validacion.Errors));
var data = await service.Execute(password, userName);
if (data == null)
return StatusCode(StatusCodes.Status404NotFound, ResponseApiService.Response(StatusCodes.Status404NotFound, data));
return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data));
}
[HttpPost]
public async Task<IActionResult> Create(
[FromBody] CreateUserModel model,
[FromServices] IcreateUserCommand createUserCommand,
[FromServices] IValidator<CreateUserModel> validador
)
{
var validacion = await validador.ValidateAsync(model);
if(!validacion.IsValid)
return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest, validacion.Errors));
var data = await createUserCommand.Execute(model);
//var n=int.Parse("h");
return StatusCode(StatusCodes.Status201Created, ResponseApiService.Response(StatusCodes.Status201Created, data));
}
[HttpPut]
public async Task<IActionResult> Update(
[FromBody] UpdateUserModel model,
[FromServices] IupdateUserCommand updateUserCommand,
[FromServices] IValidator<UpdateUserModel> validador
)
{
var validacion = await validador.ValidateAsync(model);
if (!validacion.IsValid)
return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest, validacion.Errors));
var data = await updateUserCommand.Execute(model);
//var n=int.Parse("h");
return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data));
}
//falta hacerlo en servicio-------------------------
[HttpPatch]
public async Task<IActionResult> UpdateParcial(
[FromBody] UpdateUserModel model,
[FromServices] IupdateUserCommand updateUserCommand
)
{
var data = await updateUserCommand.Execute(model);
//var n=int.Parse("h");
return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data));
}
[HttpDelete("{userId}")]//parametro por url
public async Task<IActionResult> borrar(
int userId,
[FromServices] IDeleteUserCommand servicio
)
{
//validacion---------------------
if(userId<=0)
{
return StatusCode(StatusCodes.Status400BadRequest, ResponseApiService.Response(StatusCodes.Status400BadRequest));
}
var data = await servicio.Execute(userId);
if(!data)
return StatusCode(StatusCodes.Status404NotFound, ResponseApiService.Response(StatusCodes.Status404NotFound, data));
//var n=int.Parse("h");
return StatusCode(StatusCodes.Status200OK, ResponseApiService.Response(StatusCodes.Status200OK, data));
}
}
}