using System.ComponentModel.DataAnnotations; using System.Text.Json; using Tiku.Application.PlatformAdmin; using Tiku.Application.Tenancy; using Tiku.Domain.Common; using Tiku.Domain.Platform; using Tiku.Domain.Tenancy; namespace Tiku.Api.Contracts; public class PlatformCapabilityQueryDto { public Guid? TenantId { get; set; } [StringLength(50)] public string? Status { get; set; } [Range(1, 500)] public int Limit { get; set; } = 100; public PlatformCapabilityQuery ToQuery() => new(TenantId, Status, Limit); } public sealed class UpsertPlatformCrmConfigDto { public Guid? Id { get; set; } [Required] public Guid TenantId { get; set; } public bool Enabled { get; set; } [StringLength(2048)] public string? Url { get; set; } [StringLength(300)] public string? SecretRef { get; set; } [StringLength(200)] public string? FormName { get; set; } [StringLength(100)] public string? ExamType { get; set; } [Range(1, 120)] public int? TimeoutSeconds { get; set; } [Range(0, 86400)] public int? DelaySeconds { get; set; } [StringLength(50)] public string? AssignmentMode { get; set; } public JsonElement? AssignmentPool { get; set; } public JsonElement? AssignmentConfig { get; set; } public UpsertPlatformCrmConfigCommand ToCommand() => new(Id, TenantId, Enabled, Url, SecretRef, FormName, ExamType, TimeoutSeconds, DelaySeconds, AssignmentMode, AssignmentPool, AssignmentConfig); } public sealed class RetryPlatformCrmLeadDto { [Required] public Guid QueueId { get; set; } [StringLength(500)] public string? Note { get; set; } public PlatformCrmLeadRetryCommand ToCommand() => new(QueueId, Note); } public sealed class PlatformCrmLogQueryDto : PlatformCapabilityQueryDto { public Guid? QueueId { get; set; } } public sealed class UpsertPlatformSmsChannelDto { public Guid? Id { get; set; } [Required] public Guid TenantId { get; set; } [Required, StringLength(80)] public string Provider { get; set; } = "generic"; [Required, StringLength(200)] public string Name { get; set; } = string.Empty; [Required, StringLength(100)] public string Signature { get; set; } = string.Empty; [Required, StringLength(100)] public string Scene { get; set; } = "login"; public TenantExternalProviderStatus Status { get; set; } = TenantExternalProviderStatus.Disabled; [StringLength(300)] public string? SecretRef { get; set; } public int? Priority { get; set; } [Range(0, int.MaxValue)] public int? MonthlyQuota { get; set; } public JsonElement ConfigPublic { get; set; } = JsonDefaults.Object(); public JsonElement Metadata { get; set; } = JsonDefaults.Object(); public UpsertPlatformSmsChannelCommand ToCommand() => new(Id, TenantId, Provider, Name, Signature, Scene, Status, SecretRef, Priority, MonthlyQuota, ConfigPublic, Metadata); } public sealed class UpsertPlatformSmsTemplateDto { public Guid? Id { get; set; } [Required] public Guid TenantId { get; set; } [Required] public Guid ChannelId { get; set; } [Required, StringLength(120)] public string Code { get; set; } = string.Empty; [Required, StringLength(200)] public string Name { get; set; } = string.Empty; public SmsTemplateType Type { get; set; } = SmsTemplateType.Notification; public SmsTemplateAuditStatus AuditStatus { get; set; } = SmsTemplateAuditStatus.Draft; public SmsTemplateStatus Status { get; set; } = SmsTemplateStatus.Active; [StringLength(120)] public string? ProviderTemplateCode { get; set; } [Required, StringLength(1000)] public string Content { get; set; } = string.Empty; [StringLength(500)] public string? Remark { get; set; } public JsonElement Metadata { get; set; } = JsonDefaults.Object(); public UpsertPlatformSmsTemplateCommand ToCommand() => new(Id, TenantId, ChannelId, Code, Name, Type, AuditStatus, Status, ProviderTemplateCode, Content, Remark, Metadata); } public sealed class UpsertPlatformPaymentAppDto { public Guid? Id { get; set; } [Required, StringLength(100)] public string AppCode { get; set; } = string.Empty; [Required, StringLength(200)] public string AppName { get; set; } = string.Empty; public PlatformPaymentAppStatus Status { get; set; } = PlatformPaymentAppStatus.Disabled; [StringLength(100)] public string SettlementMode { get; set; } = "PlatformCollect"; [StringLength(500)] public string? Description { get; set; } public JsonElement Metadata { get; set; } = JsonDefaults.Object(); public UpsertPlatformPaymentAppCommand ToCommand() => new(Id, AppCode, AppName, Status, SettlementMode, Description, Metadata); } public sealed class UpsertPlatformPaymentChannelDto { public Guid? Id { get; set; } [Required] public Guid AppId { get; set; } [Required, StringLength(80)] public string Provider { get; set; } = "manual"; [StringLength(100)] public string Mode { get; set; } = "PlatformCollect"; public PlatformPaymentChannelStatus Status { get; set; } = PlatformPaymentChannelStatus.Disabled; [Required, StringLength(200)] public string DisplayName { get; set; } = string.Empty; [StringLength(300)] public string? SecretRef { get; set; } [StringLength(500)] public string? CallbackPath { get; set; } public int? Priority { get; set; } public JsonElement ConfigPublic { get; set; } = JsonDefaults.Object(); public JsonElement Metadata { get; set; } = JsonDefaults.Object(); public UpsertPlatformPaymentChannelCommand ToCommand() => new(Id, AppId, Provider, Mode, Status, DisplayName, SecretRef, CallbackPath, Priority, ConfigPublic, Metadata); } public sealed class UpsertPlatformTenantPaymentAppDto { [Required] public Guid TenantId { get; set; } [Required, StringLength(80)] public string Provider { get; set; } = "manual"; public TenantExternalProviderStatus Status { get; set; } = TenantExternalProviderStatus.Disabled; [StringLength(200)] public string? DisplayName { get; set; } [StringLength(300)] public string? SecretRef { get; set; } public int? Priority { get; set; } public JsonElement ConfigPublic { get; set; } = JsonDefaults.Object(); public JsonElement Metadata { get; set; } = JsonDefaults.Object(); public UpsertTenantExternalProviderCommand ToCommand() => new(TenantExternalProviderCapability.Payment, Provider, Status, DisplayName, SecretRef, Priority, ConfigPublic, Metadata); }