using System.ComponentModel.DataAnnotations; using System.Text.Json.Serialization; namespace Nuuru.Server.Models.Requests { public class DeleteContentRequest { public string? Reason { get; set; } } public class EditTagsRequest { [Required] public IEnumerable Tags { get; set; } = new List(); } public class BanUserRequest { [Required] public Guid UserId { get; set; } public string? Reason { get; set; } public DateTime? BanUntil { get; set; } [JsonConverter(typeof(JsonStringEnumConverter))] public BanZone Zone { get; set; } = BanZone.Sitewide; } public class UnbanUserRequest { [Required] public Guid UserId { get; set; } [JsonConverter(typeof(JsonStringEnumConverter))] public BanZone? Zone { get; set; } } public class ModerationLogRequest { [Range(1, int.MaxValue)] public int Page { get; set; } = 1; [Range(1, 100)] public int PageSize { get; set; } = 50; } public class BansListRequest { [Range(1, int.MaxValue)] public int Page { get; set; } = 1; [Range(1, 100)] public int PageSize { get; set; } = 20; [JsonConverter(typeof(JsonStringEnumConverter))] public BanZone? Zone { get; set; } } public class CreateReportRequest { [Required] [JsonConverter(typeof(JsonStringEnumConverter))] public ReportTargetType TargetType { get; set; } [Required] [MaxLength(100)] public string TargetId { get; set; } = string.Empty; [Required] [MaxLength(2000)] public string Reason { get; set; } = string.Empty; } public class ResolveReportRequest { [MaxLength(2000)] public string? Note { get; set; } } public class ReportsListRequest { [Range(1, int.MaxValue)] public int Page { get; set; } = 1; [Range(1, 100)] public int PageSize { get; set; } = 20; [JsonConverter(typeof(JsonStringEnumConverter))] public ReportStatus? Status { get; set; } } public class LockCommentsRequest { [Required] public bool Locked { get; set; } public string? Reason { get; set; } } public class CreateBanAppealRequest { [Required] public Guid BanId { get; set; } [Required] [MaxLength(4000)] public string Reason { get; set; } = string.Empty; } public class CreateIpBanAppealRequest { [Required] public Guid IpBanId { get; set; } [Required] [MaxLength(4000)] public string Reason { get; set; } = string.Empty; } public class ResolveBanAppealRequest { [MaxLength(2000)] public string? Note { get; set; } public bool DenyFurtherAppeals { get; set; } = false; } public class CreateIpBanRequest { [Required] [MaxLength(45)] public string IpAddress { get; set; } = string.Empty; [MaxLength(2000)] public string? Reason { get; set; } public DateTime? BanUntil { get; set; } } public class IpBansListRequest { [Range(1, int.MaxValue)] public int Page { get; set; } = 1; [Range(1, 100)] public int PageSize { get; set; } = 20; public string? Search { get; set; } } public class BanAppealsListRequest { [Range(1, int.MaxValue)] public int Page { get; set; } = 1; [Range(1, 100)] public int PageSize { get; set; } = 20; [JsonConverter(typeof(JsonStringEnumConverter))] public BanAppealStatus? Status { get; set; } } }