using foodmarket.Domain.Common; namespace foodmarket.Domain.Platform; /// Платформенные настройки (singleton, single-row). Хранят SMTP-креды /// для отправки писем (forgot-password, инвайты, нотификации). Не tenant-scoped — /// общий конфиг для всей платформы, видны и меняются только Супер-администратором. /// /// SmtpPassword хранится зашифрованным через DataProtection API /// (`IDataProtectionProvider.CreateProtector("foodmarket.smtp")`); снаружи /// (контроллер) — никогда не возвращается в открытом виде, только has-password флаг. public class PlatformSettings : Entity { /// SMTP-сервер для отправки исходящей почты (НЕ IMAP — IMAP это /// для чтения входящей). public string? SmtpHost { get; set; } public int? SmtpPort { get; set; } /// Implicit TLS (SMTPS, обычно порт 465). Взаимоисключающий /// со SmtpStartTls (587). public bool SmtpUseSsl { get; set; } /// STARTTLS upgrade (обычно порт 587). По дефолту true в большинстве /// современных провайдеров (Gmail/Yandex/Mailgun). public bool SmtpStartTls { get; set; } = true; public string? SmtpUsername { get; set; } /// Зашифрованный SmtpPassword (base64 через DataProtection). /// Никогда не отдаётся в API-ответах. Установка только через PUT с /// явно переданным new-password полем. public string? SmtpPasswordEncrypted { get; set; } public string? FromEmail { get; set; } public string? FromName { get; set; } }