Monq.Models.Abstractions
English
The library provides input model primitives, as well as custom validation attributes.
Installation
Install-Package Monq.Models.Abstractions
Модели
I. BasicIdPostViewModel
The data model is used in requests for data binding among themselves when adding and updating objects.
Example:
public class GateSyntheticTriggerPostViewModel
{
[BasicIdRequired(ErrorMessage = "Owning workgroup ID was not specified.")]
[BasicIdRange(1, long.MaxValue, ErrorMessage = "Invalid value for owner workgroup ID.")]
public BasicIdPostViewModel OwnerWorkGroup { get; set; }
...
}
{
"ownerWorkGroup": {
"id": 23
}
}
II. DatePostViewModel
The accepted model for a specific date, or range, in Unixtimestamp format, to filter on a specific field.
There is also a version of the model that works with DateTimeOffset - located in the Monq.Models.Abstractions.v2 namespace
Priority of processing fields (if you decided to fill in several fields of the model):
equals -> range -> LessThanOrEqual -> MoreThanOrEqual -> lessThan -> moreThan
Combinations are allowed:
1. LessThanOrEqual && MoreThanOrEqual: >= x <=
2. LessThan && MoreThan: > x <
3. LessThanOrEqual && MoreThan: >= x <
4. LessThan && MoreThanOrEqual: > x <=
Note: at the moment the model handler is implemented only for Monq.ClickHouse.Client - the FilterExtensions.FilterByDateRange method (string fieldName, DatePostViewModel date) - are used in conjunction with SQL Query Builder.
Example:
public class BuildFilterViewModel
{
public virtual DatePostViewModel DateStart { get; set; } = null;
public virtual DatePostViewModel DateEnd { get; set; } = null;
...
}
{
"DateStart": {
"Equal": 1564606800
},
"DateEnd": {
"range": {
"start": 1564606800,
"end": 1565643599
}
}
}
Validation Attributes
I. BasicIdRequiredAttribute
Modification of RequiredAttribute for type BasicIdPostViewModel.
Example:
public class GateSyntheticTriggerPostViewModel
{
[BasicIdRequired(ErrorMessage = "Owning workgroup ID was not specified.")]
[BasicIdRange(1, long.MaxValue, ErrorMessage = "Invalid value for owner workgroup ID.")]
public BasicIdPostViewModel OwnerWorkGroup { get; set; }
}
II. BasicIdRangeAttribute
Modification of RangeAttribute for type BasicIdPostViewModel.
Example:
public class GateSyntheticTriggerPostViewModel
{
[BasicIdRequired(ErrorMessage = "Owning workgroup ID was not specified.")]
[BasicIdRange(1, long.MaxValue, ErrorMessage = "Invalid value for owner workgroup ID.")]
public BasicIdPostViewModel OwnerWorkGroup { get; set; }
}
III. StringRangeAttribute
Attribute for validating possible values of a string type.
Example:
public abstract class SharedEntityPostViewModel
{
[StringRange("read", "basic-read", "write")]
public IEnumerable<string> SharedToAll { get; set; } = Enumerable.Empty<string>();
...
}
IV. NotEmptyAttribute
Modification of RequiredAttribute for a collection of type IEnumerable.
Example:
public class GateAutomatonRulePutViewModel
{
...
[NotEmpty(ErrorMessage = "The list of input variables of the rule script is not specified.")]
public IEnumerable<GateAutomatonRuleVariablePostViewModel> Variables { get; set; } = Enumerable.Empty<GateAutomatonRuleVariablePostViewModel>();
}
V. DateRequiredAttribute
Modification of RequiredAttribute for type DateRangePostViewModel.
Example:
public class GateSTEventHistoryFilterViewModel
{
[DateRequired(ErrorMessage = "The start date of the event was not specified.")]
public DatePostViewModel DateStart { get; set; } = null;
[DateRequired(ErrorMessage = "The end date of the event was not specified.")]
public DatePostViewModel DateEnd { get; set; } = null;
}
Русский
В библиотеке представлены примитивы входных моделей, а также кастомные атрибуты валидации.
Установка
Install-Package Monq.Models.Abstractions
Модели
I. BasicIdPostViewModel
Модель данных используется в запросах на привязку данных между собой при добавлении и обновлении объектов.
Пример:
public class GateSyntheticTriggerPostViewModel
{
[BasicIdRequired(ErrorMessage = "Не указан идентификатор рабочей группы-владельца.")]
[BasicIdRange(1, long.MaxValue, ErrorMessage = "Недопустимое значение идентификатора рабочей группы-владельца.")]
public BasicIdPostViewModel OwnerWorkGroup { get; set; }
...
}
{
"ownerWorkGroup": {
"id": 23
}
}
II. DatePostViewModel
Принимаемая модель конкретной даты, либо диапазона в формате Unixtimestamp, для выполнения фильтрации по определенному полю.
Существует также версия модели, которая работает с DateTimeOffset - находится в пространстве имен Monq.Models.Abstractions.v2
Приоритет обработки полей (если решились заполнить несколько полей модели):
equals -> range -> LessThanOrEqual -> MoreThanOrEqual -> lessThan -> moreThan
Допускаются комбинации:
1. LessThanOrEqual && MoreThanOrEqual: >= x <=
2. LessThan && MoreThan: > x <
3. LessThanOrEqual && MoreThan: >= x <
4. LessThan && MoreThanOrEqual: > x <=
Замечание: на данный момент обработчик модели реализовать только для Monq.ClickHouse.Client - метод FilterExtensions.FilterByDateRange(string fieldName, DatePostViewModel date) - используются в связке с SQL Query Builder.
Пример:
public class BuildFilterViewModel
{
public virtual DatePostViewModel DateStart { get; set; } = null;
public virtual DatePostViewModel DateEnd { get; set; } = null;
...
}
{
"DateStart": {
"Equal": 1564606800
},
"DateEnd": {
"range": {
"start": 1564606800,
"end": 1565643599
}
}
}
Атрибуты валидации
I. BasicIdRequiredAttribute
Модификация RequiredAttribute для типа BasicIdPostViewModel.
Пример:
public class GateSyntheticTriggerPostViewModel
{
[BasicIdRequired(ErrorMessage = "Не указан идентификатор рабочей группы-владельца.")]
[BasicIdRange(1, long.MaxValue, ErrorMessage = "Недопустимое значение идентификатора рабочей группы-владельца.")]
public BasicIdPostViewModel OwnerWorkGroup { get; set; }
}
II. BasicIdRangeAttribute
Модификация RangeAttribute для типа BasicIdPostViewModel.
Пример:
public class GateSyntheticTriggerPostViewModel
{
[BasicIdRequired(ErrorMessage = "Не указан идентификатор рабочей группы-владельца.")]
[BasicIdRange(1, long.MaxValue, ErrorMessage = "Недопустимое значение идентификатора рабочей группы-владельца.")]
public BasicIdPostViewModel OwnerWorkGroup { get; set; }
}
III. StringRangeAttribute
Атрибут для валидации возможных значений строкового типа.
Пример:
public abstract class SharedEntityPostViewModel
{
[StringRange("read", "basic-read", "write")]
public IEnumerable<string> SharedToAll { get; set; } = Enumerable.Empty<string>();
...
}
IV. NotEmptyAttribute
Модификация RequiredAttribute для коллекции типа IEnumerable.
Пример:
public class GateAutomatonRulePutViewModel
{
...
[NotEmpty(ErrorMessage = "Не указан список входных переменных скрипта правила.")]
public IEnumerable<GateAutomatonRuleVariablePostViewModel> Variables { get; set; } = Enumerable.Empty<GateAutomatonRuleVariablePostViewModel>();
}
V. DateRequiredAttribute
Модификация RequiredAttribute для типа DateRangePostViewModel.
Пример:
public class GateSTEventHistoryFilterViewModel
{
[DateRequired(ErrorMessage = "Не указана дата начала события.")]
public DatePostViewModel DateStart { get; set; } = null;
[DateRequired(ErrorMessage = "Не указана дата окончания события.")]
public DatePostViewModel DateEnd { get; set; } = null;
}