Раньше «удалить орг навсегда» было захардкожено на 30 дней архива. Теперь — глобальная системная настройка SuperAdmin'а. Domain/DB: - SystemSettings : Entity (single-row table system_settings). Поле ArchiveRetentionDays (int, default 30). Структура расширяется именованными полями по мере необходимости — без key-value generic'а. - Migration Phase4e_SystemSettings создаёт таблицу с default 30. - DevDataSeeder: при первом старте создаёт single-row дефолт. API: - GET /api/super-admin/settings — текущие настройки. - PUT /api/super-admin/settings — обновить с валидацией [0..3650]. Audit-log запись ActionType=EditSystemSettings с before/after. - SuperAdminOrganizationsController.Delete: хардкод 30 заменён чтением SystemSettings.ArchiveRetentionDays. При retention=0 — удаление доступно сразу после архивации. UI: - /super-admin/settings — страница «Системные настройки». Select из 6 опций (0/1/3/7/14/30), warning-баннер при выборе «Немедленно». Кнопка «Сохранить» disabled пока нет изменений. - В SuperAdminLayout убрана пометка «скоро» с пункта «Системные настройки» — раздел активен. - SuperAdminOrganizationsPage: кнопка «Удалить навсегда» теперь читает retentionDays из API; tooltip показывает оставшиеся дни «Доступно через X дн. (retention N)»; при retention=0 — всегда active для архивных орг. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
16 lines
945 B
C#
16 lines
945 B
C#
using foodmarket.Domain.Common;
|
||
|
||
namespace foodmarket.Domain.Organizations;
|
||
|
||
/// <summary>Глобальные настройки платформы (single-row table). Управляются
|
||
/// SuperAdmin'ом в /super-admin/settings. Не tenant-scoped — действует на всю
|
||
/// систему. Расширяется добавлением новых типизированных полей по мере
|
||
/// необходимости (KISS — без key-value generic'а).</summary>
|
||
public class SystemSettings : Entity
|
||
{
|
||
/// <summary>Сколько дней должен пройти после архивации, прежде чем
|
||
/// SuperAdmin может удалить организацию навсегда. 0 = удалять сразу
|
||
/// после архивации (для dev/staging). По умолчанию 30 (prod-safe).</summary>
|
||
public int ArchiveRetentionDays { get; set; } = 30;
|
||
}
|