sozsoft-platform/api/src/Sozsoft.Platform.Application.Contracts/Forum/ForumDtos.cs
2026-09-04 15:51:58 +03:00

183 lines
4.9 KiB
C#

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<ForumCategoryDto> Categories { get; set; } = new();
public List<ForumTopicDto> Topics { get; set; } = new();
public List<ForumPostDto> Posts { get; set; } = new();
public int TotalCount { get; set; }
}
// Category DTOs
public class ForumCategoryDto : FullAuditedEntityDto<Guid>
{
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<Guid>
{
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<Guid>
{
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; }
}