Files
nl-game-api/internal/model/game.go
2026-08-14 13:17:03 +08:00

82 lines
4.8 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package model
import "gorm.io/plugin/soft_delete"
// 游戏引擎类型常量
const (
EngineCanvas = "canvas" // 2D 画布游戏
EngineThree = "three" // Three.js 三维游戏
EngineOnline = "online" // WebSocket 联机游戏
)
// Game 游戏表平台全部游戏37 款)
type Game struct {
ID int `gorm:"primaryKey" json:"id"` // 游戏ID
Code string `gorm:"size:32;uniqueIndex" json:"code"` // 游戏编码(前端据此加载组件)
Name string `gorm:"size:32" json:"name"` // 游戏名称
Category string `gorm:"size:16" json:"category"` // 分类:益智/街机/动作/射击/棋牌/休闲/3D/联机
Icon string `gorm:"size:16" json:"icon"` // emoji 图标
Description string `gorm:"size:255" json:"description"` // 玩法简介
Price int `gorm:"default:0" json:"price"` // 售价积分0=免费)
Engine string `gorm:"size:16" json:"engine"` // 实现引擎canvas/three/online
ScorePerPoint int `gorm:"default:10" json:"score_per_point"` // 多少游戏得分兑1积分0=不兑换)
MaxPointsPerPlay int `gorm:"default:50" json:"max_points_per_play"` // 单局积分上限(防刷)
PlayCount int `gorm:"default:0" json:"play_count"` // 累计游玩次数
Sort int `gorm:"default:0" json:"sort"` // 排序权重
Carousel int `gorm:"default:0" json:"carousel"` // 大厅轮播0=不参与,>0=参与且按值升序排列
Status int `gorm:"default:1" json:"status"` // 状态1上架 2下架
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"` // 创建时间int 时间戳)
UpdatedAt int64 `gorm:"autoUpdateTime" json:"updated_at"` // 更新时间int 时间戳)
DeletedAt soft_delete.DeletedAt `gorm:"default:0" json:"-"` // 软删除时间0=未删除)
}
// TableName 指定表名
func (Game) TableName() string { return "games" }
// GameRecord 游玩记录表:单机游戏每局结算写一条
type GameRecord struct {
ID int `gorm:"primaryKey" json:"id"` // 记录ID
UserID int `gorm:"index" json:"user_id"` // 玩家用户ID
GameID int `gorm:"index" json:"game_id"` // 游戏ID
Score int `gorm:"default:0" json:"score"` // 本局得分
PointsGained int `gorm:"default:0" json:"points_gained"` // 本局获得的平台积分
Duration int `gorm:"default:0" json:"duration"` // 游玩时长(秒)
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"` // 结算时间int 时间戳)
}
// TableName 指定表名
func (GameRecord) TableName() string { return "game_records" }
// 对战模式常量
const (
BattleModePVP = 1 // 好友联机
BattleModeAI = 2 // 人机对战
)
// 对战结果常量
const (
BattleResultWin = 1 // 胜利
BattleResultLose = 2 // 失败
BattleResultDraw = 3 // 平局
)
// BattleRecord 对战记录表:斗地主/象棋每局结束后,每个真人玩家写一条
type BattleRecord struct {
ID int `gorm:"primaryKey" json:"id"` // 记录ID
UserID int `gorm:"index" json:"user_id"` // 玩家用户ID
GameID int `json:"game_id"` // 游戏ID斗地主或象棋
RoomCode string `gorm:"size:16" json:"room_code"` // 房间邀请码
Mode int `gorm:"default:1" json:"mode"` // 模式1好友联机 2人机
// 注意AI 不在 GORM 常见缩写词表内,默认会被映射成 a_iprovider必须显式指定列名
AIProvider string `gorm:"size:16;column:ai_provider" json:"ai_provider"` // AI 提供方spark/deepseek/rule
AIDifficulty string `gorm:"size:16;column:ai_difficulty" json:"ai_difficulty"` // AI 难度easy/medium/hard
Result int `gorm:"default:1" json:"result"` // 结果1胜 2负 3平
PointsChange int `gorm:"default:0" json:"points_change"` // 积分变动(胜利奖励)
Duration int `gorm:"default:0" json:"duration"` // 对局时长(秒)
Detail string `gorm:"size:255" json:"detail"` // 对局详情摘要
CreatedAt int64 `gorm:"autoCreateTime" json:"created_at"` // 结算时间int 时间戳)
}
// TableName 指定表名
func (BattleRecord) TableName() string { return "battle_records" }