81 lines
3.6 KiB
C#
81 lines
3.6 KiB
C#
using System.ComponentModel.DataAnnotations;
|
|
namespace ROLAC.API.DTOs.Settings;
|
|
|
|
// ── Site settings ──────────────────────────────────────────────────────────
|
|
|
|
public class SiteSettingDto
|
|
{
|
|
public string SiteTitle { get; set; } = "";
|
|
public string? SiteTitleZh { get; set; }
|
|
public string DefaultLanguage { get; set; } = "en";
|
|
public string TimeZone { get; set; } = "";
|
|
public string DateFormat { get; set; } = "";
|
|
public string Currency { get; set; } = "";
|
|
}
|
|
|
|
public class UpdateSiteSettingRequest
|
|
{
|
|
[Required, MaxLength(200)] public string SiteTitle { get; set; } = "";
|
|
[MaxLength(200)] public string? SiteTitleZh { get; set; }
|
|
[Required, MaxLength(10)] public string DefaultLanguage { get; set; } = "en";
|
|
[Required, MaxLength(100)] public string TimeZone { get; set; } = "";
|
|
[Required, MaxLength(50)] public string DateFormat { get; set; } = "";
|
|
[Required, MaxLength(10)] public string Currency { get; set; } = "";
|
|
}
|
|
|
|
// ── Notification settings ──────────────────────────────────────────────────
|
|
// Secrets are never returned. The DTO exposes only whether each secret is configured; the UI
|
|
// shows a write-only field where a blank value on update means "keep the stored secret".
|
|
|
|
public class NotificationSettingDto
|
|
{
|
|
public bool EnableEmail { get; set; }
|
|
public string SmtpHost { get; set; } = "";
|
|
public int SmtpPort { get; set; }
|
|
public bool SmtpUseSsl { get; set; }
|
|
public string SmtpUser { get; set; } = "";
|
|
public string FromAddress { get; set; } = "";
|
|
public string FromName { get; set; } = "";
|
|
public bool HasSmtpPassword { get; set; }
|
|
|
|
public bool EnableLine { get; set; }
|
|
public bool HasLineChannelAccessToken { get; set; }
|
|
public bool HasLineChannelSecret { get; set; }
|
|
|
|
/// <summary>Read-only webhook URL to register in the Line console (derived from the request).</summary>
|
|
public string WebhookUrl { get; set; } = "";
|
|
}
|
|
|
|
public class UpdateNotificationSettingRequest
|
|
{
|
|
public bool EnableEmail { get; set; }
|
|
[MaxLength(200)] public string SmtpHost { get; set; } = "";
|
|
[Range(0, 65535)] public int SmtpPort { get; set; } = 587;
|
|
public bool SmtpUseSsl { get; set; } = true;
|
|
[MaxLength(200)] public string SmtpUser { get; set; } = "";
|
|
[MaxLength(200)] public string? FromAddress { get; set; }
|
|
[MaxLength(200)] public string? FromName { get; set; }
|
|
/// <summary>Blank = keep the stored password unchanged.</summary>
|
|
[MaxLength(500)] public string? SmtpPassword { get; set; }
|
|
|
|
public bool EnableLine { get; set; }
|
|
/// <summary>Blank = keep the stored token unchanged.</summary>
|
|
[MaxLength(500)] public string? LineChannelAccessToken { get; set; }
|
|
/// <summary>Blank = keep the stored secret unchanged.</summary>
|
|
[MaxLength(200)] public string? LineChannelSecret { get; set; }
|
|
}
|
|
|
|
// ── Test-send requests ─────────────────────────────────────────────────────
|
|
|
|
public class TestEmailRequest
|
|
{
|
|
/// <summary>Optional override; defaults to the current user's email when omitted.</summary>
|
|
[MaxLength(200), EmailAddress] public string? ToAddress { get; set; }
|
|
}
|
|
|
|
public class TestLineRequest
|
|
{
|
|
public int? MemberId { get; set; }
|
|
public int? GroupId { get; set; }
|
|
}
|