Files
memory/server/internal/model/model.go
2025-12-14 20:33:33 +08:00

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"`
}