package dto import "with_you/internal/model" // ==================== Post DTOs ==================== // 从 dto.go 拆分而来:帖子与投票相关的请求/响应 DTO。 // 与 post_converter.go 同属帖子域。 // PostChannelBrief 帖子所属频道(列表/详情卡片展示) type PostChannelBrief struct { ID string `json:"id"` Name string `json:"name"` } // PostImageResponse 帖子图片响应 type PostImageResponse struct { ID string `json:"id"` URL string `json:"url"` ThumbnailURL string `json:"thumbnail_url"` PreviewURL string `json:"preview_url"` // 列表/网格预览图 PreviewURLLarge string `json:"preview_url_large"` // 详情页预览图 Width int `json:"width"` Height int `json:"height"` } // PostResponse 帖子响应(列表用) type PostResponse struct { ID string `json:"id"` UserID string `json:"user_id"` ChannelID *string `json:"channel_id,omitempty"` Title string `json:"title"` Content string `json:"content"` Segments model.MessageSegments `json:"segments,omitempty"` Images []PostImageResponse `json:"images"` Status string `json:"status,omitempty"` LikesCount int `json:"likes_count"` CommentsCount int `json:"comments_count"` FavoritesCount int `json:"favorites_count"` SharesCount int `json:"shares_count"` ViewsCount int `json:"views_count"` IsPinned bool `json:"is_pinned"` IsLocked bool `json:"is_locked"` IsVote bool `json:"is_vote"` CreatedAt string `json:"created_at"` UpdatedAt string `json:"updated_at"` ContentEditedAt string `json:"content_edited_at,omitempty"` Author *UserResponse `json:"author"` IsLiked bool `json:"is_liked"` IsFavorited bool `json:"is_favorited"` Channel *PostChannelBrief `json:"channel,omitempty"` } // ==================== Vote DTOs ==================== // CreateVotePostRequest 创建投票帖子请求 type CreateVotePostRequest struct { Title string `json:"title" binding:"required,max=200"` Content string `json:"content" binding:"max=2000"` ChannelID *string `json:"channel_id,omitempty"` Images []string `json:"images"` VoteOptions []string `json:"vote_options" binding:"required,min=2,max=10"` // ClientRequestID 客户端为本次发帖生成的幂等键(UUID)。 // 同一 userID + ClientRequestID 在 TTL 内重复提交时,后端直接返回首次创建的帖子,避免重复发帖。 ClientRequestID string `json:"client_request_id,omitempty"` } // CreatePostWithSegmentsRequest 创建帖子请求(含 segments) type CreatePostWithSegmentsRequest struct { Title string `json:"title" binding:"required,max=200"` Content string `json:"content"` Segments model.MessageSegments `json:"segments"` Images []string `json:"images"` ChannelID *string `json:"channel_id,omitempty"` // ClientRequestID 客户端为本次发帖生成的幂等键(UUID)。 // 同一 userID + ClientRequestID 在 TTL 内重复提交时,后端直接返回首次创建的帖子,避免重复发帖。 ClientRequestID string `json:"client_request_id,omitempty"` } // VoteOptionDTO 投票选项DTO type VoteOptionDTO struct { ID string `json:"id"` Content string `json:"content"` VotesCount int `json:"votes_count"` } // VoteResultDTO 投票结果DTO type VoteResultDTO struct { Options []VoteOptionDTO `json:"options"` TotalVotes int `json:"total_votes"` HasVoted bool `json:"has_voted"` VotedOptionID string `json:"voted_option_id,omitzero"` }