IConnectorLearning.cs•24.7 kB
using Api.DigitalPages.Interfaces.Models;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Threading.Tasks;
namespace Api.DigitalPages.Interfaces.Connector
{
public interface IConnectorLearning :
ISystemContextRequired,
ISystemConnectorBaseCrudFlowV2<IContentSummary<ICourseActivity>, ICourseActivity, ActivitySummaryDefaultOptions>,
ISystemConnectorBaseCrudFlowV2<IContentSummary<ICourse>, ICourse, CourseSummaryDefaultOptions>,
ISystemConnectorBaseGetFlow<ICourseActivity, ActivityPendingSummaryOptions>,
ISystemConnectorBaseGetFlow<ICourseNodeItem, NodesPendingSummaryOptions>,
ISystemConnectorBaseGetFlow<ICourse, CoursePendingSummaryOptions>,
ISystemConnectorBaseGetFlow<ICourse, CourseSummariesOptions>
{
List<string> AuthorizedMimeTypes { get; }
Task<ICourseUserRegister> UserRegisterFrom(ICourseRegister register, IUser user);
Task<ICourseActivityInteraction> ActivityInteractionFrom(ICourseActivity activity);
Task<string> ActivityUserContentUrl(ICourseActivity activity);
Task<ICourseActivityInteraction> ActivityInteractionFrom(string json);
Task<ICourseActivityInteractionObject> ActivityInteractionObjectFrom(string json);
Task<ICourseActivityInteractionObject> ActivityInteractionObjectScoreFrom(string json);
Task<ICourseActivityInteractionObject> ActivityInteractionObjectFrom(string json, ICourseActivityInteractionObject baseInteractionObject = null);
Task<ICourseActivityInteractionScoreHistory> ActivityInteractionScoreHistoryFrom(double score);
Task<ICourse> CourseFrom(string json, ICourse baseCourse = null);
Task<ICourseNodeItem> CourseNodeFrom(string json, IUser user, ICourseNodeItem baseNode = null);
Task<ICourseProperty> CoursePropertyFrom(string json, ICourseProperty baseProperty = null);
Task<ICourseAuthorization> CourseAuthorizationFrom(string json, IUser user);
Task<ICourseAuthorizationReference> CourseAuthorizationReferenceFrom(string json, IUser user);
Task<ICourseRegister> CourseRegisterFrom(string json, IUser user, ICourseRegister baseRegister = null);
Task<ICourseActivity> ActivityFrom(IUser user);
Task<List<ICourseActivity>> ActivitiesFrom(string json, IUser user);
Task<ICourseActivity> ActivityFrom(string json, IUser user, ICourseActivity baseActivity = null);
/// <summary>
/// retorna uma url de acesso a determinado conteudo
/// </summary>
Task<string> ActivityUserContentUrl(ICourseActivityInteraction interaction);
/// <summary>
/// Retorna as opções necessarias para obter um conteudo
/// </summary>
Task<string> ActivityUserContentOptions(ICourseActivityInteraction interaction);
Task<ICourseOverride> From(string json, IUser user, ICourseOverride baseModel = null);
Task<ICourseNodeItemOverride> From(string json, IUser user, ICourseNodeItemOverride baseModel = null);
#region Criação
Task<ICourse> Create(ICourse course, IUser author);
Task<ICourse> Clone(ICourse course, IUser author);
Task<ICourseAuthorization> Insert(ICourseAuthorization authorization, ICourse inCourse);
Task<ICourseActivityInteractionObject> Insert(ICourseActivityInteractionObject model, ICourseActivityInteraction inModel);
Task<ICourseAuthorization> Insert(ICourseAuthorization authorization, ICourseRegister inRegister);
Task<ICourseRegister> Insert(ICourseRegister model, ICourse inModel);
Task<ICourseNodeItem> Insert(ICourseNodeItem node, ICourse inCourse);
Task<ICourseProperty> Insert(ICourseProperty property, ICourse inCourse);
Task<ICourseActivity> Insert(ICourseActivity model, ICourseNodeItem inModel);
//ok
Task<ICourseUserRegister> Insert(ICourseUserRegister model, ICourseRegister inModel);
//ok
Task<ICourseActivityInteraction> Insert(ICourseActivityInteraction model, ICourseUserRegister inModel);
Task<ICourseAuthorizationReference> Insert(ICourseAuthorizationReference model, ICourseAuthorization inModel);
Task<ICourseOverride> Insert(ICourseOverride model, ICourseRegister inModel);
Task<ICourseNodeItemOverride> Insert(ICourseNodeItemOverride model, ICourseRegister inModel);
#endregion
#region Atualização
Task<ICourse> Update(ICourse course);
Task<ICourseNodeItem> Update(ICourseNodeItem nodeItem);
Task<ICourseProperty> Update(ICourseProperty property);
Task<ICourseRegister> Update(ICourseRegister model);
Task<ICourseUserRegister> Update(ICourseUserRegister model);
Task<ICourseActivity> Update(ICourseActivity model);
Task<ICourseActivityInteraction> Update(ICourseActivityInteraction model);
Task<ICourseActivityInteractionObject> Update(ICourseActivityInteractionObject model);
Task<ICourseOverride> Update(ICourseOverride model);
Task<ICourseNodeItemOverride> Update(ICourseNodeItemOverride model);
#endregion
#region Remoção
Task<bool> Delete(ICourseNodeItem nodeItem);
Task<bool> Delete(ICourseProperty property);
Task<bool> Delete(ICourseAuthorization authorization);
Task<bool> Delete(ICourseRegister register);
Task<bool> Delete(ICourseUserRegister register);
Task<bool> Delete(ICourse model);
Task<bool> Delete(ICourseActivity model);
Task<bool> Delete(ICourseActivityInteraction interaction);
Task<bool> Delete(ICourseAuthorizationReference reference);
Task<bool> Delete(ICourseActivityContentHistory model);
Task<bool> Delete(List<ICourseActivityContentHistory> models);
Task<bool> Delete(List<ICourseActivityInteraction> interactions);
Task<bool> Delete(List<ICourseOverride> models);
Task<bool> Delete(List<ICourseNodeItemOverride> models);
#endregion
#region Consulta
Task<ICourse> Course(Guid uid, RegistersBasedCoursesOptions options);
Task<IPagedResult<ICourse>> Courses(RegistersBasedCoursesOptions options, int page, int pageSize);
Task<List<ICourse>> Courses(RegistersBasedCoursesOptions options);
/// <summary>
/// Retorna todas as facetas disponíveis nos cursos
/// </summary>
/// <param name="options"></param>
/// <returns></returns>
Task<ICourseFacets> CourseFacets(RegistersBasedCoursesOptions options);
Task<ICourseNodeItem> Node(Guid uid, CourseNodeOptions options);
/// <summary>
/// Retorna uma property do curso
/// </summary>
/// <param name="uid">Identificador da property</param>
/// <param name="options"></param>
/// <returns></returns>
Task<ICourseProperty> CourseProperty(Guid uid, CoursePropertiesOptions options);
/// <summary>
/// retorna todas as properties disponíveis em um curso
/// </summary>
/// <param name="options"></param>
/// <returns></returns>
Task<List<ICourseProperty>> CourseProperties(CoursePropertiesOptions options);
Task<ICourseRegister> Register(Guid uid, RegisterOptions options);
Task<IPagedResult<ICourseRegister>> Registers(RegisterOptions options, int page, int pageSize);
Task<List<ICourseRegister>> Registers(RegisterOptions options);
Task<ICourse> Course(Guid uid, ManagementCourseOptions options);
Task<IPagedResult<ICourse>> Courses(ManagementCourseOptions options, int page, int pageSize);
Task<List<ICourse>> Courses(ManagementCourseOptions options);
Task<ICourse> CourseFromAuthorization(Guid uid, ManagementCourseOptions options);
Task<ICourseNodeItem> Node(Guid uid, ManagementCourseNodeOptions options);
Task<ICourseAuthorization> Authorization(Guid uid, ManagementAuthorizationOptions options);
Task<ICourseAuthorizationReference> AuthorizationReference(Guid uid, ManagementAuthorizationOptions options);
Task<ICourseRegister> Register(Guid uid, ManagementRegisterOptions options);
Task<IPagedResult<ICourseRegister>> Registers(ManagementRegisterOptions options, int page, int pageSize);
Task<List<ICourseRegister>> Registers(ManagementRegisterOptions options);
Task<List<IUserRegisterSummaries>> RegisterSummaries(UserRegisterOptions options);
Task<ICourseUserRegister> UserRegister(Guid uid, UserRegisterOptions options);
Task<ICourseUserRegister> UserRegisterFromInteraction(Guid uid, UserRegisterOptions options);
/// <summary>
/// Monta o relatorio de frequencia a partir dos uids da matricula
/// </summary>
/// <param name="userRegisterUids">Lista de matriculas</param>
/// <returns></returns>
Task<IPagedResult<ICourseUserRegisterReportFrequency>> CourseActivityReportFrequency(List<Guid> registerUids, int page, int pageSize);
[Obsolete]
Task<IPagedResult<ICourseUserRegisterReportFrequency>> CourseActivityReportFrequency(UserRegisterOptions options, int page, int pageSize);
Task<IPagedResult<ICourseUserRegisterReportFrequency>> GetCourseActivityReport(UserRegisterOptions options, int page, int pageSize);
Task<IPagedResult<ICourseUserRegister>> UserRegisters(UserRegisterOptions options, int page, int pageSize);
Task<List<ICourseUserRegister>> UserRegisters(UserRegisterOptions options);
Task<ICourseActivity> Activity(Guid uid, ManagementActivityOptions options);
Task<List<ICourseActivity>> Activities(ManagementActivityOptions options);
Task<ICourseActivityInteraction> ActivityInteraction(Guid uid, ActivityInteractionOptions options);
Task<ICourseActivityInteractionObject> ActivityInteractionObject(Guid uid, ActivityInteractionObjectsOptions options);
Task<List<ICourseActivityInteractionObject>> ActivityInteractionObjects(ActivityInteractionObjectsOptions options);
Task<List<ICourseActivityInteractionObjectsCount>> ActivityInteractionObjectsCount(ActivityInteractionObjectsOptions options);
Task<List<ICourseActivityInteraction>> ActivityInteractions(ActivityInteractionOptions options);
Task<IPagedResult<ICourseUserRegister>> UserRegisters(ICourse course, UserRegisterOptions options, int page, int pageSize);
Task<List<ICourseUserRegister>> UserRegisters(ICourse course, UserRegisterOptions options);
Task<IPagedResult<ICourseUserRegister>> UserRegisters(ICourseRegister regiter, UserRegisterOptions options, int page, int pageSize);
Task<List<ICourseUserRegister>> UserRegisters(ICourseRegister regiter, UserRegisterOptions options);
//Task<ICourseOverride> CourseOverride(Guid uid, ManagementRegisterOptions options);
//Task<ICourseOverride> CourseNodeOverrideOverride(Guid uid, ManagementRegisterOptions options);
#endregion
/// <summary>
/// Função responsável por montar o relátorio de notas por oferta.
/// </summary>
Task<List<ICourseUserRegisterReportScore>> RegisterCourseNodeReportScore(List<ICourseUserRegister> userRegisters);
/// <summary>
/// Função responsável por montar o relátorio de frequencia por oferta.
/// </summary>
Task<List<ICourseUserRegisterReportFrequency>> RegisterCourseNodeReportFrequency(List<ICourseUserRegister> userRegisters, List<ICourseUserRegisterReportFrequency> reportFrequency);
/// <summary>
/// Função responsável por montar o relátorio de ranking do curso
/// </summary>
Task<List<ICourseUserRegisterReportRanking>> CourseRanking(List<ICourseUserRegister> userRegisters);
}
public interface ICourseFacets
{
/// <summary>
/// Entidades encontradas no cursos.
/// </summary>
List<ICourseFacetType<Guid>> Entities { get; set; }
/// <summary>
/// Status das matriculas encontradas nos cursos.
/// </summary>
List<ICourseFacetType<UserRegisterStatus>> Status { get; set; }
/// <summary>
/// Tags encontradas nos cursos.
/// </summary>
List<ICourseFacetType<string>> Tags { get; set; }
}
public interface ICourseFacetType<TType>
{
/// <summary>
/// Valor encontrado.
/// </summary>
TType Key { get; set; }
/// <summary>
/// Total de resultado encontrado.
/// </summary>
int Count { get; set; }
}
#region LegacyOptions
public abstract class BaseOptions
{
public IUser RequestingUser { get; set; }
public bool DisableTracking { get; set; }
}
public abstract class BaseSecureOptions : BaseOptions
{
public List<IEntityItem> Entities { get; set; }
}
public abstract class BaseManagementOptions : BaseOptions
{
public List<IEntityItem> Entities { get; set; }
public bool IgnoreAuthorizations { get; set; }
}
public class RegistersBasedCoursesOptions : BaseSecureOptions
{
public bool IncludeTags { get; set; }
public bool IncludeAuthorizations { get; set; }
public bool IncludeRegisters { get; set; }
public bool IncludeRegisterAuthorizations { get; set; }
public bool IncludeNodeProperties { get; set; }
public bool IncludeNodes { get; set; }
public bool IncludeProperties { get; set; }
public bool IncludeNodesTags { get; set; }
public bool IncludeNodeActivities { get; set; }
public CourseType? FilterCourseType { get; set; }
public List<Guid> FilterRegister { get; set; }
public bool OnlyToRegister { get; set; }
public bool OnlyRegistered { get; set; }
public string FilterCourseMetadata { get; set; }
}
public enum CourseQueryTemplate
{
Default,
EssentialActivityInfo
}
public class RegisterOptions : BaseSecureOptions
{
public bool OnlyToRegister { get; set; }
public bool OnlyRegistered { get; set; }
public bool IncludeCourse { get; set; }
public bool IncludeCourseAuthorizations { get; set; }
public bool IncludeCourseTags { get; set; }
public bool IncludeCourseNodes { get; set; }
public bool IncludeCourseNodesTags { get; set; }
public bool IncludeCourseNodesActivities { get; set; }
public bool IncludeCourseOverride { get; set; }
public bool IncludeCourseTagsOverride { get; set; }
public bool IncludeNodeOverride { get; set; }
public bool IncludeNodeTagOverride { get; set; }
public List<Guid> FilterCourse { get; set; }
public List<Guid> FilterUids { get; set; }
public string FilterCourseMetadata { get; set; }
}
public class UserRegisterOptions : BaseOptions
{
public bool IncludeRegister { get; set; }
public bool IncludeRegisterCourseOverride { get; set; }
public bool IncludeRegisterCourseTagsOverride { get; set; }
public bool IncludeRegisterNodeOverride { get; set; }
public bool IncludeRegisterNodeTagsOverride { get; set; }
public bool IncludeCourse { get; set; }
public bool IncludeCourseProperties { get; set; }
public bool IncludeCourseAuthorizations { get; set; }
public bool IncludeCourseTags { get; set; }
public bool IncludeCourseNode { get; set; }
public bool IncludeCourseNodeTags { get; set; }
public bool IncludeInteractions { get; set; }
public bool IncludeInteractionScores { get; set; }
public bool IncludeCourseNodeActivities { get; set; }
public bool IncludeInteractionActivity { get; set; }
public List<ContentStatus> FilterContentStatus { get; set; }
public List<UserRegisterStatus> FilterRegisterStatus { get; set; }
public List<Guid> FilterUser { get; set; }
public List<Guid> FilterRegister { get; set; }
public List<Guid> FilterUids { get; set; }
public string FilterCourseMetadata { get; set; }
public bool FilterRegistersWithProducts { get; set; }
}
public class ManagementActivityOptions : BaseManagementOptions
{
public bool IncludeInteractions { get; set; }
public bool IncludeCourseAuthorizations { get; set; }
public bool IncludeActivityContentHistory { get; set; }
public bool IncludeNode { get; set; }
public bool IncludeNodeActivities { get; set; }
public bool IncludeCourse { get; set; }
public bool IncludeSummary { get; set; }
public List<Guid> FilterCourse { get; set; }
public List<Guid> FilterActivities { get; set; }
}
public class ActivityInteractionObjectsOptions : BaseOptions
{
public List<Guid> FilterContext { get; set; }
public List<Guid> FilterTarget { get; set; }
public List<Guid> FilterRegister { get; set; }
public List<Guid> FilterInteraction { get; set; }
public bool IncludeActivityContentHistory { get; set; }
public bool IncludeInteractionActivity { get; set; }
public bool IncludeUserRegister { get; set; }
}
public class ActivityInteractionOptions : BaseOptions
{
public bool IncludeInteractionActivity { get; set; }
public bool IncludeUserRegister { get; set; }
public bool IncludeUserRegisterInteractions { get; set; }
public bool IncludeInteractionsObjects { get; set; }
public bool IncludeActivityNode { get; set; }
public bool IncludeNodeCourse { get; set; }
public bool IncludeNodeActivities { get; set; }
public bool IncludeUserRegisterRegister { get; set; }
public bool IncludeRegisterCourseOverride { get; set; }
public bool IncludeRegisterNodeOverrides { get; set; }
public bool IncludeRegisterAuthorizations { get; set; }
public bool IncludeScoreHistory { get; set; }
public List<Guid> FilterUserRegister { get; set; }
public List<Guid> FilterRegister { get; set; }
public List<Guid> FilterActivities { get; set; }
public List<Guid> FilterUsers { get; set; }
public List<Guid> FilterByContext { get; set; }
public bool FilterWithReviews { get; set; }
}
public class CourseNodeOptions : BaseSecureOptions
{
public bool IncludeActivities { get; set; }
public bool IncludeCourse { get; set; }
public bool IncludeTags { get; set; }
public bool OnlyToRegister { get; set; }
}
public class CoursePropertiesOptions : BaseManagementOptions
{
public bool IncludeCourse { get; set; }
public bool IncludeCourseAuthorizations { get; set; }
public List<Guid> FilterCourse { get; set; }
}
public class ManagementCourseOptions : BaseManagementOptions
{
public bool IncludeAuthorizations { get; set; }
public bool IncludeRegisters { get; set; }
public bool IncludeRegisterAuthorizations { get; set; }
public bool IncludeNodeProperties { get; set; }
public bool IncludeProperties { get; set; }
public bool IncludeNodes { get; set; }
public bool IncludeNodeActivities { get; set; }
public bool IncludeActivitySummary { get; set; }
public bool IncludeUserRegister { get; set; }
public bool FilterEvaluatives { get; set; }
public bool IncludeTags { get; set; }
public List<Guid> FilterRegister { get; set; }
public List<Guid> FilterEntities { get; set; }
public string FilterMetadata { get; set; }
public CourseQueryTemplate QueryTemplate { get; set; }
public CourseType? FilterCourseType { get; set; }
}
public class ManagementCourseNodeOptions : BaseManagementOptions
{
public bool IncludeActivities { get; set; }
public bool IncludeCourse { get; set; }
public bool IncludeCourseAuthorizations { get; set; }
public bool IncluseCourseNodeProperties { get; set; }
public bool IncludeActivityContentHistory { get; set; }
public bool IncludeTags { get; set; }
}
public class ManagementAuthorizationOptions : BaseOptions
{
public bool IncludeReferences { get; set; }
}
public class ManagementRegisterOptions : BaseManagementOptions
{
public bool OnlyToRegister { get; set; }
public bool OnlyRegistered { get; set; }
public bool IncludeAuthorizations { get; set; }
public bool IncludeCourse { get; set; }
public bool IncludeCourseTags { get; set; }
public bool IncludeCourseAuthorizations { get; set; }
public bool IncludeCourseNodes { get; set; }
public bool IncludeCourseNodeTags { get; set; }
public bool IncludeCourseOverride { get; set; }
public bool IncludeCourseTagsOverride { get; set; }
public bool IncludeCourseNodeActivities { get; set; }
public bool IncludeNodeItemsOverride { get; set; }
public bool IncludeNodeItemsTagsOverride { get; set; }
public List<Guid> FilterNodeOverride { get; set; }
}
#endregion
#region Options
/// <summary>
/// Responsavel por retornar o resumo de um curso e das atividades
/// </summary>
public class CourseSummariesOptions : IBaseCrudOptions
{
public bool IncludeActivitiesSummary { get; }
public List<Guid> FilterCourse { get; }
public IBaseAuthorizationFilter FilterAuthorizations { get; }
public CourseSummariesOptions(bool includeActivitiesSummary)
{
IncludeActivitiesSummary = includeActivitiesSummary;
}
public CourseSummariesOptions (bool includeActivitiesSummary, List<Guid> filterCourse)
{
IncludeActivitiesSummary = includeActivitiesSummary;
FilterCourse = filterCourse;
}
public CourseSummariesOptions(bool includeActivitiesSummary, List<Guid> filterCourse, IBaseAuthorizationFilter authorization)
{
IncludeActivitiesSummary = includeActivitiesSummary;
FilterCourse = filterCourse;
FilterAuthorizations = authorization;
}
}
public class CourseSummaryDefaultOptions : IBaseCrudOptions
{
public bool IncludeCourse { get; }
public List<Guid?> FilterCourse { get; }
public CourseSummaryDefaultOptions(bool includeCourse)
{
IncludeCourse = includeCourse;
}
public CourseSummaryDefaultOptions(bool includeCourse, List<Guid?> filterCourse)
{
IncludeCourse = includeCourse;
FilterCourse = filterCourse;
}
}
public class ActivitySummaryDefaultOptions : IBaseCrudOptions
{
public bool IncludeActivity { get; }
public ActivitySummaryDefaultOptions (bool includeActivity)
{
IncludeActivity = includeActivity;
}
}
public class ActivityPendingSummaryOptions : IBaseCrudOptions
{
public Guid CourseUid { get; }
public int Limit { get; }
public DateTime UpdatedAtBefore { get;}
public ActivityPendingSummaryOptions(Guid courseUid, DateTime updatedAtBefore, int limit)
{
CourseUid = courseUid;
UpdatedAtBefore = updatedAtBefore;
Limit = limit;
}
}
public class NodesPendingSummaryOptions : IBaseCrudOptions
{
public Guid CourseUid { get; }
public int Limit { get; }
public DateTime UpdatedAtBefore { get; }
public NodesPendingSummaryOptions(Guid courseUid, DateTime updatedAtBefore, int limit)
{
CourseUid = courseUid;
UpdatedAtBefore = updatedAtBefore;
Limit = limit;
}
}
public class CoursePendingSummaryOptions : IBaseCrudOptions
{
public Guid CourseUid { get; }
public int Limit { get; }
public DateTime UpdatedAtBefore { get; }
public CoursePendingSummaryOptions(Guid courseUid, DateTime updatedAtBefore, int limit)
{
CourseUid = courseUid;
UpdatedAtBefore = updatedAtBefore;
Limit = limit;
}
}
#endregion
}