Files
lv8girl/internal/models/models.go
2026-02-23 23:50:04 +08:00

85 lines
3.0 KiB
Go

package models
import (
"time"
"gorm.io/gorm"
)
type User struct {
ID uint `gorm:"primaryKey" json:"id"`
Username string `gorm:"size:50;uniqueIndex;not null" json:"username"`
Email string `gorm:"size:100;uniqueIndex;not null" json:"email"`
PasswordHash string `gorm:"size:255;not null" json:"-"`
Avatar string `gorm:"size:255" json:"avatar"`
Role string `gorm:"size:20;default:user" json:"role"`
Status string `gorm:"size:20;default:pending" json:"status"`
LastActive *time.Time `json:"last_active"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}
func (User) TableName() string {
return "users"
}
type Discussion struct {
ID uint `gorm:"primaryKey" json:"id"`
UserID uint `gorm:"not null;index" json:"user_id"`
User User `gorm:"foreignKey:UserID" json:"user"`
Title string `gorm:"size:200;not null" json:"title"`
Content string `gorm:"type:text;not null" json:"content"`
ImagePath string `gorm:"size:255" json:"image_path"`
Status string `gorm:"size:20;default:pending" json:"status"`
Views int `gorm:"default:0" json:"views"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}
func (Discussion) TableName() string {
return "discussions"
}
type Comment struct {
ID uint `gorm:"primaryKey" json:"id"`
PostID uint `gorm:"not null;index" json:"post_id"`
UserID uint `gorm:"not null;index" json:"user_id"`
User User `gorm:"foreignKey:UserID" json:"user"`
Content string `gorm:"type:text;not null" json:"content"`
CreatedAt time.Time `json:"created_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}
func (Comment) TableName() string {
return "comments"
}
type Like struct {
ID uint `gorm:"primaryKey" json:"id"`
PostID uint `gorm:"not null;uniqueIndex:idx_post_user" json:"post_id"`
UserID uint `gorm:"not null;uniqueIndex:idx_post_user" json:"user_id"`
CreatedAt time.Time `json:"created_at"`
}
func (Like) TableName() string {
return "likes"
}
type PrivateMessage struct {
ID uint `gorm:"primaryKey" json:"id"`
FromUserID uint `gorm:"not null;index" json:"from_user_id"`
FromUser User `gorm:"foreignKey:FromUserID" json:"from_user"`
ToUserID uint `gorm:"not null;index" json:"to_user_id"`
ToUser User `gorm:"foreignKey:ToUserID" json:"to_user"`
Content string `gorm:"type:text;not null" json:"content"`
IsRead bool `gorm:"default:false" json:"is_read"`
CreatedAt time.Time `json:"created_at"`
DeletedAt gorm.DeletedAt `gorm:"index" json:"-"`
}
func (PrivateMessage) TableName() string {
return "private_messages"
}