Files
tnsu-approval-route/backend/Tnsu.ApprovalRoute.Domain/Entities/RequestListPartition.cs
T
gorbenko.pavel 82512eb1db
Tests / frontend-test (push) Successful in 44s
Tests / backend-test (push) Failing after 17m4s
Архивация списков (#13)
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/13
2026-08-19 09:08:36 +00:00

48 lines
3.1 KiB
C#

namespace Tnsu.ApprovalRoute.Domain.Entities;
/// <summary>
/// Один SharePoint-список данных из нумерованной серии по типу заявок.
///
/// Списки заявок нумерованные («&lt;Форма&gt; &lt;N&gt; — данные»): когда в текущем
/// списке набирается порог элементов, рядом создаётся следующая пара (партиция), а
/// прежняя остаётся архивом только для чтения. Эта таблица — реестр всей серии: без
/// неё поиск по заявкам типа не знает, по каким спискам искать.
///
/// Текущий (тот, куда идёт запись) список продолжает лежать в
/// <see cref="RequestType.ListId"/> — реестр его дублирует строкой с наибольшим
/// <see cref="Number"/>, но источником правды для записи остаётся RequestType.
///
/// Сайта у партиции нет намеренно: вся серия живёт на одном сайте — том, что указан
/// в <see cref="RequestType.SiteUrl"/> на момент создания партиции. Хранить его
/// отдельно на каждой партиции — заводить возможность архивам разъехаться по разным
/// сайтам, а такой сценарий не поддерживается ни провижинером (см.
/// SharePointListProvisioner — всегда пишет на siteUrl запрашивающего типа заявок),
/// ни поиском. Если сайт типа заявок когда-нибудь придётся сменить, старые партиции
/// нужно будет переносить осознанно, а не молча продолжать читать их со старого адреса.
/// </summary>
public class RequestListPartition
{
public int Id { get; set; }
public int RequestTypeId { get; set; }
public RequestType? RequestType { get; set; }
/// <summary>Номер партиции в серии, с 1. Уникален в пределах типа заявок.</summary>
public int Number { get; set; }
/// <summary>
/// Серверный относительный url списка — та же семантика, что у
/// <see cref="RequestType.ListId"/> (несмотря на имя, это url, а не GUID).
/// </summary>
public string ListId { get; set; } = string.Empty;
/// <summary>
/// Title списка на момент создания — для админки, чтобы показать серию без
/// похода в SharePoint за каждым заголовком. Может разойтись с фактическим,
/// если список переименовали вручную.
/// </summary>
public string? Title { get; set; }
public DateTimeOffset CreatedAt { get; set; }
}