// ------------------------------------------------------------------------------------
// <copyright file="IPrestamosUsuariosAccion.cs" company="Universidad Distrital">
// Copyright (c) Universidad Distrital. All rights reserved.
// </copyright>
// <author>Camilo Prieto</author>
// ------------------------------------------------------------------------------------
namespace Biblioteca.IC.Acciones.Repositorio
{
	using System;
	using System.Collections.Generic;
	using System.Linq.Expressions;
	using System.Threading.Tasks;
	using UtilitariosNet.Clases.Comunes.Entidades;
	using Biblioteca.IC.DTO.Repositorio;

	/// <summary>
	/// Interface que define las acciones que se implmentara en todas las capas de IPrestamosUsuariosAccion
	/// </summary>
	public interface IPrestamosUsuariosAccion
	{
		/// <summary>
		/// Metodo guardar prestamosUsuarios
		/// </summary>
		/// <param name="prestamosUsuarios">Entidad a guardar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		Task<Respuesta<IPrestamosUsuariosDTO>> GuardarPrestamosUsuariosAsync(IPrestamosUsuariosDTO prestamosUsuarios);
		/// <summary>
		/// Metodo Guardar lista prestamosUsuarios
		/// </summary>
		/// <param name="listaPrestamosUsuarios">Lista de entidades a guardar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		Task<Respuesta<IPrestamosUsuariosDTO>> GuardarListaPrestamosUsuariosAsync(List<IPrestamosUsuariosDTO> listaPrestamosUsuarios);
		/// <summary>
		/// Metodo editar prestamosUsuarios
		/// </summary>
		/// <param name="prestamosUsuarios">Entidad a editar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		Task<Respuesta<IPrestamosUsuariosDTO>> EditarPrestamosUsuariosAsync(IPrestamosUsuariosDTO prestamosUsuarios);
		/// <summary>
		/// Metodo consultar lista prestamosUsuarios
		/// </summary>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		Task<Respuesta<IPrestamosUsuariosDTO>> ConsultarListaPrestamosUsuariosAsync();
		/// <summary>
		/// Metodo consultar por llave prestamosUsuarios
		/// </summary>
		/// <param name="prestamosUsuarios">Entidad a consultar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		Task<Respuesta<IPrestamosUsuariosDTO>> ConsultarPrestamosUsuariosLlaveAsync(IPrestamosUsuariosDTO prestamosUsuarios);
		/// <summary>
		/// Metodo eliminar prestamosUsuarios
		/// </summary>
		/// <param name="prestamosUsuarios">Entidad a eliminar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		Task<Respuesta<IPrestamosUsuariosDTO>> EliminarPrestamosUsuariosAsync(IPrestamosUsuariosDTO prestamosUsuarios);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de repositorioIPrestamosUsuariosAccion
	/// </summary>
	public interface IPrestamosUsuariosRepositorioAccion:IPrestamosUsuariosAccion
	{
		/// <summary>
		/// Metodo editar prestamosUsuarios por query 
		/// </summary>
		/// <param name="filtro">Filtro de las entidades </param>
		/// <param name="valor">Entidad a mofificar</param>
		/// <param name="propiedades">Propiedades a modificar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		Task<Respuesta<IPrestamosUsuariosDTO>> EditarPorQueryPrestamosUsuariosAsync(Expression<Func<IPrestamosUsuariosDTO, bool>> filtro, IPrestamosUsuariosDTO valor, List<string> propiedades);
		/// <summary>
		/// Metodo consultar lista prestamosUsuarios por filtro 
		/// </summary>
		/// <param name="filtro">Filtro de las entidades </param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		Task<Respuesta<IPrestamosUsuariosDTO>> ConsultarListaPrestamosUsuariosPorFiltroAsync(Expression<Func<IPrestamosUsuariosDTO, bool>> filtro);
		/// <summary>
		/// Metodo editar  prestamosUsuarios por filtro 
		/// </summary>
		/// <param name="prestamosUsuarios">Entidad con los datos a editar</param>
		/// <param name="propiedades">Propiedades a modificar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		Task<Respuesta<IPrestamosUsuariosDTO>> EditarPrestamosUsuariosPorFiltroAsync(IPrestamosUsuariosDTO prestamosUsuarios, params string[] propiedades);
		/// <summary>
		/// Metodo eliminar lista prestamosUsuarios 
		/// </summary>
		/// <param name="lista">Lista de entidad a eliminar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		Task<Respuesta<IPrestamosUsuariosDTO>> EliminarListaPrestamosUsuariosAsync(List<IPrestamosUsuariosDTO> lista);
		/// <summary>
		/// Metodo editar prestamosUsuarios lista 
		/// </summary>
		/// <param name="lista"> Lista con entidades a modificar</param>
		/// <returns>Respuesta tipo PrestamosUsuarios </returns>
		Task<Respuesta<IPrestamosUsuariosDTO>> EditarListaPrestamosUsuariosAsync(List<IPrestamosUsuariosDTO> lista);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de negocioIPrestamosUsuariosAccion
	/// </summary>
	public interface IPrestamosUsuariosNegocioAccion:IPrestamosUsuariosAccion
	{
	}
}
