using System; using System.Collections.Generic; using System.ComponentModel; using System.ComponentModel.DataAnnotations; using System.Linq; using System.Reflection; using System.Text.Json.Serialization; using System.Threading; using System.Threading.Tasks; using Keyapis.EF.DataAnnotations; using Keyapis.EF.Extensions; using Keyapis.EF.ValueConverters; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.ChangeTracking; // ReSharper disable once CheckNamespace namespace Keyapis.EF.Multiapp.V1.Data.MultiappDb; public interface IMultiappDbContext : IAsyncDisposable, IDisposable { public DbSet Apps { get; set; } public DbSet NotificationTemplates { get; set; } public DbSet NotificationTemplatesPartners { get; set; } public DbSet Partners { get; set; } public Task SaveChangesAsync(CancellationToken cancellationToken = default); } public abstract class MultiappDbContextBase : DbContext, IMultiappDbContext { protected MultiappDbContextBase(DbContextOptions options) : base(options) { } public DbSet Apps { get; set; } = null!; public DbSet NotificationTemplates { get; set; } = null!; public DbSet NotificationTemplatesPartners { get; set; } = null!; public DbSet Partners { get; set; } = null!; protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); builder.HasPostgresExtension("pg_trgm"); foreach(var entity in builder.Model.GetEntityTypes()) { foreach(var property in entity.GetProperties()) { var memberInfo = property.PropertyInfo ?? (MemberInfo ?)property.FieldInfo; if (memberInfo == null) continue; var customRangeAttribute = memberInfo.GetCustomAttribute(); if (customRangeAttribute != null) { var actualType = Nullable.GetUnderlyingType(property.ClrType) ?? property.ClrType; if (actualType == typeof(string) || typeof(IEnumerable).IsAssignableFrom(actualType)) { property.SetMaxLength(customRangeAttribute.Maximum > int.MaxValue ? int.MaxValue : (int)customRangeAttribute.Maximum); } } var customRequiredAttribute = memberInfo.GetCustomAttribute(); if (customRequiredAttribute != null) { property.IsNullable = false; } } } builder.Entity(e => { // Для поля id дополнительные конфигурации свойства не нужны // Найдено сопоставление: model.id ~ filter.partner_ids e.HasIndex(p => p.Id) .IsDescending(); // Для поля partner_id дополнительные конфигурации свойства не нужны // Найдено сопоставление: model.partner_id ~ filter.partner_ids e.HasIndex(p => p.PartnerId) .IsDescending(); e.Property(p => p.Type) .HasMaxLength(32) .HasConversion(new EnumToStringConverter()); // Найдено сопоставление: model.type ~ filter.types e.HasIndex(p => p.Type) .IsDescending(); // Для поля title дополнительные конфигурации свойства не нужны // Для поля title сопоствалений с фильтром и сортировкой не найденно // Для поля header дополнительные конфигурации свойства не нужны // Для поля header сопоствалений с фильтром и сортировкой не найденно // Для поля subtitle дополнительные конфигурации свойства не нужны // Для поля subtitle сопоствалений с фильтром и сортировкой не найденно // Для поля background_color дополнительные конфигурации свойства не нужны // Для поля background_color сопоствалений с фильтром и сортировкой не найденно e.Property(p => p.StatusType) .HasMaxLength(32) .HasConversion(new EnumToStringConverter()); // Найдено сопоставление: model.status_type ~ filter.status_types e.HasIndex(p => p.StatusType) .IsDescending(); e.Property(p => p.Links) .HasColumnType("jsonb") .HasConversion(new CustomJsonConverter>(), new ValueComparer>( (c1, c2) => (c1 != null && c2 != null && c1.SequenceEqual(c2)), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => c.ToList() )) .HasDefaultValue(new List()) .HasColumnType("jsonb"); e.HasIndex(p => p.Links) .HasMethod("gin") .HasOperators("jsonb_ops"); e.Property(p => p.UserTags) .HasDefaultValue(new List()); // Найдено сопоставление: model.user_tags ~ filter.user_tags e.HasIndex(p => p.UserTags) .HasMethod("gin"); e.Property(p => p.AppTags) .HasDefaultValue(new List()); // Найдено сопоставление: model.app_tags ~ filter.app_tags e.HasIndex(p => p.AppTags) .HasMethod("gin"); e.Property(p => p.CreatedAt) .HasColumnType("timestamp without time zone") .HasConversion(DateTimeUtcConverter.Instance); // Найдено сопоставление: model.created_at ~ order.CREATED_AT e.HasIndex(p => p.CreatedAt) .HasMethod("btree") .IsDescending(); e.Property(p => p.ChangedAt) .HasColumnType("timestamp without time zone") .HasConversion(DateTimeUtcConverter.Instance) .IsConcurrencyToken(); // Найдено сопоставление: model.changed_at ~ order.CHANGED_AT e.HasIndex(p => p.ChangedAt) .HasMethod("btree") .IsDescending(); e.Property(p => p.Permissions) .HasColumnType("jsonb") .HasConversion(new CustomJsonConverter()); e.HasIndex(p => p.Permissions) .HasMethod("gin") .HasOperators("jsonb_path_ops"); e.Property(p => p.GrantTypes) .HasDefaultValue(new List()) .HasConversion(new ListEnumToStringConverter()) .Metadata.SetValueComparer(new ValueComparer>( (c1, c2) => c1 != null && c2 != null && c1.SequenceEqual(c2), c => c.Aggregate(0, (a, v) => HashCode.Combine(a, v.GetHashCode())), c => c.ToList())); // Для поля grant_types сопоствалений с фильтром и сортировкой не найденно // Дополнительные индексы: // По полю AppFilter.(title,header,subtitle) e.HasIndex(p => new { p.Title, p.Header, p.Subtitle }) .HasMethod("gin") .IsTsVectorExpressionIndex("russian"); // Связь один ко многим e.HasOne(p => p.Partner) .WithMany(p => p.PartnerApps) .HasForeignKey(p => p.PartnerId) // WARNING Обязательный FK App.partner_id приведёт к проблемам обратной совместимости версий приложений в сценариях удаления .OnDelete(DeleteBehavior.Restrict); }); builder.Entity(e => { // Для поля id дополнительные конфигурации свойства не нужны // Найдено сопоставление: model.id ~ filter.partner_ids e.HasIndex(p => p.Id) .IsDescending(); // Для поля template_header дополнительные конфигурации свойства не нужны // Для поля template_header сопоствалений с фильтром и сортировкой не найденно // Для поля template_text дополнительные конфигурации свойства не нужны // Для поля template_text сопоствалений с фильтром и сортировкой не найденно e.Property(p => p.CreatedAt) .HasColumnType("timestamp without time zone") .HasConversion(DateTimeUtcConverter.Instance); // Найдено сопоставление: model.created_at ~ order.CREATED_AT e.HasIndex(p => p.CreatedAt) .HasMethod("btree") .IsDescending(); e.Property(p => p.ChangedAt) .HasColumnType("timestamp without time zone") .HasConversion(DateTimeUtcConverter.Instance) .IsConcurrencyToken(); // Найдено сопоставление: model.changed_at ~ order.CHANGED_AT e.HasIndex(p => p.ChangedAt) .HasMethod("btree") .IsDescending(); // WARNING Для поля NotificationTemplate.deleted_at не указан диапазон e.Property(p => p.DeletedAt) .HasColumnType("timestamp without time zone") .HasConversion(NullableDateTimeUtcConverter.Instance); // Для поля deleted_at сопоствалений с фильтром и сортировкой не найденно // Для поля title дополнительные конфигурации свойства не нужны // Для поля title сопоствалений с фильтром и сортировкой не найденно // Дополнительные индексы: // По полю NotificationTemplateFilter.(template_header,template_text,title) e.HasIndex(p => new { p.TemplateHeader, p.TemplateText, p.Title }) .HasMethod("gin") .IsTsVectorExpressionIndex("russian"); }); builder.Entity(e => { // Для поля notification_template_id дополнительные конфигурации свойства не нужны // Для поля notification_template_id сопоствалений с фильтром и сортировкой не найденно // Для поля partner_id дополнительные конфигурации свойства не нужны // Для поля partner_id сопоствалений с фильтром и сортировкой не найденно // Составной пирвичный ключ e.HasKey(p => new { p.NotificationTemplateId, p.PartnerId }); }); builder.Entity(e => { // Для поля id дополнительные конфигурации свойства не нужны // Найдено сопоставление: model.id ~ filter.template_ids e.HasIndex(p => p.Id) .IsDescending(); // Для поля name дополнительные конфигурации свойства не нужны // Для поля name сопоствалений с фильтром и сортировкой не найденно // WARNING Для поля Partner.api_key не указан диапазон // Для поля api_key дополнительные конфигурации свойства не нужны // Для поля api_key сопоствалений с фильтром и сортировкой не найденно // WARNING Для поля Partner.public_key не указан диапазон // Для поля public_key дополнительные конфигурации свойства не нужны // Для поля public_key сопоствалений с фильтром и сортировкой не найденно e.Property(p => p.CreatedAt) .HasColumnType("timestamp without time zone") .HasConversion(DateTimeUtcConverter.Instance); // Найдено сопоставление: model.created_at ~ order.CREATED_AT e.HasIndex(p => p.CreatedAt) .HasMethod("btree") .IsDescending(); e.Property(p => p.ChangedAt) .HasColumnType("timestamp without time zone") .HasConversion(DateTimeUtcConverter.Instance); // Найдено сопоставление: model.changed_at ~ order.CHANGED_AT e.HasIndex(p => p.ChangedAt) .HasMethod("btree") .IsDescending(); // WARNING Для поля Partner.deleted_at не указан диапазон e.Property(p => p.DeletedAt) .HasColumnType("timestamp without time zone") .HasConversion(NullableDateTimeUtcConverter.Instance); // Для поля deleted_at сопоствалений с фильтром и сортировкой не найденно // WARNING Для поля Partner.api_key_hash не указан диапазон // Для поля api_key_hash дополнительные конфигурации свойства не нужны // Для поля api_key_hash сопоствалений с фильтром и сортировкой не найденно // WARNING Для поля Partner.api_key_masked не указан диапазон // Для поля api_key_masked дополнительные конфигурации свойства не нужны // Для поля api_key_masked сопоствалений с фильтром и сортировкой не найденно // Дополнительные индексы: // По полю PartnerFilter.(name) e.HasIndex(p => p.Name) .HasMethod("gin") .IsTsVectorExpressionIndex("russian"); }); builder.Entity(e => { e.HasMany(p => p.Partners) .WithMany(p => p.NotificationTemplates) .UsingEntity( r => r.HasOne(p => p.Partner) .WithMany(p => p.NotificationTemplatePartners) .HasForeignKey(p => p.PartnerId) .OnDelete(DeleteBehavior.ClientSetNull), l => l.HasOne(p => p.NotificationTemplate) .WithMany(p => p.NotificationTemplatePartners) .HasForeignKey(p => p.NotificationTemplateId) .OnDelete(DeleteBehavior.ClientSetNull) ); }); builder.HasDefaultSchema("multiapp"); } } /// /// Приложение. /// # Описание модели /// [ Display(Name = @"Приложение"), Description(@"Описание модели") ] public partial class AppModel { /// /// Идентификатор. /// Если не передан создаётся сервером. /// # Тип: Guid /// [ Display(Name = @"Идентификатор"), Description(@"Если не передан создаётся сервером. Тип: Guid"), CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } /// /// Идентификатор партнера. /// # Тип: Guid /// [ Display(Name = @"Идентификатор партнера"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid PartnerId { get; set; } /// /// Свойство навигации /// [ JsonIgnore ] public PartnerModel Partner { get; set; } = null!; /// /// Тип приложения /// [ Display(Name = @"Тип приложения"), CustomRequired ] public AppModel.AppType Type { get; set; } /// /// Системное наименование. /// Не отображается пользователям. /// # Диапазон: 3..256 /// [ Display(Name = @"Системное наименование"), Description(@"Не отображается пользователям. Диапазон: 3..256"), CustomRequired, CustomRange(3, 256) ] public string Title { get; set; } = null!; /// /// Заголовок. /// # Диапазон: 3..30 /// [ Display(Name = @"Заголовок"), Description(@"Диапазон: 3..30"), CustomRange(3, 30) ] public string? Header { get; set; } /// /// Подзаголовок. /// # Диапазон: 3..60 /// [ Display(Name = @"Подзаголовок"), Description(@"Диапазон: 3..60"), CustomRange(3, 60) ] public string? Subtitle { get; set; } /// /// Цвет заднего плана(подложки). /// Все цвета должны быть в формате hex #RRGGBBAA. /// Пример: #7e00c380. /// # Диапазон: 9..9. /// # Паттерн: /^#[0-9a-fA-F]{8}$/ /// [ Display(Name = @"Цвет заднего плана"), Description(@"Все цвета должны быть в формате hex #RRGGBBAA. Пример: #7e00c380. Диапазон: 9..9. Паттерн: /^#[0-9a-fA-F]{8}$/"), CustomRange(9, 9), CustomPattern(@"^#[0-9a-fA-F]{8}$") ] public string? BackgroundColor { get; set; } /// /// Статус приложения /// [ Display(Name = @"Статус приложения"), CustomRequired ] public AppModel.AppStatusType StatusType { get; set; } /// /// Ссылки для переходов. /// # Диапазон: 0..100 /// [ Display(Name = @"Ссылки для переходов"), Description(@"Диапазон: 0..100"), CustomRange(0, 100) ] public List Links { get; set; } = new(0); /// /// Список тегов пользователей. /// Обязательное. /// Описывает кто может видеть приложение. /// Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10. /// # Диапазон: 1..100. /// # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/ /// [ Display(Name = @"Список тегов пользователей"), Description(@"Обязательное. Описывает кто может видеть приложение. Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10. Диапазон: 1..100. Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/"), CustomRequired, CustomRange(1, 100), CustomPattern(@"^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$") ] public List UserTags { get; set; } = new(0); /// /// Список тегов приложений. /// Обязательное. /// Описывает какие клиенты могут видеть приложение. /// Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10. /// # Диапазон: 1..20. /// # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/ /// [ Display(Name = @"Список тегов приложений"), Description(@"Обязательное. Описывает какие клиенты могут видеть приложение. Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10. Диапазон: 1..20. Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/"), CustomRequired, CustomRange(1, 20), CustomPattern(@"^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$") ] public List AppTags { get; set; } = new(0); /// /// Дата создания. /// # Тип: DateTime /// [ Display(Name = @"Дата создания"), Description(@"Тип: DateTime"), Editable(false) ] public DateTime CreatedAt { get; set; } /// /// Дата последнего изменения. /// Заполняется и обновляется сервером. /// При изменении должен совпадать со значением из БД. /// Является версией объекта. /// # Тип: DateTime /// [ Display(Name = @"Дата последнего изменения"), Description(@"Заполняется и обновляется сервером. При изменении должен совпадать со значением из БД. Является версией объекта. Тип: DateTime") ] public DateTime ChangedAt { get; set; } /// /// Разрешения /// [ Obsolete("Поле использовать нельзя. Добавлено для совместимости со старыми флоу."), Display(Name = @"Разрешения") ] public AppModel.PermissionsModel? Permissions { get; set; } /// /// Список разрешений /// [ Display(Name = @"Список разрешений") ] public List GrantTypes { get; set; } = new(0); /// /// Ссылка /// [ Display(Name = @"Ссылка") ] public partial class LinkModel { /// /// Тип платформы. /// Обязательное /// [ Display(Name = @"Тип платформы"), Description(@"Обязательное"), CustomRequired ] public AppModel.AppPlatformType PlatformType { get; set; } /// /// Тип ссылки. /// Обязательное /// [ Display(Name = @"Тип ссылки"), Description(@"Обязательное"), CustomRequired ] public AppModel.LinkModel.AppLinkType Type { get; set; } /// /// Значение ссылки для перехода. /// Обязательное. /// # Диапазон: 12..512 /// [ Display(Name = @"Значение ссылки для перехода"), Description(@"Обязательное. Диапазон: 12..512"), CustomRequired, CustomRange(12, 512) ] public string Url { get; set; } = null!; /// /// Список пакетов. /// Если пусто попытка перехода осуществляется безусловно. /// Если заполнено, то переход осуществляется только в случае если хоть один пакет есть на устройстве, иначе обработка переходит к следующей ссылке. /// # Диапазон: 0..20 /// [ Display(Name = @"Список пакетов"), Description(@"Если пусто попытка перехода осуществляется безусловно. Если заполнено, то переход осуществляется только в случае если хоть один пакет есть на устройстве, иначе обработка переходит к следующей ссылке. Диапазон: 0..20"), CustomRange(0, 20) ] public List Packages { get; set; } = new(0); /// /// Справочник типов ссылок. /// # Тип: byte /// [ Description("Тип: byte") ] public enum AppLinkType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("TYPE_UNKNOWN") ] Unknown = 0, /// /// Ссылка для перехода на раздел текущего приложения /// [ Display(Name = @"Ссылка для перехода на раздел текущего приложения"), JsonPropertyName("INTERNAL_APP") ] InternalApp = 1, /// /// Ссылка для перехода на стороннее приложение /// [ Display(Name = @"Ссылка для перехода на стороннее приложение"), JsonPropertyName("EXTERNAL_APP") ] ExternalApp = 2, /// /// Ссылка для перехода на веб-вью внутренних (своих) приложений. /// В окне отсутствует адресаная строка. /// Для iOS используется WKWebView, для Android используется WebView /// [ Display(Name = @"Ссылка для перехода на веб-вью внутренних"), Description(@"В окне отсутствует адресаная строка. Для iOS используется WKWebView, для Android используется WebView"), JsonPropertyName("WEB_VIEW") ] WebView = 3, /// /// Ссылка для перехода на веб-браузер /// [ Display(Name = @"Ссылка для перехода на веб-браузер"), JsonPropertyName("WEB_BROWSER") ] WebBrowser = 4, /// /// Ссылка для перехода на веб-вью внешних (партнёрских) приложений. /// В окне присутствует адресаная строка. /// Для iOS используется SFSafariViewController, для Android используется ChromeCustomTabs /// [ Display(Name = @"Ссылка для перехода на веб-вью внешних"), Description(@"В окне присутствует адресаная строка. Для iOS используется SFSafariViewController, для Android используется ChromeCustomTabs"), JsonPropertyName("EXTERNAL_WEB_VIEW") ] ExternalWebView = 5, } } /// /// Разрешения /// [ Display(Name = @"Разрешения") ] public partial class PermissionsModel { /// /// Список разрешенных типов токена /// [ Display(Name = @"Список разрешенных типов токена") ] public List AllowedTokenTypes { get; set; } = new(0); /// /// Справочник разрешенных типов токена /// public enum AppPermissionsAllowedTokenType { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("ALLOWED_TOKEN_TYPE_UNKNOWN") ] Unknown = 0, /// /// Идентификационный /// [ Display(Name = @"Идентификационный"), JsonPropertyName("ID") ] Id = 1, /// /// Авторизационный /// [ Display(Name = @"Авторизационный"), JsonPropertyName("ACCESS") ] Access = 2, } } /// /// Ошибка сохранения. /// Эти проверки выполняются при работе с базой данных и сторонними сервисами /// [ Display(Name = @"Ошибка сохранения"), Description(@"Эти проверки выполняются при работе с базой данных и сторонними сервисами") ] public partial class SavingErrorModel { /// /// Конфликт версий /// [ Display(Name = @"Конфликт версий") ] public AppModel.SavingErrorModel.ConflictModel? Conflict { get; set; } /// /// Переданный партнер не существует /// [ Display(Name = @"Переданный партнер не существует") ] public AppModel.SavingErrorModel.PartnerIsNotExistModel? PartnerIsNotExist { get; set; } /// /// Переданный партнер удален /// [ Display(Name = @"Переданный партнер удален") ] public AppModel.SavingErrorModel.PartnerIsDeletedModel? PartnerIsDeleted { get; set; } /// /// Конфликт версий. /// Причины: /// - В базе хранится другая версия строки, значения changed_at отличаются /// [ Display(Name = @"Конфликт версий"), Description(@"Причины: - В базе хранится другая версия строки, значения changed_at отличаются") ] public partial class ConflictModel { } /// /// Переданный партнер не существует. /// Причины: /// - В базе нет партнера с переданным partner_id /// [ Display(Name = @"Переданный партнер не существует"), Description(@"Причины: - В базе нет партнера с переданным partner_id") ] public partial class PartnerIsNotExistModel { } /// /// Переданный партнер удален. /// Причины: /// - В базе удален партнер с переданным partner_id /// [ Display(Name = @"Переданный партнер удален"), Description(@"Причины: - В базе удален партнер с переданным partner_id") ] public partial class PartnerIsDeletedModel { } } /// /// Справочник типов приложений. /// # Тип: byte /// [ Description("Тип: byte") ] public enum AppType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("TYPE_UNKNOWN") ] Unknown = 0, /// /// Стандартное приложение /// [ Display(Name = @"Стандартное приложение"), JsonPropertyName("STANDARD") ] Standard = 1, } /// /// Справочник статусов приложений. /// # Тип: byte /// [ Description("Тип: byte") ] public enum AppStatusType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("STATUS_TYPE_UNKNOWN") ] Unknown = 0, /// /// Заблокирован /// [ Display(Name = @"Заблокирован"), JsonPropertyName("BLOCKED") ] Blocked = 1, /// /// Активен /// [ Display(Name = @"Активен"), JsonPropertyName("ACTIVE") ] Active = 2, /// /// Удален /// [ Display(Name = @"Удален"), JsonPropertyName("DELETED") ] Deleted = 3, } /// /// Справочник платформ. /// # Тип: byte /// [ Description("Тип: byte") ] public enum AppPlatformType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("PLATFORM_TYPE_UNKNOWN") ] Unknown = 0, /// /// Платформа iOS. /// Приложение размещается в App Store /// [ Display(Name = @"Платформа iOS"), Description(@"Приложение размещается в App Store"), JsonPropertyName("IOS") ] Ios = 1, /// /// Платформа Android. /// Приложение размещается в Google Play, App Gallery или прочих сторах /// [ Display(Name = @"Платформа Android"), Description(@"Приложение размещается в Google Play, App Gallery или прочих сторах"), JsonPropertyName("ANDROID") ] Android = 2, /// /// Платформа Web. /// Приложение размещается по интернет адресу /// [ Display(Name = @"Платформа Web"), Description(@"Приложение размещается по интернет адресу"), JsonPropertyName("WEB") ] Web = 3, } /// /// Справочник разрешений /// public enum AppGrantType { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("GRANT_TYPE_UNKNOWN") ] Unknown = 0, /// /// Разрешение на получение авторизационного токена посредством метода GET /multiapp/api/v1/partner/token /// [ Display(Name = @"Разрешение на получение авторизационного токена посредством метода GET /multiapp/api/v1/partner/token"), JsonPropertyName("GET_ACCESS_TOKEN") ] GetAccessToken = 1, /// /// Разрешение на получение идентификационного доступа посредством метода GET /multiapp/api/v1/partner/token /// [ Display(Name = @"Разрешение на получение идентификационного доступа посредством метода GET /multiapp/api/v1/partner/token"), JsonPropertyName("GET_ID_TOKEN") ] GetIdToken = 2, /// /// Разрешение на отправку уведомлений без проверки назначений приложения методом POST /multiapp/api/v1/notification /// [ Display(Name = @"Разрешение на отправку уведомлений без проверки назначений приложения методом POST /multiapp/api/v1/notification"), JsonPropertyName("POST_NOTIF_NO_ASSIGN_CHECK") ] PostNotifNoAssignCheck = 3, } } /// /// Шаблон уведомления. /// # Описание модели /// [ Display(Name = @"Шаблон уведомления"), Description(@"Описание модели") ] public partial class NotificationTemplateModel { /// /// Идентификатор. /// Если не передан создаётся сервером. /// # Тип: Guid /// [ Display(Name = @"Идентификатор"), Description(@"Если не передан создаётся сервером. Тип: Guid"), CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } /// /// Заголовок шаблона. /// Поддерживает mustache теги в формате: {{название переменной|тип данных}}. /// Название переменной в теге может содержать латинские буквы (в верхнем или нижнем регистре), цифры и символ \"_\". /// Тип данных может быть указан в верхнем или нижнем регистре, пробелы не допускаются, допустимые типы данных указаны в таблице. /// Символы \"{\" и \"}\" являются служебными и могут использоваться только для формирования Mustache тегов. /// # Диапазон: 3..128 /// [ Display(Name = @"Заголовок шаблона"), Description(@"Поддерживает mustache теги в формате: {{название переменной|тип данных}}. Название переменной в теге может содержать латинские буквы (в верхнем или нижнем регистре), цифры и символ ""_"". Тип данных может быть указан в верхнем или нижнем регистре, пробелы не допускаются, допустимые типы данных указаны в таблице. Символы ""{"" и ""}"" являются служебными и могут использоваться только для формирования Mustache тегов. Диапазон: 3..128"), CustomRequired, CustomRange(3, 128) ] public string TemplateHeader { get; set; } = null!; /// /// Тело шаблона. /// Поддерживает mustache теги в формате: {{название переменной|тип данных}}. /// Название переменной в теге может содержать латинские буквы (в верхнем или нижнем регистре), цифры и символ \"_\". /// Тип данных может быть указан в верхнем или нижнем регистре, пробелы не допускаются, допустимые типы данных указаны в таблице. /// Символы \"{\" и \"}\" являются служебными и могут использоваться только для формирования Mustache тегов. /// # Диапазон: 3..512 /// [ Display(Name = @"Тело шаблона"), Description(@"Поддерживает mustache теги в формате: {{название переменной|тип данных}}. Название переменной в теге может содержать латинские буквы (в верхнем или нижнем регистре), цифры и символ ""_"". Тип данных может быть указан в верхнем или нижнем регистре, пробелы не допускаются, допустимые типы данных указаны в таблице. Символы ""{"" и ""}"" являются служебными и могут использоваться только для формирования Mustache тегов. Диапазон: 3..512"), CustomRequired, CustomRange(3, 512) ] public string TemplateText { get; set; } = null!; /// /// Дата создания. /// # Тип: DateTime /// [ Display(Name = @"Дата создания"), Description(@"Тип: DateTime"), Editable(false) ] public DateTime CreatedAt { get; set; } /// /// Дата последнего изменения. /// Заполняется и обновляется сервером. /// При изменении должен совпадать со значением из БД. /// Является версией объекта. /// # Тип: DateTime /// [ Display(Name = @"Дата последнего изменения"), Description(@"Заполняется и обновляется сервером. При изменении должен совпадать со значением из БД. Является версией объекта. Тип: DateTime") ] public DateTime ChangedAt { get; set; } /// /// Дата удаления. /// # Тип: DateTime? /// [ Display(Name = @"Дата удаления"), Description(@"Тип: DateTime?"), Editable(false) ] public DateTime? DeletedAt { get; set; } /// /// Системное наименование. /// # Диапазон: 3..256 /// [ Display(Name = @"Системное наименование"), Description(@"Диапазон: 3..256"), CustomRequired, CustomRange(3, 256) ] public string Title { get; set; } = null!; /// /// Свойство навигации /// [ JsonIgnore ] public List NotificationTemplatePartners { get; set; } = new(0); /// /// Свойство пропуск навигации /// [ JsonIgnore ] public List Partners { get; set; } = new(0); /// /// Ошибка сохранения. /// Эти проверки выполняются при работе с базой данных и сторонними сервисами /// [ Display(Name = @"Ошибка сохранения"), Description(@"Эти проверки выполняются при работе с базой данных и сторонними сервисами") ] public partial class SavingErrorModel { /// /// Конфликт версий /// [ Display(Name = @"Конфликт версий") ] public NotificationTemplateModel.SavingErrorModel.ConflictModel? Conflict { get; set; } /// /// Конфликт версий. /// Причины: /// - В базе хранится другая версия строки, значения changed_at отличаются /// [ Display(Name = @"Конфликт версий"), Description(@"Причины: - В базе хранится другая версия строки, значения changed_at отличаются") ] public partial class ConflictModel { } } } /// /// Связь шаблона уведомлений и партнера. /// # Описание модели /// [ Display(Name = @"Связь шаблона уведомлений и партнера"), Description(@"Описание модели") ] public partial class NotificationTemplatePartnerModel { /// /// Идентификатор шаблона уведомления. /// # Тип: Guid /// [ Display(Name = @"Идентификатор шаблона уведомления"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid NotificationTemplateId { get; set; } /// /// Свойство навигации /// [ JsonIgnore ] public NotificationTemplateModel NotificationTemplate { get; set; } = null!; /// /// Идентификатор партнера. /// # Тип: Guid /// [ Display(Name = @"Идентификатор партнера"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid PartnerId { get; set; } /// /// Свойство навигации /// [ JsonIgnore ] public PartnerModel Partner { get; set; } = null!; /// /// Ошибка сохранения. /// Эти проверки выполняются при работе с базой данных и сторонними сервисами /// [ Display(Name = @"Ошибка сохранения"), Description(@"Эти проверки выполняются при работе с базой данных и сторонними сервисами") ] public partial class SavingErrorModel { /// /// Партнер удален /// [ Display(Name = @"Партнер удален") ] public NotificationTemplatePartnerModel.SavingErrorModel.PartnerIsDeletedModel? PartnerIsDeleted { get; set; } /// /// Шаблон удален /// [ Display(Name = @"Шаблон удален") ] public NotificationTemplatePartnerModel.SavingErrorModel.TemplateIsDeletedModel? TemplateIsDeleted { get; set; } /// /// Партнер удален /// [ Display(Name = @"Партнер удален") ] public partial class PartnerIsDeletedModel { } /// /// Шаблон удален /// [ Display(Name = @"Шаблон удален") ] public partial class TemplateIsDeletedModel { } } } /// /// Партнер. /// # Описание модели /// [ Display(Name = @"Партнер"), Description(@"Описание модели") ] public partial class PartnerModel { /// /// Идентификатор. /// Если не передан создаётся сервером. /// # Тип: Guid /// [ Display(Name = @"Идентификатор"), Description(@"Если не передан создаётся сервером. Тип: Guid"), CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } /// /// Наименование. /// # Диапазон: 2..256 /// [ Display(Name = @"Наименование"), Description(@"Диапазон: 2..256"), CustomRequired, CustomRange(2, 256) ] public string Name { get; set; } = null!; /// /// API ключ. /// # Тип: Guid? /// [ Display(Name = @"API ключ"), Description(@"Тип: Guid?"), CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid? ApiKey { get; set; } /// /// Публичный ключ /// [ Display(Name = @"Публичный ключ"), Editable(false) ] public string? PublicKey { get; set; } /// /// Дата создания партнера. /// # Тип: DateTime /// [ Display(Name = @"Дата создания партнера"), Description(@"Тип: DateTime"), Editable(false) ] public DateTime CreatedAt { get; set; } /// /// Дата обновления партнера. /// # Тип: DateTime /// [ Display(Name = @"Дата обновления партнера"), Description(@"Тип: DateTime") ] public DateTime ChangedAt { get; set; } /// /// Дата удаления партнера. /// # Тип: DateTime? /// [ Display(Name = @"Дата удаления партнера"), Description(@"Тип: DateTime?"), Editable(false) ] public DateTime? DeletedAt { get; set; } /// /// Хэш от API ключа /// [ Display(Name = @"Хэш от API ключа"), Editable(false) ] public string? ApiKeyHash { get; set; } /// /// API ключ маскированный /// [ Display(Name = @"API ключ маскированный"), Editable(false) ] public string? ApiKeyMasked { get; set; } /// /// Свойство навигации /// [ JsonIgnore ] public List PartnerApps { get; set; } = new(0); /// /// Свойство навигации /// [ JsonIgnore ] public List NotificationTemplatePartners { get; set; } = new(0); /// /// Свойство пропуск навигации /// [ JsonIgnore ] public List NotificationTemplates { get; set; } = new(0); /// /// Ошибка сохранения. /// Эти проверки выполняются при работе с базой данных и сторонними сервисами /// [ Display(Name = @"Ошибка сохранения"), Description(@"Эти проверки выполняются при работе с базой данных и сторонними сервисами") ] public partial class SavingErrorModel { /// /// Конфликт версий /// [ Display(Name = @"Конфликт версий") ] public PartnerModel.SavingErrorModel.ConflictModel? Conflict { get; set; } /// /// API-key уже существует /// [ Display(Name = @"API-key уже существует") ] public PartnerModel.SavingErrorModel.ApiKeyExistsModel? ApiKeyExists { get; set; } /// /// Партнёр удалён /// [ Display(Name = @"Партнёр удалён") ] public PartnerModel.SavingErrorModel.PartnerIsDeletedModel? PartnerIsDeleted { get; set; } /// /// Конфликт версий. /// Причины: /// - В базе хранится другая версия строки, значения changed_at отличаются /// [ Display(Name = @"Конфликт версий"), Description(@"Причины: - В базе хранится другая версия строки, значения changed_at отличаются") ] public partial class ConflictModel { } /// /// API-key уже существует. /// Может появиться только в случае создания партнера. /// Причины: /// - В базе уже хранится такой api_key, он должен быть уникален для каждого партнера /// [ Display(Name = @"API-key уже существует"), Description(@"Может появиться только в случае создания партнера. Причины: - В базе уже хранится такой api_key, он должен быть уникален для каждого партнера") ] public partial class ApiKeyExistsModel { } /// /// Партнёр удалён. /// Причины: /// - Переданный публичный ключ принадлежит удалённому партнеру /// [ Display(Name = @"Партнёр удалён"), Description(@"Причины: - Переданный публичный ключ принадлежит удалённому партнеру") ] public partial class PartnerIsDeletedModel { } } } /// /// Облегчённое приложение /// [ Display(Name = @"Облегчённое приложение") ] public partial class AppLiteModel { /// /// Идентификатор. /// # Тип: Guid /// [ Display(Name = @"Идентификатор"), Description(@"Тип: Guid"), CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } /// /// Наименование. /// Не отображается пользователям. /// # Диапазон: 3..256 /// [ Display(Name = @"Наименование"), Description(@"Не отображается пользователям. Диапазон: 3..256"), CustomRequired, CustomRange(3, 256) ] public string Title { get; set; } = null!; /// /// Заголовок. /// # Диапазон: 3..30 /// [ Display(Name = @"Заголовок"), Description(@"Диапазон: 3..30"), CustomRange(3, 30) ] public string? Header { get; set; } /// /// Подзаголовок. /// # Диапазон: 3..60 /// [ Display(Name = @"Подзаголовок"), Description(@"Диапазон: 3..60"), CustomRange(3, 60) ] public string? Subtitle { get; set; } /// /// Цвет заднего плана(подложки). /// Все цвета должны быть в формате hex #RRGGBBAA. /// Пример: #7e00c380. /// # Диапазон: 9..9. /// # Паттерн: /^#[0-9a-fA-F]{8}$/ /// [ Display(Name = @"Цвет заднего плана"), Description(@"Все цвета должны быть в формате hex #RRGGBBAA. Пример: #7e00c380. Диапазон: 9..9. Паттерн: /^#[0-9a-fA-F]{8}$/"), CustomRange(9, 9), CustomPattern(@"^#[0-9a-fA-F]{8}$") ] public string? BackgroundColor { get; set; } /// /// Статус приложения /// [ Display(Name = @"Статус приложения"), CustomRequired ] public AppModel.AppStatusType StatusType { get; set; } /// /// Ссылки для переходов /// [ Display(Name = @"Ссылки для переходов") ] public List Links { get; set; } = new(0); /// /// Упрощённая ссылка /// [ Display(Name = @"Упрощённая ссылка") ] public partial class LinkLiteModel { /// /// Тип платформы. /// Обязательное /// [ Display(Name = @"Тип платформы"), Description(@"Обязательное"), CustomRequired ] public AppModel.AppPlatformType PlatformType { get; set; } /// /// Тип ссылки. /// Обязательное /// [ Display(Name = @"Тип ссылки"), Description(@"Обязательное"), CustomRequired ] public AppModel.LinkModel.AppLinkType Type { get; set; } /// /// Значение ссылки для перехода. /// Обязательное /// [ Display(Name = @"Значение ссылки для перехода"), Description(@"Обязательное"), CustomRequired ] public string Url { get; set; } = null!; /// /// Список пакетов. /// Если пусто попытка перехода осуществляется безусловно. /// Если заполнено, то переход осуществляется только в случае если хоть один пакет есть на устройстве, иначе обработка переходит к следующей ссылке /// [ Display(Name = @"Список пакетов"), Description(@"Если пусто попытка перехода осуществляется безусловно. Если заполнено, то переход осуществляется только в случае если хоть один пакет есть на устройстве, иначе обработка переходит к следующей ссылке") ] public List Packages { get; set; } = new(0); } } /// /// Фильтр приложений /// [ Display(Name = @"Фильтр приложений") ] public partial class AppFilterModel { /// /// По тексту. /// Если значение не передано то поиск по нему не производится. /// # Диапазон: 3..64. /// # Поиск производится по полям: /// # - Системное наименование; /// # - Заголовок; /// # - Подзаголовок; /// # - Список тегов пользователей; /// # - Список тегов приложений /// [ Display(Name = @"По тексту"), Description(@"Если значение не передано то поиск по нему не производится. Диапазон: 3..64. Поиск производится по полям: - Системное наименование; - Заголовок; - Подзаголовок; - Список тегов пользователей; - Список тегов приложений"), CustomRange(3, 64) ] public string? Text { get; set; } /// /// По типам приложений /// [ Display(Name = @"По типам приложений") ] public List Types { get; set; } = new(0); /// /// По идентификаторам партнера. /// # Тип: Guid /// [ Display(Name = @"По идентификаторам партнера"), Description(@"Тип: Guid"), CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public List PartnerIds { get; set; } = new(0); /// /// По статусам приложений. /// Если переданы все типы, то фильтр игнорируется(так как нужно вернуть всё) /// [ Display(Name = @"По статусам приложений"), Description(@"Если переданы все типы, то фильтр игнорируется(так как нужно вернуть всё)") ] public List StatusTypes { get; set; } = new(0); /// /// По пользовательским тегам. /// Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10. /// # Диапазон: 0..20. /// # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/ /// [ Display(Name = @"По пользовательским тегам"), Description(@"Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10. Диапазон: 0..20. Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/"), CustomRange(0, 20), CustomPattern(@"^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$") ] public List UserTags { get; set; } = new(0); /// /// По тегам приложений. /// Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10. /// # Диапазон: 0..20. /// # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/ /// [ Display(Name = @"По тегам приложений"), Description(@"Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10. Диапазон: 0..20. Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/"), CustomRange(0, 20), CustomPattern(@"^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$") ] public List AppTags { get; set; } = new(0); } /// /// Упрощённый фильтр по приложениям /// [ Display(Name = @"Упрощённый фильтр по приложениям") ] public partial class AppLiteFilterModel { /// /// По типам приложений /// [ Display(Name = @"По типам приложений") ] public List Types { get; set; } = new(0); /// /// По тегам пользователя. /// Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10. /// # Диапазон: 1..20. /// # Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/ /// [ Display(Name = @"По тегам пользователя"), Description(@"Тэг - максимум 5 символов, значение - максимум 19 символов, количество сегментов - максимум 10. Диапазон: 1..20. Паттерн: /^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$/"), CustomRange(1, 20), CustomPattern(@"^[A-Z-]{1,5}_[0-9A-Z-]{1,19}(?:\.[A-Z-]{1,5}_[0-9A-Z-]{1,19}){0,9}$") ] public List UserTags { get; set; } = new(0); /// /// Тег для приложения /// [ Display(Name = @"Тег для приложения") ] public AppLiteFilterModel.AppLiteTagModel? AppLiteTag { get; set; } /// /// Тег для приложения /// [ Display(Name = @"Тег для приложения") ] public partial class AppLiteTagModel { /// /// Тип платформы /// [ Display(Name = @"Тип платформы") ] public AppModel.AppPlatformType PlatformType { get; set; } /// /// Название приложения, которое работает с данным сервисом. /// Для МП и PWA значение \"1\". /// # Паттерн: /^[0-9A-Z-]{1,19}$/ /// [ Display(Name = @"Название приложения, которое работает с данным сервисом"), Description(@"Для МП и PWA значение ""1"". Паттерн: /^[0-9A-Z-]{1,19}$/"), CustomPattern(@"^[0-9A-Z-]{1,19}$") ] public string? AppName { get; set; } } } /// /// Фильтр шаблонов уведомлений /// [ Display(Name = @"Фильтр шаблонов уведомлений") ] public partial class NotificationTemplateFilterModel { /// /// По тексту. /// Если значение не передано то поиск по нему не производится. /// # Диапазон: 3..64. /// # Поиск производится по полям: /// # - Заголовок шаблона; /// # - Тело шаблона; /// # - Системное наименование /// [ Display(Name = @"По тексту"), Description(@"Если значение не передано то поиск по нему не производится. Диапазон: 3..64. Поиск производится по полям: - Заголовок шаблона; - Тело шаблона; - Системное наименование"), CustomRange(3, 64) ] public string? Text { get; set; } /// /// По идентификаторам партнера. /// # Тип: Guid /// [ Display(Name = @"По идентификаторам партнера"), Description(@"Тип: Guid"), CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public List PartnerIds { get; set; } = new(0); /// /// Показывать удаленные /// [ Display(Name = @"Показывать удаленные") ] public bool? IsShowDeleted { get; set; } } /// /// Фильтр партнеров /// [ Display(Name = @"Фильтр партнеров") ] public partial class PartnerFilterModel { /// /// По тексту. /// Если значение не передано то поиск по нему не производится. /// # Диапазон: 3..64. /// # Поиск производится по полям: /// # - Наименование /// [ Display(Name = @"По тексту"), Description(@"Если значение не передано то поиск по нему не производится. Диапазон: 3..64. Поиск производится по полям: - Наименование"), CustomRange(3, 64) ] public string? Text { get; set; } /// /// От даты обновления партнера включительно (больше или равно) /// [ Display(Name = @"От даты обновления партнера включительно") ] public DateTime? BeginChangedAt { get; set; } /// /// До даты обновления партнера (меньше) /// [ Display(Name = @"До даты обновления партнера") ] public DateTime? EndChangedAt { get; set; } /// /// По идентификаторам доступных шаблонов. /// # Тип: Guid /// [ Display(Name = @"По идентификаторам доступных шаблонов"), Description(@"Тип: Guid"), CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public List TemplateIds { get; set; } = new(0); /// /// Показывать удаленные /// [ Display(Name = @"Показывать удаленные") ] public bool? IsShowDeleted { get; set; } } /// /// Пагинация упрощенных приложений /// [ Display(Name = @"Пагинация упрощенных приложений") ] public partial class AppLitePagingModel { /// /// Тип значения сортировки. /// Если значение не передано, то будет взято значение по умолчанию. /// # По умолчанию: CREATED_AT /// [ Display(Name = @"Тип значения сортировки"), Description(@"Если значение не передано, то будет взято значение по умолчанию. По умолчанию: CREATED_AT") ] public AppLitePagingModel.AppLitePagingOrderByType OrderByType { get; set; } = AppLitePagingOrderByType.CreatedAt; /// /// Тип направления сортировки. /// # По умолчанию: DESC /// [ Display(Name = @"Тип направления сортировки"), Description(@"По умолчанию: DESC") ] public AppLitePagingModel.AppLitePagingDirectionType DirectionType { get; set; } = AppLitePagingDirectionType.Desc; /// /// Количество записей на страницу. /// Если значение 0 (не передано), то будет взято значение по умолчанию. /// # Диапазон: 0..100. /// # По умолчанию: 20 /// [ Display(Name = @"Количество записей на страницу"), Description(@"Если значение 0 (не передано), то будет взято значение по умолчанию. Диапазон: 0..100. По умолчанию: 20"), CustomRange(0, 100) ] public int Limit { get; set; } = 20; /// /// Сдвиг. /// # Диапазон: 0..2147483647 /// [ Display(Name = @"Сдвиг"), Description(@"Диапазон: 0..2147483647"), CustomRange(0, 2147483647) ] public int Offset { get; set; } /// /// Справочник типов значений сортировки. /// # Тип: byte /// [ Description("Тип: byte") ] public enum AppLitePagingOrderByType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("ORDER_BY_TYPE_UNKNOWN") ] Unknown = 0, /// /// Дата последнего изменения /// [ Display(Name = @"Дата последнего изменения"), JsonPropertyName("CHANGED_AT") ] ChangedAt = 1, /// /// Дата создания /// [ Display(Name = @"Дата создания"), JsonPropertyName("CREATED_AT") ] CreatedAt = 2, } /// /// Справочник типов направлений сортировки. /// # Тип: byte /// [ Description("Тип: byte") ] public enum AppLitePagingDirectionType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("DIRECTION_TYPE_UNKNOWN") ] Unknown = 0, /// /// От большего к меньшему /// [ Display(Name = @"От большего к меньшему"), JsonPropertyName("DESC") ] Desc = 1, /// /// От меньшего к большему /// [ Display(Name = @"От меньшего к большему"), JsonPropertyName("ASC") ] Asc = 2, } } /// /// Пагинация приложений /// [ Display(Name = @"Пагинация приложений") ] public partial class AppPagingModel { /// /// Тип значения сортировки. /// Если значение не передано, то будет взято значение по умолчанию. /// # По умолчанию: CHANGED_AT /// [ Display(Name = @"Тип значения сортировки"), Description(@"Если значение не передано, то будет взято значение по умолчанию. По умолчанию: CHANGED_AT") ] public AppPagingModel.AppPagingOrderByType OrderByType { get; set; } = AppPagingOrderByType.ChangedAt; /// /// Тип направления сортировки. /// # По умолчанию: DESC /// [ Display(Name = @"Тип направления сортировки"), Description(@"По умолчанию: DESC") ] public AppPagingModel.AppPagingDirectionType DirectionType { get; set; } = AppPagingDirectionType.Desc; /// /// Количество записей на страницу. /// Если значение 0 (не передано), то будет взято значение по умолчанию. /// # Диапазон: 0..100. /// # По умолчанию: 20 /// [ Display(Name = @"Количество записей на страницу"), Description(@"Если значение 0 (не передано), то будет взято значение по умолчанию. Диапазон: 0..100. По умолчанию: 20"), CustomRange(0, 100) ] public int Limit { get; set; } = 20; /// /// Сдвиг. /// # Диапазон: 0..2147483647 /// [ Display(Name = @"Сдвиг"), Description(@"Диапазон: 0..2147483647"), CustomRange(0, 2147483647) ] public int Offset { get; set; } /// /// Справочник типов значений сортировки. /// # Тип: byte /// [ Description("Тип: byte") ] public enum AppPagingOrderByType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("ORDER_BY_TYPE_UNKNOWN") ] Unknown = 0, /// /// Дата последнего изменения /// [ Display(Name = @"Дата последнего изменения"), JsonPropertyName("CHANGED_AT") ] ChangedAt = 1, /// /// Дата создания /// [ Display(Name = @"Дата создания"), JsonPropertyName("CREATED_AT") ] CreatedAt = 2, /// /// По рангу для поиска по тексту. /// Применяется когда передано поле для поиска по тексту. /// В случае если текстовое поле не передано, применяется значение по умолчанию /// [ Display(Name = @"По рангу для поиска по тексту"), Description(@"Применяется когда передано поле для поиска по тексту. В случае если текстовое поле не передано, применяется значение по умолчанию"), JsonPropertyName("RANK") ] Rank = 3, } /// /// Справочник типов направлений сортировки. /// # Тип: byte /// [ Description("Тип: byte") ] public enum AppPagingDirectionType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("DIRECTION_TYPE_UNKNOWN") ] Unknown = 0, /// /// От большего к меньшему /// [ Display(Name = @"От большего к меньшему"), JsonPropertyName("DESC") ] Desc = 1, /// /// От меньшего к большему /// [ Display(Name = @"От меньшего к большему"), JsonPropertyName("ASC") ] Asc = 2, } } /// /// Запрос удаления приложения /// [ Display(Name = @"Запрос удаления приложения") ] public partial class DeleteAppRequestModel { /// /// Идентификатор приложения. /// # Тип: Guid /// [ Display(Name = @"Идентификатор приложения"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } } /// /// Ответ на запрос удаления приложения /// [ Display(Name = @"Ответ на запрос удаления приложения") ] public partial class DeleteAppResponseModel { /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public DeleteAppResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения упрощённого приложения /// [ Display(Name = @"Ошибка запроса получения упрощённого приложения") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос на получение кода для перехода в приложение /// [ Display(Name = @"Запрос на получение кода для перехода в приложение") ] public partial class GetAppCodeRequestModel { /// /// Идентификатор приложения. /// # Тип: Guid /// [ Display(Name = @"Идентификатор приложения"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } } /// /// Ответ на запрос на получение кода для перехода в приложение /// [ Display(Name = @"Ответ на запрос на получение кода для перехода в приложение") ] public partial class GetAppCodeResponseModel { /// /// Код /// [ Display(Name = @"Код") ] public string? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetAppCodeResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения ссылки на приложение /// [ Display(Name = @"Ошибка запроса получения ссылки на приложение") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } /// /// Ошибка наличия публичного ключа у партнера /// [ Display(Name = @"Ошибка наличия публичного ключа у партнера") ] public GetAppCodeResponseModel.ErrorModel.PartnerKeyDoesNotExistModel? PartnerKeyDoesNotExist { get; set; } /// /// Приложение не в статусе ACTIVE /// [ Display(Name = @"Приложение не в статусе ACTIVE") ] public GetAppCodeResponseModel.ErrorModel.AppIsInactiveModel? AppIsInactive { get; set; } /// /// Ошибка наличия публичного ключа у партнера /// [ Display(Name = @"Ошибка наличия публичного ключа у партнера") ] public partial class PartnerKeyDoesNotExistModel { } /// /// Приложение не в статусе ACTIVE /// [ Display(Name = @"Приложение не в статусе ACTIVE") ] public partial class AppIsInactiveModel { } } } /// /// Запрос получения количества приложений /// [ Display(Name = @"Запрос получения количества приложений") ] public partial class GetAppCountRequestModel { /// /// Фильтр /// [ Display(Name = @"Фильтр") ] public AppFilterModel? Filter { get; set; } } /// /// Ответ на запрос получения количества приложений /// [ Display(Name = @"Ответ на запрос получения количества приложений") ] public partial class GetAppCountResponseModel { /// /// Всего приложений /// [ Display(Name = @"Всего приложений") ] public int Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetAppCountResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения количества приложений /// [ Display(Name = @"Ошибка запроса получения количества приложений") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос получения списка приложений /// [ Display(Name = @"Запрос получения списка приложений") ] public partial class GetAppListRequestModel { /// /// Фильтр /// [ Display(Name = @"Фильтр") ] public AppFilterModel? Filter { get; set; } /// /// Пагинация /// [ Display(Name = @"Пагинация") ] public AppPagingModel? Paging { get; set; } } /// /// Ответ на запрос получения списка приложений /// [ Display(Name = @"Ответ на запрос получения списка приложений") ] public partial class GetAppListResponseModel { /// /// Приложение /// [ Display(Name = @"Приложение") ] public AppModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetAppListResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения списка приложений /// [ Display(Name = @"Ошибка запроса получения списка приложений") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос получения количества упрощённых приложений /// [ Display(Name = @"Запрос получения количества упрощённых приложений") ] public partial class GetAppLiteCountRequestModel { /// /// Упрощённый фильтр /// [ Display(Name = @"Упрощённый фильтр") ] public AppLiteFilterModel? Filter { get; set; } } /// /// Ответ на запрос получения количества упрощённых приложений /// [ Display(Name = @"Ответ на запрос получения количества упрощённых приложений") ] public partial class GetAppLiteCountResponseModel { /// /// Всего упрощенных приложений /// [ Display(Name = @"Всего упрощенных приложений") ] public int Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetAppLiteCountResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения списка приложений /// [ Display(Name = @"Ошибка запроса получения списка приложений") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос получения списка упрощённого приложений /// [ Display(Name = @"Запрос получения списка упрощённого приложений") ] public partial class GetAppLiteListRequestModel { /// /// Упрощённый фильтр /// [ Display(Name = @"Упрощённый фильтр") ] public AppLiteFilterModel? Filter { get; set; } /// /// Пагинация /// [ Display(Name = @"Пагинация") ] public AppLitePagingModel? Paging { get; set; } } /// /// Ответ на запрос получения списка упрощённых приложений /// [ Display(Name = @"Ответ на запрос получения списка упрощённых приложений") ] public partial class GetAppLiteListResponseModel { /// /// Упрощённое приложение /// [ Display(Name = @"Упрощённое приложение") ] public AppLiteModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetAppLiteListResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения списка приложений /// [ Display(Name = @"Ошибка запроса получения списка приложений") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос получения упрощённого приложения /// [ Display(Name = @"Запрос получения упрощённого приложения") ] public partial class GetAppLiteRequestModel { /// /// Идентификатор приложения. /// # Тип: Guid /// [ Display(Name = @"Идентификатор приложения"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } } /// /// Ответ на запрос получения упрощённого приложения /// [ Display(Name = @"Ответ на запрос получения упрощённого приложения") ] public partial class GetAppLiteResponseModel { /// /// Упрощённое приложение /// [ Display(Name = @"Упрощённое приложение") ] public AppLiteModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetAppLiteResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения упрощённого приложения /// [ Display(Name = @"Ошибка запроса получения упрощённого приложения") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос получения приложения /// [ Display(Name = @"Запрос получения приложения") ] public partial class GetAppRequestModel { /// /// Идентификатор приложения. /// # Тип: Guid /// [ Display(Name = @"Идентификатор приложения"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } } /// /// Ответ на запрос получения приложения /// [ Display(Name = @"Ответ на запрос получения приложения") ] public partial class GetAppResponseModel { /// /// Приложение /// [ Display(Name = @"Приложение") ] public AppModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetAppResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения приложения /// [ Display(Name = @"Ошибка запроса получения приложения") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос сохранения приложения /// [ Display(Name = @"Запрос сохранения приложения") ] public partial class PostAppRequestModel { /// /// Приложение /// [ Display(Name = @"Приложение"), CustomRequired ] public AppModel Data { get; set; } = null!; } /// /// Ответ на запрос сохранения приложения /// [ Display(Name = @"Ответ на запрос сохранения приложения") ] public partial class PostAppResponseModel { /// /// Приложение /// [ Display(Name = @"Приложение") ] public AppModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public PostAppResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса сохранения приложения /// [ Display(Name = @"Ошибка запроса сохранения приложения") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } /// /// Ошибка сохранения /// [ Display(Name = @"Ошибка сохранения") ] public AppModel.SavingErrorModel? Saving { get; set; } } } /// /// Ошибки валидации. /// Эти проверки выполняются до обращения в базу данных /// [ Display(Name = @"Ошибки валидации"), Description(@"Эти проверки выполняются до обращения в базу данных") ] public partial class ValidationErrorModel { /// /// Путь к полю в формате наименования прото /// [ Display(Name = @"Путь к полю в формате наименования прото"), CustomRequired ] public string Path { get; set; } = null!; /// /// Валидационное сообщение /// [ Display(Name = @"Валидационное сообщение"), CustomRequired ] public string Message { get; set; } = null!; } /// /// Запрос на удаление шаблона уведомления /// [ Display(Name = @"Запрос на удаление шаблона уведомления") ] public partial class DeleteNotificationTemplateRequestModel { /// /// Идентификатор шаблона уведомления. /// # Тип: Guid /// [ Display(Name = @"Идентификатор шаблона уведомления"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } } /// /// Ответ на запрос удаления шаблона уведомления /// [ Display(Name = @"Ответ на запрос удаления шаблона уведомления") ] public partial class DeleteNotificationTemplateResponseModel { /// /// Ошибка при удалении /// [ Display(Name = @"Ошибка при удалении") ] public DeleteNotificationTemplateResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка удаления шаблона уведомления /// [ Display(Name = @"Ошибка удаления шаблона уведомления") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос получения количества шаблонов уведомлений /// [ Display(Name = @"Запрос получения количества шаблонов уведомлений") ] public partial class GetNotificationTemplateCountRequestModel { /// /// Фильтр /// [ Display(Name = @"Фильтр") ] public NotificationTemplateFilterModel? Filter { get; set; } } /// /// Ответ на запрос получения количества шаблонов уведомлений /// [ Display(Name = @"Ответ на запрос получения количества шаблонов уведомлений") ] public partial class GetNotificationTemplateCountResponseModel { /// /// Всего шаблонов уведомлений /// [ Display(Name = @"Всего шаблонов уведомлений") ] public int Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetNotificationTemplateCountResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения количества шаблонов уведомлений /// [ Display(Name = @"Ошибка запроса получения количества шаблонов уведомлений") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос получения списка шаблонов уведомлений /// [ Display(Name = @"Запрос получения списка шаблонов уведомлений") ] public partial class GetNotificationTemplateListRequestModel { /// /// Фильтр /// [ Display(Name = @"Фильтр") ] public NotificationTemplateFilterModel? Filter { get; set; } /// /// Пагинация /// [ Display(Name = @"Пагинация") ] public NotificationTemplatePagingModel? Paging { get; set; } } /// /// Ответ на запрос получения списка шаблонов уведомлений /// [ Display(Name = @"Ответ на запрос получения списка шаблонов уведомлений") ] public partial class GetNotificationTemplateListResponseModel { /// /// Шаблон уведомления /// [ Display(Name = @"Шаблон уведомления") ] public NotificationTemplateModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetNotificationTemplateListResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения списка шаблонов уведомлений /// [ Display(Name = @"Ошибка запроса получения списка шаблонов уведомлений") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос получения шаблона уведомления /// [ Display(Name = @"Запрос получения шаблона уведомления") ] public partial class GetNotificationTemplateRequestModel { /// /// Идентификатор шаблона уведомления. /// # Тип: Guid /// [ Display(Name = @"Идентификатор шаблона уведомления"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } } /// /// Ответ на запрос получения шаблона уведомления /// [ Display(Name = @"Ответ на запрос получения шаблона уведомления") ] public partial class GetNotificationTemplateResponseModel { /// /// Шаблон уведомления /// [ Display(Name = @"Шаблон уведомления") ] public NotificationTemplateModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetNotificationTemplateResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения шаблона уведомления /// [ Display(Name = @"Ошибка запроса получения шаблона уведомления") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Пагинация шаблонов уведомлений /// [ Display(Name = @"Пагинация шаблонов уведомлений") ] public partial class NotificationTemplatePagingModel { /// /// Тип значения сортировки. /// Если значение не передано, то будет взято значение по умолчанию. /// # По умолчанию: CHANGED_AT /// [ Display(Name = @"Тип значения сортировки"), Description(@"Если значение не передано, то будет взято значение по умолчанию. По умолчанию: CHANGED_AT") ] public NotificationTemplatePagingModel.NotificationTemplatePagingOrderByType OrderByType { get; set; } = NotificationTemplatePagingOrderByType.ChangedAt; /// /// Тип направления сортировки. /// # По умолчанию: DESC /// [ Display(Name = @"Тип направления сортировки"), Description(@"По умолчанию: DESC") ] public NotificationTemplatePagingModel.NotificationTemplatePagingDirectionType DirectionType { get; set; } = NotificationTemplatePagingDirectionType.Desc; /// /// Количество записей на страницу. /// Если значение 0 (не передано), то будет взято значение по умолчанию. /// # Диапазон: 0..100. /// # По умолчанию: 20 /// [ Display(Name = @"Количество записей на страницу"), Description(@"Если значение 0 (не передано), то будет взято значение по умолчанию. Диапазон: 0..100. По умолчанию: 20"), CustomRange(0, 100) ] public int Limit { get; set; } = 20; /// /// Сдвиг. /// # Диапазон: 0..2147483647 /// [ Display(Name = @"Сдвиг"), Description(@"Диапазон: 0..2147483647"), CustomRange(0, 2147483647) ] public int Offset { get; set; } /// /// Справочник типов значений сортировки. /// # Тип: byte /// [ Description("Тип: byte") ] public enum NotificationTemplatePagingOrderByType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("ORDER_BY_TYPE_UNKNOWN") ] Unknown = 0, /// /// Дата последнего изменения /// [ Display(Name = @"Дата последнего изменения"), JsonPropertyName("CHANGED_AT") ] ChangedAt = 1, /// /// Дата создания /// [ Display(Name = @"Дата создания"), JsonPropertyName("CREATED_AT") ] CreatedAt = 2, /// /// По рангу для поиска по тексту. /// Применяется когда передано поле для поиска по тексту. /// В случае если текстовое поле не передано, применяется значение по умолчанию /// [ Display(Name = @"По рангу для поиска по тексту"), Description(@"Применяется когда передано поле для поиска по тексту. В случае если текстовое поле не передано, применяется значение по умолчанию"), JsonPropertyName("RANK") ] Rank = 3, } /// /// Справочник типов направлений сортировки. /// # Тип: byte /// [ Description("Тип: byte") ] public enum NotificationTemplatePagingDirectionType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("DIRECTION_TYPE_UNKNOWN") ] Unknown = 0, /// /// От большего к меньшему /// [ Display(Name = @"От большего к меньшему"), JsonPropertyName("DESC") ] Desc = 1, /// /// От меньшего к большему /// [ Display(Name = @"От меньшего к большему"), JsonPropertyName("ASC") ] Asc = 2, } } /// /// Запрос сохранения приложения /// [ Display(Name = @"Запрос сохранения приложения") ] public partial class PostNotificationTemplateRequestModel { /// /// Приложение /// [ Display(Name = @"Приложение"), CustomRequired ] public NotificationTemplateModel Data { get; set; } = null!; } /// /// Ответ на запрос сохранения шаблона уведомления /// [ Display(Name = @"Ответ на запрос сохранения шаблона уведомления") ] public partial class PostNotificationTemplateResponseModel { /// /// Шаблон уведомления /// [ Display(Name = @"Шаблон уведомления") ] public NotificationTemplateModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public PostNotificationTemplateResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса сохранения шаблона уведомления /// [ Display(Name = @"Ошибка запроса сохранения шаблона уведомления") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } /// /// Ошибка сохранения /// [ Display(Name = @"Ошибка сохранения") ] public NotificationTemplateModel.SavingErrorModel? Saving { get; set; } /// /// Некорректный тип данных для переменной в шаблоне /// [ Display(Name = @"Некорректный тип данных для переменной в шаблоне") ] public PostNotificationTemplateResponseModel.ErrorModel.IncorrectDataTypeErrorModel? IncorrectDataType { get; set; } /// /// Некорректное наименование переменной в шаблоне /// [ Display(Name = @"Некорректное наименование переменной в шаблоне") ] public PostNotificationTemplateResponseModel.ErrorModel.IncorrectVariableNameErrorModel? IncorrectVariableNameError { get; set; } /// /// Некорректный формат Mustache тегов /// [ Display(Name = @"Некорректный формат Mustache тегов") ] public PostNotificationTemplateResponseModel.ErrorModel.IncorrectTagFormatErrorModel? IncorrectTagFormatError { get; set; } /// /// Некорректный тип данных для переменной в шаблоне. /// Список допустимых типов данных: /// - Number; /// - Date; /// - Phone; /// - Time /// [ Display(Name = @"Некорректный тип данных для переменной в шаблоне"), Description(@"Список допустимых типов данных: - Number; - Date; - Phone; - Time") ] public partial class IncorrectDataTypeErrorModel { } /// /// Некорректное наименование переменной в шаблоне /// [ Display(Name = @"Некорректное наименование переменной в шаблоне") ] public partial class IncorrectVariableNameErrorModel { } /// /// Некорректный формат Mustache тегов /// [ Display(Name = @"Некорректный формат Mustache тегов") ] public partial class IncorrectTagFormatErrorModel { } } } /// /// Запрос создания связи шаблона уведомления и партнера /// [ Display(Name = @"Запрос создания связи шаблона уведомления и партнера") ] public partial class PutNotificationTemplatePartnerAttachRequestModel { /// /// Связь шаблона уведомления и партнера /// [ Display(Name = @"Связь шаблона уведомления и партнера"), CustomRequired ] public NotificationTemplatePartnerModel NotificationTemplatePartner { get; set; } = null!; } /// /// Ответ на запрос создания связи шаблона уведомления и партнера /// [ Display(Name = @"Ответ на запрос создания связи шаблона уведомления и партнера") ] public partial class PutNotificationTemplatePartnerAttachResponseModel { /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public PutNotificationTemplatePartnerAttachResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса на создание шаблона уведомления и партнера /// [ Display(Name = @"Ошибка запроса на создание шаблона уведомления и партнера") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } /// /// Ошибка сохранения /// [ Display(Name = @"Ошибка сохранения") ] public NotificationTemplatePartnerModel.SavingErrorModel? Saving { get; set; } } } /// /// Запрос удаления связи шаблона уведомления и партнера /// [ Display(Name = @"Запрос удаления связи шаблона уведомления и партнера") ] public partial class PutNotificationTemplatePartnerDetachRequestModel { /// /// Связь шаблона уведомления и партнера /// [ Display(Name = @"Связь шаблона уведомления и партнера"), CustomRequired ] public NotificationTemplatePartnerModel NotificationTemplatePartner { get; set; } = null!; } /// /// Ответ на запрос удаление связи шаблона уведомления и партнера /// [ Display(Name = @"Ответ на запрос удаление связи шаблона уведомления и партнера") ] public partial class PutNotificationTemplatePartnerDetachResponseModel { /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public PutNotificationTemplatePartnerDetachResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса на удаление шаблона уведомления и партнера /// [ Display(Name = @"Ошибка запроса на удаление шаблона уведомления и партнера") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Уведомление /// [ Display(Name = @"Уведомление") ] public partial class NotificationModel { /// /// Идентификатор приложения. /// # Тип: Guid /// [ Display(Name = @"Идентификатор приложения"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid AppId { get; set; } /// /// Свойство навигации /// [ JsonIgnore ] public AppModel App { get; set; } = null!; /// /// ОРПОН. /// # Диапазон 1..9223372036854775807 /// [ Display(Name = @"ОРПОН"), Description(@"Диапазон 1..9223372036854775807"), CustomRequired ] public long Orpon { get; set; } /// /// Номер квартиры. /// # Диапазон: 1..150 /// [ Display(Name = @"Номер квартиры"), Description(@"Диапазон: 1..150"), CustomRequired, CustomRange(1, 150) ] public List RoomNumbers { get; set; } = new(0); /// /// Идентификатор шаблона. /// # Тип: Guid /// [ Display(Name = @"Идентификатор шаблона"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid TemplateId { get; set; } // WARNING Не удалось найти свойство навигации для поля Notification.template_id /// /// Значения для подстановки в текст шаблона /// [ Display(Name = @"Значения для подстановки в текст шаблона"), CustomRequired ] public Dictionary Values { get; set; } = new(0); /// /// Полезная нагрузка /// [ Display(Name = @"Полезная нагрузка") ] public Dictionary Payload { get; set; } = new(0); } /// /// Запрос сохранения уведомления /// [ Display(Name = @"Запрос сохранения уведомления") ] public partial class PostNotificationRequestModel { /// /// Уведомление /// [ Display(Name = @"Уведомление"), CustomRequired ] public NotificationModel Data { get; set; } = null!; } /// /// Ответ на запрос сохранения уведомления /// [ Display(Name = @"Ответ на запрос сохранения уведомления") ] public partial class PostNotificationResponseModel { /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public PostNotificationResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса сохранения уведомления /// [ Display(Name = @"Ошибка запроса сохранения уведомления") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } /// /// Значения для подстановки не соответствуют шаблону уведомления /// [ Display(Name = @"Значения для подстановки не соответствуют шаблону уведомления") ] public PostNotificationResponseModel.ErrorModel.ValuesErrorModel? Values { get; set; } /// /// Приложение находится в статусе \"Заблокировано\" /// [ Display(Name = @"Приложение находится в статусе ""Заблокировано""") ] public PostNotificationResponseModel.ErrorModel.AppBlockedErrorModel? AppBlocked { get; set; } /// /// Ошибка связанная с назначениями приложения /// [ Display(Name = @"Ошибка связанная с назначениями приложения") ] public PostNotificationResponseModel.ErrorModel.AppAssignmentErrorModel? AppAssignment { get; set; } /// /// Значения для подстановки не соответствуют шаблону уведомления /// [ Display(Name = @"Значения для подстановки не соответствуют шаблону уведомления") ] public partial class ValuesErrorModel { } /// /// Приложение находится в статусе \"Заблокировано\" /// [ Display(Name = @"Приложение находится в статусе ""Заблокировано""") ] public partial class AppBlockedErrorModel { } /// /// Ошибка свзяанная с назначениями приложения. /// Причины: /// - Приложение назначено не только по ОРПОНу или ОРПОНу и номеру квартиры; /// - Приложение не назначено на переданные orpon и room_number /// [ Display(Name = @"Ошибка свзяанная с назначениями приложения"), Description(@"Причины: - Приложение назначено не только по ОРПОНу или ОРПОНу и номеру квартиры; - Приложение не назначено на переданные orpon и room_number") ] public partial class AppAssignmentErrorModel { } } } /// /// Запрос на удаление партнёра /// [ Display(Name = @"Запрос на удаление партнёра") ] public partial class DeletePartnerRequestModel { /// /// Идентификатор партнёра. /// # Тип: Guid /// [ Display(Name = @"Идентификатор партнёра"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } } /// /// Ответ на запрос удаления партнёра /// [ Display(Name = @"Ответ на запрос удаления партнёра") ] public partial class DeletePartnerResponseModel { /// /// Ошибка при удалении /// [ Display(Name = @"Ошибка при удалении") ] public DeletePartnerResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка удаления партнёра /// [ Display(Name = @"Ошибка удаления партнёра") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } /// /// У партнера есть хотя бы одно приложение /// [ Display(Name = @"У партнера есть хотя бы одно приложение") ] public DeletePartnerResponseModel.ErrorModel.LinkedAppExistsModel? LinkedAppExists { get; set; } /// /// У партнера есть хотя бы одно приложение /// [ Display(Name = @"У партнера есть хотя бы одно приложение") ] public partial class LinkedAppExistsModel { } } } /// /// Запрос получения адреса по ОРПОНу /// [ Display(Name = @"Запрос получения адреса по ОРПОНу") ] public partial class GetPartnerAddressOrponRequestModel { /// /// ОРПОН. /// # Диапазон: 1..9223372036854775807 /// [ Display(Name = @"ОРПОН"), Description(@"Диапазон: 1..9223372036854775807"), CustomRequired, CustomRange(1, 9223372036854775807) ] public long Orpon { get; set; } } /// /// Ответ на запрос получения адреса по ОРПОНу /// [ Display(Name = @"Ответ на запрос получения адреса по ОРПОНу") ] public partial class GetPartnerAddressOrponResponseModel { /// /// Адрес /// [ Display(Name = @"Адрес") ] public string? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetPartnerAddressOrponResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } /// /// Доступ запрещен /// [ Display(Name = @"Доступ запрещен") ] public GetPartnerAddressOrponResponseModel.ErrorModel.PermissionDeniedModel? PermissionDenied { get; set; } /// /// Доступ запрещен. /// Причины: /// - У партнера нет разрешения на переданный ОРПОН /// [ Display(Name = @"Доступ запрещен"), Description(@"Причины: - У партнера нет разрешения на переданный ОРПОН") ] public partial class PermissionDeniedModel { } } } /// /// Запрос получения количества партнеров /// [ Display(Name = @"Запрос получения количества партнеров") ] public partial class GetPartnerCountRequestModel { /// /// Фильтр /// [ Display(Name = @"Фильтр") ] public PartnerFilterModel? Filter { get; set; } } /// /// Ответ на запрос получения количества партнеров /// [ Display(Name = @"Ответ на запрос получения количества партнеров") ] public partial class GetPartnerCountResponseModel { /// /// Всего партнеров /// [ Display(Name = @"Всего партнеров") ] public int Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetPartnerCountResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения количества партнеров /// [ Display(Name = @"Ошибка запроса получения количества партнеров") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос получения списка партнеров /// [ Display(Name = @"Запрос получения списка партнеров") ] public partial class GetPartnerListRequestModel { /// /// Фильтр /// [ Display(Name = @"Фильтр") ] public PartnerFilterModel? Filter { get; set; } /// /// Пагинация /// [ Display(Name = @"Пагинация") ] public PartnerPagingModel? Paging { get; set; } } /// /// Ответ на запрос получения списка партнеров /// [ Display(Name = @"Ответ на запрос получения списка партнеров") ] public partial class GetPartnerListResponseModel { /// /// Партнер /// [ Display(Name = @"Партнер") ] public PartnerModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetPartnerListResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения списка партнеров /// [ Display(Name = @"Ошибка запроса получения списка партнеров") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос получения партнера /// [ Display(Name = @"Запрос получения партнера") ] public partial class GetPartnerRequestModel { /// /// Идентификатор партнера. /// # Тип: Guid /// [ Display(Name = @"Идентификатор партнера"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Id { get; set; } } /// /// Ответ на запрос получения партнера /// [ Display(Name = @"Ответ на запрос получения партнера") ] public partial class GetPartnerResponseModel { /// /// Партнер /// [ Display(Name = @"Партнер") ] public PartnerModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetPartnerResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса получения партнера /// [ Display(Name = @"Ошибка запроса получения партнера") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } } } /// /// Запрос получения токена /// [ Display(Name = @"Запрос получения токена") ] public partial class GetPartnerTokenRequestModel { /// /// Код. /// # Тип: Guid /// [ Display(Name = @"Код"), Description(@"Тип: Guid"), CustomRequired, CustomPattern(@"^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$") ] public Guid Code { get; set; } /// /// Тип ответа. /// # Допустимые значения: \"id_token\", \"token\", \"id_token token\" /// [ Display(Name = @"Тип ответа"), Description(@"Допустимые значения: ""id_token"", ""token"", ""id_token token"""), CustomRequired ] public string Response { get; set; } = null!; /// /// Ваучер /// [ Display(Name = @"Ваучер"), CustomRequired ] public string Nonce { get; set; } = null!; } /// /// Ответ на запрос получения токена /// [ Display(Name = @"Ответ на запрос получения токена") ] public partial class GetPartnerTokenResponseModel { /// /// Токен /// [ Display(Name = @"Токен") ] public TokenModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public GetPartnerTokenResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } /// /// Ошибка: пользователь не найден /// [ Display(Name = @"Ошибка: пользователь не найден") ] public GetPartnerTokenResponseModel.ErrorModel.UserNotFoundErrorModel? UserNotFound { get; set; } /// /// Ошибка: формирования токена /// [ Display(Name = @"Ошибка: формирования токена") ] public GetPartnerTokenResponseModel.ErrorModel.TokenGenerationErrorModel? TokenGenerationError { get; set; } /// /// Ошибка: некорректный код /// [ Display(Name = @"Ошибка: некорректный код") ] public GetPartnerTokenResponseModel.ErrorModel.CodeNotFoundOrExpiredErrorModel? CodeNotFoundOrExpiredError { get; set; } /// /// Переданный тип ответа не поддерживается /// [ Display(Name = @"Переданный тип ответа не поддерживается") ] public GetPartnerTokenResponseModel.ErrorModel.ResponseTypeIsNotSupportedModel? ResponseTypeIsNotSupported { get; set; } /// /// Доступ запрещен /// [ Display(Name = @"Доступ запрещен") ] public GetPartnerTokenResponseModel.ErrorModel.PermissionDeniedModel? PermissionDenied { get; set; } /// /// Данные пользователя для формирования идентификационного токена не найдены. /// Причины: /// - Пользователь с таким идентификатором отсутсвует в БД ключа; /// - Ошибка взаимодействия с сервисом Домохозяйств /// [ Display(Name = @"Данные пользователя для формирования идентификационного токена не найдены"), Description(@"Причины: - Пользователь с таким идентификатором отсутсвует в БД ключа; - Ошибка взаимодействия с сервисом Домохозяйств") ] public partial class UserNotFoundErrorModel { } /// /// Ошибка формирования токена. /// Причины: /// - Ошибка в сервисе KMS. /// - Ошибка в сервисе Identity /// [ Display(Name = @"Ошибка формирования токена"), Description(@"Причины: - Ошибка в сервисе KMS. - Ошибка в сервисе Identity") ] public partial class TokenGenerationErrorModel { } /// /// Некорректный код. /// Причины: /// - Передан неверный код; /// - Превышен допустимый временной интервал между запросом на формирование кода и запросом на получение идентификационного токена /// [ Display(Name = @"Некорректный код"), Description(@"Причины: - Передан неверный код; - Превышен допустимый временной интервал между запросом на формирование кода и запросом на получение идентификационного токена") ] public partial class CodeNotFoundOrExpiredErrorModel { } /// /// Переданный тип ответа не поддерживается /// [ Display(Name = @"Переданный тип ответа не поддерживается") ] public partial class ResponseTypeIsNotSupportedModel { } /// /// Доступ запрещен. /// Причины: /// - У запрашивающего приложения нет разрешения на выбранный тип ответа /// [ Display(Name = @"Доступ запрещен"), Description(@"Причины: - У запрашивающего приложения нет разрешения на выбранный тип ответа") ] public partial class PermissionDeniedModel { } } } /// /// Идентификационный токен /// [ Display(Name = @"Идентификационный токен") ] public partial class IdTokenPayloadModel { /// /// Идентификатор токена /// [ Display(Name = @"Идентификатор токена"), CustomRequired ] public string Jti { get; set; } = null!; /// /// Ваучер /// [ Display(Name = @"Ваучер"), CustomRequired ] public string Nonce { get; set; } = null!; /// /// Идентификатор пользователя, для которого выдан токен /// [ Display(Name = @"Идентификатор пользователя, для которого выдан токен"), CustomRequired ] public string Sub { get; set; } = null!; /// /// Роль /// [ Display(Name = @"Роль") ] public string? Role { get; set; } /// /// Номер телефона /// [ Display(Name = @"Номер телефона") ] public string? PhoneNumber { get; set; } /// /// Электронная почта /// [ Display(Name = @"Электронная почта") ] public string? Email { get; set; } /// /// Идентифкатор ОРПОН /// [ Display(Name = @"Идентифкатор ОРПОН") ] public string? Orpon { get; set; } /// /// Номер квартиры /// [ Display(Name = @"Номер квартиры") ] public string? Room { get; set; } /// /// Идентифкатор компании /// [ Display(Name = @"Идентифкатор компании") ] public string? CompanyId { get; set; } // WARNING Не удалось найти свойство навигации для поля IdTokenPayload.company_id /// /// Наименование компании /// [ Display(Name = @"Наименование компании") ] public string? CompanyName { get; set; } /// /// Время авторизации пользователя unix timestamp /// [ Display(Name = @"Время авторизации пользователя unix timestamp"), CustomRequired ] public string AuthTime { get; set; } = null!; /// /// Срок истечения действия токен unix timestamp /// [ Display(Name = @"Срок истечения действия токен unix timestamp"), CustomRequired ] public string Exp { get; set; } = null!; /// /// Сервис, выдавший токен /// [ Display(Name = @"Сервис, выдавший токен"), CustomRequired ] public string Iss { get; set; } = null!; /// /// Url сервиса, для которого выпустили токен /// [ Display(Name = @"Url сервиса, для которого выпустили токен"), CustomRequired ] public string Aud { get; set; } = null!; /// /// Идентификатор приложения партнёра /// [ Display(Name = @"Идентификатор приложения партнёра"), CustomRequired ] public string AppId { get; set; } = null!; /// /// Свойство навигации /// [ JsonIgnore ] public AppModel App { get; set; } = null!; /// /// КЛАДР /// [ Display(Name = @"КЛАДР") ] public string? KladrId { get; set; } // WARNING Не удалось найти свойство навигации для поля IdTokenPayload.kladr_id } /// /// Пагинация партнеров /// [ Display(Name = @"Пагинация партнеров") ] public partial class PartnerPagingModel { /// /// Тип значения сортировки. /// Если значение не передано, то будет взято значение по умолчанию. /// # По умолчанию: CHANGED_AT /// [ Display(Name = @"Тип значения сортировки"), Description(@"Если значение не передано, то будет взято значение по умолчанию. По умолчанию: CHANGED_AT") ] public PartnerPagingModel.PartnerPagingOrderByType OrderByType { get; set; } = PartnerPagingOrderByType.ChangedAt; /// /// Тип направления сортировки. /// # По умолчанию: DESC /// [ Display(Name = @"Тип направления сортировки"), Description(@"По умолчанию: DESC") ] public PartnerPagingModel.PartnerPagingDirectionType DirectionType { get; set; } = PartnerPagingDirectionType.Desc; /// /// Количество записей на страницу. /// Если значение 0 (не передано), то будет взято значение по умолчанию. /// # Диапазон: 0..100. /// # По умолчанию: 20 /// [ Display(Name = @"Количество записей на страницу"), Description(@"Если значение 0 (не передано), то будет взято значение по умолчанию. Диапазон: 0..100. По умолчанию: 20"), CustomRange(0, 100) ] public int Limit { get; set; } = 20; /// /// Сдвиг. /// # Диапазон: 0..2147483647 /// [ Display(Name = @"Сдвиг"), Description(@"Диапазон: 0..2147483647"), CustomRange(0, 2147483647) ] public int Offset { get; set; } /// /// Справочник типов значений сортировки. /// # Тип: byte /// [ Description("Тип: byte") ] public enum PartnerPagingOrderByType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("ORDER_BY_TYPE_UNKNOWN") ] Unknown = 0, /// /// Дата последнего изменения /// [ Display(Name = @"Дата последнего изменения"), JsonPropertyName("CHANGED_AT") ] ChangedAt = 1, /// /// Дата создания /// [ Display(Name = @"Дата создания"), JsonPropertyName("CREATED_AT") ] CreatedAt = 2, /// /// По рангу для поиска по тексту. /// Применяется когда передано поле для поиска по тексту. /// В случае если текстовое поле не передано, применяется значение по умолчанию /// [ Display(Name = @"По рангу для поиска по тексту"), Description(@"Применяется когда передано поле для поиска по тексту. В случае если текстовое поле не передано, применяется значение по умолчанию"), JsonPropertyName("RANK") ] Rank = 3, } /// /// Справочник типов направлений сортировки. /// # Тип: byte /// [ Description("Тип: byte") ] public enum PartnerPagingDirectionType : byte { /// /// Значение не указано /// [ Display(Name = @"Значение не указано"), JsonPropertyName("DIRECTION_TYPE_UNKNOWN") ] Unknown = 0, /// /// От большего к меньшему /// [ Display(Name = @"От большего к меньшему"), JsonPropertyName("DESC") ] Desc = 1, /// /// От меньшего к большему /// [ Display(Name = @"От меньшего к большему"), JsonPropertyName("ASC") ] Asc = 2, } } /// /// Запрос сохранения публичного ключа партнера /// [ Display(Name = @"Запрос сохранения публичного ключа партнера") ] public partial class PostPartnerPublicKeyRequestModel { /// /// Публичный ключ /// [ Display(Name = @"Публичный ключ"), CustomRequired ] public string PublicKey { get; set; } = null!; } /// /// Ответ на запрос сохранения публичного ключа партнера /// [ Display(Name = @"Ответ на запрос сохранения публичного ключа партнера") ] public partial class PostPartnerPublicKeyResponseModel { /// /// Партнер /// [ Display(Name = @"Партнер") ] public PartnerModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public PostPartnerPublicKeyResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса сохранения публичного ключа партнера /// [ Display(Name = @"Ошибка запроса сохранения публичного ключа партнера") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } /// /// Ошибка сохранения /// [ Display(Name = @"Ошибка сохранения") ] public PartnerModel.SavingErrorModel? Saving { get; set; } } } /// /// Запрос сохранения партнера /// [ Display(Name = @"Запрос сохранения партнера") ] public partial class PostPartnerRequestModel { /// /// Партнер /// [ Display(Name = @"Партнер"), CustomRequired ] public PartnerModel Data { get; set; } = null!; } /// /// Ответ на запрос сохранения партнера /// [ Display(Name = @"Ответ на запрос сохранения партнера") ] public partial class PostPartnerResponseModel { /// /// Партнер /// [ Display(Name = @"Партнер") ] public PartnerModel? Data { get; set; } /// /// Ошибка /// [ Display(Name = @"Ошибка") ] public PostPartnerResponseModel.ErrorModel? Error { get; set; } /// /// Ошибка запроса сохранения партнера /// [ Display(Name = @"Ошибка запроса сохранения партнера") ] public partial class ErrorModel { /// /// Ошибка валидации /// [ Display(Name = @"Ошибка валидации") ] public ValidationErrorModel? Validation { get; set; } /// /// Ошибка сохранения /// [ Display(Name = @"Ошибка сохранения") ] public PartnerModel.SavingErrorModel? Saving { get; set; } /// /// Api-Key обязателен при создании партнера /// [ Display(Name = @"Api-Key обязателен при создании партнера") ] public PostPartnerResponseModel.ErrorModel.MissingApiKeyOnCreationModel? MissingApiKeyOnCreation { get; set; } /// /// Api-Key обязателен при создании партнера /// [ Display(Name = @"Api-Key обязателен при создании партнера") ] public partial class MissingApiKeyOnCreationModel { } } } /// /// Ответ на запрос токена /// [ Display(Name = @"Ответ на запрос токена") ] public partial class TokenModel { /// /// ID токен в формате nested JWT /// [ Display(Name = @"ID токен в формате nested JWT"), CustomRequired, Editable(false) ] public string IdToken { get; set; } = null!; /// /// Авторизационный токен /// [ Display(Name = @"Авторизационный токен"), CustomRequired, Editable(false) ] public string AccessToken { get; set; } = null!; /// /// Тип авторизационного токена /// [ Display(Name = @"Тип авторизационного токена"), CustomRequired, Editable(false) ] public string TypeOfAccessToken { get; set; } = null!; /// /// Токен, используемый для получения нового Access Token после истечения срока действия текущего токена доступа /// [ Display(Name = @"Токен, используемый для получения нового Access Token после истечения срока действия текущего токена доступа"), CustomRequired, Editable(false) ] public string RefreshToken { get; set; } = null!; /// /// Время (в секундах), через которое истечет срок действия Access Token /// [ Display(Name = @"Время"), Editable(false) ] public int ExpiresIn { get; set; } } /// /// Запрос проверки доступности сервиса /// [ Display(Name = @"Запрос проверки доступности сервиса") ] public partial class GetSystemStatusRequestModel { } /// /// Ответ на запрос проверки доступности сервиса /// [ Display(Name = @"Ответ на запрос проверки доступности сервиса") ] public partial class GetSystemStatusResponseModel { }