refactor: extract post dtos

This commit is contained in:
Tim
2025-08-04 20:37:20 +08:00
parent 6fa5978613
commit b41835d9c8
10 changed files with 311 additions and 215 deletions

View File

@@ -0,0 +1,14 @@
package com.openisle.dto;
import lombok.Data;
/**
* DTO representing a post or comment author.
*/
@Data
public class AuthorDto {
private Long id;
private String username;
private String avatar;
}

View File

@@ -0,0 +1,16 @@
package com.openisle.dto;
import lombok.Data;
/**
* DTO representing a post category.
*/
@Data
public class CategoryDto {
private Long id;
private String name;
private String description;
private String icon;
private String smallIcon;
}

View File

@@ -0,0 +1,21 @@
package com.openisle.dto;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* DTO representing a comment and its nested replies.
*/
@Data
public class CommentDto {
private Long id;
private String content;
private LocalDateTime createdAt;
private AuthorDto author;
private List<CommentDto> replies;
private List<ReactionDto> reactions;
private int reward;
}

View File

@@ -0,0 +1,16 @@
package com.openisle.dto;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
/**
* Detailed DTO for a post, including comments.
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class PostDetailDto extends PostSummaryDto {
private List<CommentDto> comments;
}

View File

@@ -0,0 +1,18 @@
package com.openisle.dto;
import lombok.Data;
import java.util.List;
/**
* Request body for creating or updating a post.
*/
@Data
public class PostRequest {
private Long categoryId;
private String title;
private String content;
private List<Long> tagIds;
private String captcha;
}

View File

@@ -0,0 +1,30 @@
package com.openisle.dto;
import com.openisle.model.PostStatus;
import lombok.Data;
import java.time.LocalDateTime;
import java.util.List;
/**
* Lightweight DTO for listing posts without comments.
*/
@Data
public class PostSummaryDto {
private Long id;
private String title;
private String content;
private LocalDateTime createdAt;
private AuthorDto author;
private CategoryDto category;
private List<TagDto> tags;
private long views;
private PostStatus status;
private LocalDateTime pinnedAt;
private LocalDateTime lastReplyAt;
private List<ReactionDto> reactions;
private List<AuthorDto> participants;
private boolean subscribed;
private int reward;
}

View File

@@ -0,0 +1,18 @@
package com.openisle.dto;
import com.openisle.model.ReactionType;
import lombok.Data;
/**
* DTO representing a reaction on a post or comment.
*/
@Data
public class ReactionDto {
private Long id;
private ReactionType type;
private String user;
private Long postId;
private Long commentId;
private int reward;
}

View File

@@ -0,0 +1,16 @@
package com.openisle.dto;
import lombok.Data;
/**
* DTO representing a tag.
*/
@Data
public class TagDto {
private Long id;
private String name;
private String description;
private String icon;
private String smallIcon;
}