using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using Volo.Abp.Application.Dtos; namespace Sozsoft.Platform.Forum; // Search DTOs public class SearchForumInput { [Required] public string Query { get; set; } public Guid? CategoryId { get; set; } public Guid? TopicId { get; set; } public bool SearchInCategories { get; set; } = true; public bool SearchInTopics { get; set; } = true; public bool SearchInPosts { get; set; } = true; public int Page { get; set; } = 1; public int PageSize { get; set; } = 20; } public class ForumSearchResultDto { public List Categories { get; set; } = new(); public List Topics { get; set; } = new(); public List Posts { get; set; } = new(); public int TotalCount { get; set; } } // Category DTOs public class ForumCategoryDto : FullAuditedEntityDto { public Guid? TenantId { get; set; } public string Name { get; set; } public string Slug { get; set; } public string Description { get; set; } public string Icon { get; set; } public int DisplayOrder { get; set; } public bool IsActive { get; set; } public bool IsLocked { get; set; } public int TopicCount { get; set; } public int PostCount { get; set; } public DateTime? LastPostDate { get; set; } public Guid? LastPostUserId { get; set; } } public class GetCategoriesInput : PagedAndSortedResultRequestDto { public bool? IsActive { get; set; } public string Search { get; set; } public GetCategoriesInput() { MaxResultCount = 10; SkipCount = 0; } } // Topic DTOs public class ForumTopicDto : FullAuditedEntityDto { public Guid? TenantId { get; set; } public string Title { get; set; } public string Content { get; set; } public Guid CategoryId { get; set; } public Guid AuthorId { get; set; } public string AuthorName { get; set; } public string AuthorTitle { get; set; } public string AuthorEmail { get; set; } public string AuthorPhoneNumber { get; set; } public string AuthorDepartment { get; set; } public int ViewCount { get; set; } public int ReplyCount { get; set; } public int LikeCount { get; set; } public bool IsPinned { get; set; } public bool IsLocked { get; set; } public bool IsSolved { get; set; } public Guid? LastPostId { get; set; } public DateTime? LastPostDate { get; set; } public Guid? LastPostUserId { get; set; } public string LastPostUserName { get; set; } } public class CreateForumTopicDto { public Guid? TenantId { get; set; } [Required] [StringLength(200)] public string Title { get; set; } [Required] public string Content { get; set; } [Required] public Guid CategoryId { get; set; } public bool IsPinned { get; set; } = false; public bool IsLocked { get; set; } = false; } public class UpdateForumTopicDto { public Guid? TenantId { get; set; } [Required] [StringLength(200)] public string Title { get; set; } [Required] public string Content { get; set; } public bool IsPinned { get; set; } public bool IsLocked { get; set; } public bool IsSolved { get; set; } } public class GetTopicsInput : PagedAndSortedResultRequestDto { public Guid? CategoryId { get; set; } public bool? IsPinned { get; set; } public bool? IsSolved { get; set; } public string Search { get; set; } } // Post DTOs public class ForumPostDto : FullAuditedEntityDto { public Guid? TenantId { get; set; } public Guid TopicId { get; set; } public string Content { get; set; } public Guid AuthorId { get; set; } public string AuthorName { get; set; } public string AuthorTitle { get; set; } public string AuthorEmail { get; set; } public string AuthorPhoneNumber { get; set; } public string AuthorDepartment { get; set; } public int LikeCount { get; set; } public bool IsAcceptedAnswer { get; set; } public Guid? ParentPostId { get; set; } } public class CreateForumPostDto { public Guid? TenantId { get; set; } [Required] public Guid TopicId { get; set; } [Required] public string Content { get; set; } public Guid? ParentPostId { get; set; } } public class UpdateForumPostDto { public Guid? TenantId { get; set; } [Required] public string Content { get; set; } public bool IsAcceptedAnswer { get; set; } } public class GetPostsInput : PagedAndSortedResultRequestDto { public Guid? TopicId { get; set; } public bool? IsAcceptedAnswer { get; set; } public string Search { get; set; } } // Statistics DTO public class ForumStatsDto { public int TotalCategories { get; set; } public int TotalTopics { get; set; } public int TotalPosts { get; set; } public long TotalUsers { get; set; } public long ActiveUsers { get; set; } }