// ------------------------------------------------------------------------------------
// <copyright file="IEditorialesAccion.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 IEditorialesAccion
	/// </summary>
	public interface IEditorialesAccion
	{
		/// <summary>
		/// Metodo guardar editoriales
		/// </summary>
		/// <param name="editoriales">Entidad a guardar</param>
		/// <returns>Respuesta tipo Editoriales </returns>
		Task<Respuesta<IEditorialesDTO>> GuardarEditorialesAsync(IEditorialesDTO editoriales);
		/// <summary>
		/// Metodo Guardar lista editoriales
		/// </summary>
		/// <param name="listaEditoriales">Lista de entidades a guardar</param>
		/// <returns>Respuesta tipo Editoriales </returns>
		Task<Respuesta<IEditorialesDTO>> GuardarListaEditorialesAsync(List<IEditorialesDTO> listaEditoriales);
		/// <summary>
		/// Metodo editar editoriales
		/// </summary>
		/// <param name="editoriales">Entidad a editar</param>
		/// <returns>Respuesta tipo Editoriales </returns>
		Task<Respuesta<IEditorialesDTO>> EditarEditorialesAsync(IEditorialesDTO editoriales);
		/// <summary>
		/// Metodo consultar lista editoriales
		/// </summary>
		/// <returns>Respuesta tipo Editoriales </returns>
		Task<Respuesta<IEditorialesDTO>> ConsultarListaEditorialesAsync();
		/// <summary>
		/// Metodo consultar por llave editoriales
		/// </summary>
		/// <param name="editoriales">Entidad a consultar</param>
		/// <returns>Respuesta tipo Editoriales </returns>
		Task<Respuesta<IEditorialesDTO>> ConsultarEditorialesLlaveAsync(IEditorialesDTO editoriales);
		/// <summary>
		/// Metodo eliminar editoriales
		/// </summary>
		/// <param name="editoriales">Entidad a eliminar</param>
		/// <returns>Respuesta tipo Editoriales </returns>
		Task<Respuesta<IEditorialesDTO>> EliminarEditorialesAsync(IEditorialesDTO editoriales);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de repositorioIEditorialesAccion
	/// </summary>
	public interface IEditorialesRepositorioAccion:IEditorialesAccion
	{
		/// <summary>
		/// Metodo editar editoriales 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 Editoriales </returns>
		Task<Respuesta<IEditorialesDTO>> EditarPorQueryEditorialesAsync(Expression<Func<IEditorialesDTO, bool>> filtro, IEditorialesDTO valor, List<string> propiedades);
		/// <summary>
		/// Metodo consultar lista editoriales por filtro 
		/// </summary>
		/// <param name="filtro">Filtro de las entidades </param>
		/// <returns>Respuesta tipo Editoriales </returns>
		Task<Respuesta<IEditorialesDTO>> ConsultarListaEditorialesPorFiltroAsync(Expression<Func<IEditorialesDTO, bool>> filtro);
		/// <summary>
		/// Metodo editar  editoriales por filtro 
		/// </summary>
		/// <param name="editoriales">Entidad con los datos a editar</param>
		/// <param name="propiedades">Propiedades a modificar</param>
		/// <returns>Respuesta tipo Editoriales </returns>
		Task<Respuesta<IEditorialesDTO>> EditarEditorialesPorFiltroAsync(IEditorialesDTO editoriales, params string[] propiedades);
		/// <summary>
		/// Metodo eliminar lista editoriales 
		/// </summary>
		/// <param name="lista">Lista de entidad a eliminar</param>
		/// <returns>Respuesta tipo Editoriales </returns>
		Task<Respuesta<IEditorialesDTO>> EliminarListaEditorialesAsync(List<IEditorialesDTO> lista);
		/// <summary>
		/// Metodo editar editoriales lista 
		/// </summary>
		/// <param name="lista"> Lista con entidades a modificar</param>
		/// <returns>Respuesta tipo Editoriales </returns>
		Task<Respuesta<IEditorialesDTO>> EditarListaEditorialesAsync(List<IEditorialesDTO> lista);
	}


	/// <summary>
	/// Interface que define las acciones de la capa de negocioIEditorialesAccion
	/// </summary>
	public interface IEditorialesNegocioAccion:IEditorialesAccion
	{
	}
}
