using Api.DigitalPages.Interfaces.Models;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Api.DigitalPages.Interfaces.Connector
{
/// <summary>
/// Possibilidade de vinvular o usuário a diferentes contextos após cadastro.
/// </summary>
public interface IContextAccess : IBaseModelV2
{
//Tipo de objeto que o usuário deve ser vinculado.
ObjectType Type { get; set; }
//Uid do objeto
Guid TargetUid { get; set; }
///Faixa de Ip que o usuário deve estar para ter acesso.
string IpRangeFilter { get; set; }
}
public interface IConnectorUserDirectRegister
{
/// <summary>
/// Criar ou atualiza um objeto ContextAccess com base em um JSON
/// </summary>
/// <param name="json"></param>
/// <param name="baseContextAccess"></param>
/// <returns></returns>
Task<IContextAccess> ContextAccessFrom(string json, IContextAccess baseContextAccess = null);
/// <summary>
/// Retorna uma lista de ContextAccess paginado.
/// </summary>
/// <param name="options"></param>
/// <param name="page"></param>
/// <param name="pageSize"></param>
/// <returns></returns>
Task<IPagedResult<IContextAccess>> ContextAccess(ContextAccessQueryOptions options, int page = 1, int pageSize = 50);
/// <summary>
/// Retorna todos os ContextAccess relacionados.
/// </summary>
/// <param name="options"></param>
/// <returns></returns>
Task<List<IContextAccess>> ContextAccess(ContextAccessQueryOptions options = null);
/// <summary>
/// Retorna ContextAccess com base no Uid
/// </summary>
/// <param name="uid"></param>
/// <returns></returns>
Task<IContextAccess> Get(Guid uid);
/// <summary>
/// Insere um novo ContextAccess
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
Task<IContextAccess> Insert(IContextAccess model);
/// <summary>
/// Atualiza um ContextAccess.
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
Task<IContextAccess> Update(IContextAccess model);
/// <summary>
/// Remove um ContextAccess.
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
Task<bool> Delete(IContextAccess model);
/// <summary>
/// Recupera as informações do usuário com base no json recebido do usuário.
/// </summary>
/// <typeparam name="TUser"></typeparam>
/// <typeparam name="TUserDetail"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
Task<IRegisterInfo<TUser>> RegisterInfo<TUser, TUserDetail, TUserPreference>(string json) where TUser : IUser where TUserDetail : IUserDetail where TUserPreference : IUserPreference;
/// <summary>
/// Verifica se todos os atributos considerados essenciais foram inseridos.
/// </summary>
/// <typeparam name="TUser"></typeparam>
/// <param name="registerInfo"></param>
/// <returns></returns>
Task<List<IErroMessage>> ValidateRequiredOptions<TUser>(IRegisterInfo<TUser> registerInfo) where TUser : IUser;
/// <summary>
/// Verifica se as entidades enviadas fazem partes nos esquemas considerados essenciais.
/// </summary>
/// <param name="schemas"></param>
/// <returns></returns>
Task<List<IErroMessage>> ValidateRequiredSchemas(List<IEntitySchema> schemas);
}
public interface IRegisterInfo<TUser> where TUser : IUser
{
/// <summary>
/// Informações sobre o usuário
/// </summary>
TUser User { get; set; }
//Entidades que o usuário deve ser vinculado.
List<Guid> Entities { get; set; }
}
public interface IErroMessage
{
string Message { get; set; }
}
public class ContextAccessQueryOptions
{
}
}