IBadge.cs•6.21 kB
using System;
using System.Collections.Generic;
using System.Text;
namespace Api.DigitalPages.Interfaces.Models
{
/// <summary>
/// Representa uma badge.
/// </summary>
public interface IBadge : IBaseModelV3, IRestrictedDataV4<IBadgeAuthorization>
{
/// <summary>
/// Nome da badge.
/// </summary>
string Name { get; set; }
/// <summary>
/// Descrição da badge.
/// </summary>
string Description { get; set; }
/// <summary>
/// Indica se a badge está habilitada.
/// </summary>
bool IsEnabled { get; set; }
/// <summary>
/// Indica se a badge está oculta.
/// </summary>
bool IsHidden { get; set; }
/// <summary>
/// Configuração de registro da badge.
/// </summary>
IBadgeRegisterConfig RegisterConfig { get; set; }
/// <summary>
/// Entidades que estao relacinadas ao badge.
/// </summary>
List<IBadgeEntity> Entities { get; set; }
/// <summary>
/// Regras da badge.
/// </summary>
List<IBadgeRule> Rules { get; set; }
/// <summary>
/// Registros de usuários da badge.
/// </summary>
List<IBadgeUserRegister> UserRegisters { get; set; }
/// <summary>
/// Configurações de registro necessárias para registrar a badge.
/// </summary>
List<IBadgeRegisterConfig> RequiredForRegister { get; set; }
}
public interface IBadgeRule :IBaseModelV3<IBadge>
{
public long? MinimumPoints { get; set; }
public BadRuleLimitation Limitation { get; set; }
public List<IBadgeCondition> Conditions { get; set; }
}
public interface IBadgeCondition : IBaseModelV3<IBadgeRule>
{
public ObjectType ReferenceType { get; set; }
public Guid? ReferenceUid { get; set; }
public IBadgeConditionType ConditionType { get; set; }
}
public enum IBadgeConditionType
{
All,
Any
}
public enum BadRuleLimitation
{
None,
Daily,
Weekly,
Monthly,
Yearly
}
public interface IBadgeEntity : IBaseEntityReference, IBaseModelV3<IBadge>
{
}
/// <summary>
/// Representa a autorização de uma badge.
/// </summary>
public interface IBadgeAuthorization : IBaseAuthorizationV4, IBaseModelV3<IBadge>
{
}
public interface IBadgeAuthorizationReference : IBaseAuthorizationReferenceV4, IBaseModelV3<IBadgeAuthorization>
{
}
/// <summary>
/// Configuração de registro de uma badge.
/// </summary>
public interface IBadgeRegisterConfig : IBaseModelV3<IBadge>
{
/// <summary>
/// Tipo de registro autorizado.
/// </summary>
BadgeRegisterType AuthorizeRegisterType { get; set; }
/// <summary>
/// Tempo após o qual a badge expira.
/// </summary>
TimeSpan? ExpireAfterAt { get; set; }
/// <summary>
/// Data de expiração da badge.
/// </summary>
DateTime? ExpireAt { get; set; }
/// <summary>
/// Número máximo de usuários que podem registrar a badge.
/// </summary>
long? MaxUsers { get; set; }
/// <summary>
/// Pontos necessários para registrar a badge.
/// </summary>
long? RequiredPoints { get; set; }
/// <summary>
/// Badges necessárias para registrar esta badge.
/// </summary>
List<IBadge> RequiredBadges { get; set; }
}
/// <summary>
/// Registro de uma badge de usuário.
/// </summary>
public interface IBadgeUserRegister : IBaseModelV3<IBadge>
{
/// <summary>
/// Referência do usuário.
/// </summary>
IBadgeUserReferente UserReference { get; set; }
/// <summary>
/// Tipo de registro da badge.
/// </summary>
BadgeRegisterType RegisterType { get; set; }
/// <summary>
/// Data de expiração do registro da badge.
/// </summary>
DateTime? ExpireAt { get; set; }
}
/// <summary>
/// Referência de uma badge de usuário.
/// </summary>
public interface IBadgeUserReferente : IBaseModelV3
{
/// <summary>
/// UID do usuário.
/// </summary>
Guid UserUid { get; set; }
/// <summary>
/// Pontos do usuário.
/// </summary>
long TotalPoints { get; set; }
/// <summary>
/// Próxima data de expiração dos pontos.
/// </summary>
DateTime? NextPointToExpire { get; set; }
/// <summary>
/// Registros de badges do usuário.
/// </summary>
List<IBadgeUserRegister> Registers { get; set; }
List<IBadgeUserPoints> Points { get; set; }
}
/// <summary>
/// Pontos de um usuário.
/// </summary>
public interface IBadgeUserPoints : IBaseModelV3<IBadgeUserReferente>
{
/// <summary>
/// Pontos do usuário.
/// </summary>
long Points { get; set; }
/// <summary>
/// Descrição dos pontos.
/// </summary>
string Description { get; set; }
/// <summary>
/// Data de expiração dos pontos.
/// </summary>
DateTime? ExpireAt { get; set; }
/// <summary>
/// Tipo de referência dos pontos.
/// </summary>
ObjectType? ReferenceType { get; set; }
/// <summary>
/// UID da referência dos pontos.
/// </summary>
Guid? ReferenceUid { get; set; }
}
/// <summary>
/// Tipos de registro de uma badge.
/// </summary>
[Flags]
public enum BadgeRegisterType : long
{
/// <summary>
/// Registro pelo usuário.
/// </summary>
ByUser = 1,
/// <summary>
/// Registro pelo gerente.
/// </summary>
ByManager = 1L << 1,
/// <summary>
/// Registro por pontos.
/// </summary>
ByPoints = 1L << 2
}
}