115 lines
3.0 KiB
Go
115 lines
3.0 KiB
Go
package model
|
|
|
|
import "time"
|
|
|
|
type User struct {
|
|
ID int64 `json:"id"`
|
|
Username string `json:"username"`
|
|
PasswordHash string `json:"-"`
|
|
Nickname string `json:"nickname"`
|
|
AvatarURL string `json:"avatar_url"`
|
|
Bio string `json:"bio"`
|
|
IsAdmin bool `json:"is_admin"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type Post struct {
|
|
ID int64 `json:"id"`
|
|
UserID int64 `json:"user_id"`
|
|
Content string `json:"content"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
User *User `json:"user,omitempty"`
|
|
Media []Media `json:"media,omitempty"`
|
|
Reactions []ReactionGroup `json:"reactions,omitempty"`
|
|
LikeCount int `json:"like_count"`
|
|
Liked bool `json:"liked"`
|
|
CommentCount int `json:"comment_count"`
|
|
}
|
|
|
|
type Media struct {
|
|
ID int64 `json:"id"`
|
|
PostID int64 `json:"post_id"`
|
|
MediaURL string `json:"media_url"`
|
|
MediaType string `json:"media_type"` // image, video
|
|
SortOrder int `json:"sort_order"`
|
|
}
|
|
|
|
type Comment struct {
|
|
ID int64 `json:"id"`
|
|
PostID int64 `json:"post_id"`
|
|
UserID int64 `json:"user_id"`
|
|
Content string `json:"content"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
User *User `json:"user,omitempty"`
|
|
LikeCount int `json:"like_count"`
|
|
}
|
|
|
|
type Like struct {
|
|
ID int64 `json:"id"`
|
|
PostID int64 `json:"post_id"`
|
|
UserID int64 `json:"user_id"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type Reaction struct {
|
|
ID int64 `json:"id"`
|
|
PostID int64 `json:"post_id"`
|
|
UserID int64 `json:"user_id"`
|
|
Emoji string `json:"emoji"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
type ReactionGroup struct {
|
|
Emoji string `json:"emoji"`
|
|
Count int `json:"count"`
|
|
Reacted bool `json:"reacted"`
|
|
}
|
|
|
|
// 请求/响应结构
|
|
type RegisterRequest struct {
|
|
Username string `json:"username" binding:"required,min=3,max=20"`
|
|
Password string `json:"password" binding:"required,min=6"`
|
|
Nickname string `json:"nickname" binding:"required,min=1,max=50"`
|
|
}
|
|
|
|
type LoginRequest struct {
|
|
Username string `json:"username" binding:"required"`
|
|
Password string `json:"password" binding:"required"`
|
|
}
|
|
|
|
type LoginResponse struct {
|
|
Token string `json:"token"`
|
|
User *User `json:"user"`
|
|
}
|
|
|
|
type CreatePostRequest struct {
|
|
Content string `json:"content" binding:"required,max=1000"`
|
|
MediaIDs []string `json:"media_ids"`
|
|
}
|
|
|
|
type CreateCommentRequest struct {
|
|
Content string `json:"content" binding:"required,max=500"`
|
|
}
|
|
|
|
type AddReactionRequest struct {
|
|
Emoji string `json:"emoji" binding:"required"`
|
|
}
|
|
|
|
type UpdateProfileRequest struct {
|
|
Nickname string `json:"nickname" binding:"max=50"`
|
|
Bio string `json:"bio" binding:"max=200"`
|
|
}
|
|
|
|
type HeatmapData struct {
|
|
Date string `json:"date"`
|
|
Count int `json:"count"`
|
|
}
|
|
|
|
type SearchRequest struct {
|
|
Query string `form:"q"`
|
|
StartDate string `form:"start_date"`
|
|
EndDate string `form:"end_date"`
|
|
Page int `form:"page,default=1"`
|
|
PageSize int `form:"page_size,default=20"`
|
|
}
|