// ------------------------------------------------------------------------------------
// <copyright file="PrestamosUsuariosController.cs" company="Universidad Distrital">
// Copyright (c) Universidad Distrital. All rights reserved.
// </copyright>
// <author>Camilo Prieto</author>
// ------------------------------------------------------------------------------------
namespace Biblioteca.API.Controllers
{
	using System;
	using System.Collections.Generic;
	using System.Threading.Tasks;
	using Utilitarios.APINet.Clases.Ejecucion;
	using UtilitariosNet.Clases.Comunes.Entidades;
	using UtilitariosNet.Clases.Mapeador.Extensiones;
	using Biblioteca.API.Models.Repositorio;
	using Biblioteca.IC.Acciones.Repositorio;
	using Biblioteca.Negocio.Clases.BL;
	using Microsoft.AspNetCore.Mvc;
	
	/// <summary>
	/// Clase con las capaciades Rest de la entidad PrestamosUsuarios
	/// </summary>
	[Route("api/PrestamosUsuarios")]
	public class PrestamosUsuariosController : AccesoComunAPI
	{


		/// <summary>
		/// Objeto para negocio PrestamosUsuarios
		/// </summary>
		private Lazy<IPrestamosUsuariosNegocioAccion> negocioPrestamosUsuarios;

		
		/// <summary>
		/// Inicializa una nueva instancia de la clase PrestamosUsuariosController
		/// </summary>
		public PrestamosUsuariosController()
		{
			this.negocioPrestamosUsuarios = new Lazy<IPrestamosUsuariosNegocioAccion>(
										() => new PrestamosUsuariosBL());
		}
		
		/// <summary>
		/// Metodo consultar lista prestamosUsuarios
		/// </summary>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		[HttpGet]
		[Route("ConsultarListaPrestamosUsuarios")]
		public async Task<Respuesta<PrestamosUsuarios>> ConsultarListaPrestamosUsuarios()
		{
			return await this.EjecutarTransaccionAPI<Task<Respuesta<PrestamosUsuarios>>, PrestamosUsuariosController>(async () =>
			{
				return Mapeador.MapearObjetoPorJson<Respuesta<PrestamosUsuarios>>(await negocioPrestamosUsuarios.Value.ConsultarListaPrestamosUsuariosAsync());
			});
		}
		
		/// <summary>
		/// Metodo consultar por llave prestamosUsuarios
		/// </summary>
		/// <param name="prestamosUsuarios">Entidad a consultar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		[HttpPost]
		[Route("ConsultarPrestamosUsuariosLlave")]
		public async Task<Respuesta<PrestamosUsuarios>> ConsultarPrestamosUsuariosLlave(PrestamosUsuarios prestamosUsuarios)
		{
			return await this.EjecutarTransaccionAPI<Task<Respuesta<PrestamosUsuarios>>, PrestamosUsuariosController>(async () =>
			{
				return Mapeador.MapearObjetoPorJson<Respuesta<PrestamosUsuarios>>(await negocioPrestamosUsuarios.Value.ConsultarPrestamosUsuariosLlaveAsync(prestamosUsuarios));
			});
		}
		
		/// <summary>
		/// Metodo guardar prestamosUsuarios
		/// </summary>
		/// <param name="prestamosUsuarios">Entidad a guardar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		[HttpPost]
		[Route("GuardarPrestamosUsuarios")]
		public async Task<Respuesta<PrestamosUsuarios>> GuardarPrestamosUsuarios(PrestamosUsuarios prestamosUsuarios)
		{
			return await this.EjecutarTransaccionAPI<Task<Respuesta<PrestamosUsuarios>>, PrestamosUsuariosController>(async () =>
			{
				return Mapeador.MapearObjetoPorJson<Respuesta<PrestamosUsuarios>>(await negocioPrestamosUsuarios.Value.GuardarPrestamosUsuariosAsync(prestamosUsuarios));
			});
		}
		
		/// <summary>
		/// Metodo editar prestamosUsuarios
		/// </summary>
		/// <param name="prestamosUsuarios">Entidad a editar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		[HttpPut]
		[Route("EditarPrestamosUsuarios")]
		public async Task<Respuesta<PrestamosUsuarios>> EditarPrestamosUsuarios(PrestamosUsuarios prestamosUsuarios)
		{
			return await this.EjecutarTransaccionAPI<Task<Respuesta<PrestamosUsuarios>>, PrestamosUsuariosController>(async () =>
			{
				return Mapeador.MapearObjetoPorJson<Respuesta<PrestamosUsuarios>>(await negocioPrestamosUsuarios.Value.EditarPrestamosUsuariosAsync(prestamosUsuarios));
			});
		}
		
		/// <summary>
		/// Metodo eliminar prestamosUsuarios
		/// </summary>
		/// <param name="prestamosUsuarios">Entidad a eliminar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		[HttpDelete]
		[Route("EliminarPrestamosUsuarios")]
		public async Task<Respuesta<PrestamosUsuarios>> EliminarPrestamosUsuarios(PrestamosUsuarios prestamosUsuarios)
		{
			return await this.EjecutarTransaccionAPI<Task<Respuesta<PrestamosUsuarios>>, PrestamosUsuariosController>(async () =>
			{
				return Mapeador.MapearObjetoPorJson<Respuesta<PrestamosUsuarios>>(await negocioPrestamosUsuarios.Value.EliminarPrestamosUsuariosAsync(prestamosUsuarios));
			});
		}
	}
}

