Files
doucan/app/internal/models/models.go
2026-02-20 23:39:49 +08:00

141 lines
3.0 KiB
Go

package models
type Suit int
const (
SuitHeart Suit = iota
SuitDiamond
SuitClub
SuitSpade
SuitJoker
SuitSuper
)
type Card struct {
Suit Suit `json:"suit"`
Value int `json:"value"`
}
type CardType int
const (
CardTypeInvalid CardType = iota
CardTypeSingle
CardTypePair
CardTypeTriple
CardTypeTripleOne
CardTypeTriplePair
CardTypeStraight
CardTypeDoubleStraight
CardTypeBomb
CardTypeRocket
)
type Player struct {
ID string `json:"id"`
UserID string `json:"userId,omitempty"`
Name string `json:"name"`
Cards []Card `json:"cards,omitempty"`
CardCount int `json:"cardCount"`
IsReady bool `json:"isReady"`
IsOnline bool `json:"isOnline"`
}
type RoomState int
const (
RoomStateWaiting RoomState = iota
RoomStatePlaying
RoomStateFinished
)
type PlayRecord struct {
PlayerID string `json:"playerId"`
Cards []Card `json:"cards"`
CardType CardType `json:"cardType"`
}
type Room struct {
ID string `json:"id"`
Players []*Player `json:"players"`
CurrentTurn int `json:"currentTurn"`
State RoomState `json:"state"`
LastPlay *PlayRecord `json:"lastPlay,omitempty"`
LastWinner string `json:"lastWinner,omitempty"`
RoundCount int `json:"roundCount"`
MaxPlayers int `json:"maxPlayers"`
}
type MessageType string
const (
MsgTypeJoin MessageType = "join"
MsgTypeLeave MessageType = "leave"
MsgTypeReady MessageType = "ready"
MsgTypePlay MessageType = "play"
MsgTypePass MessageType = "pass"
MsgTypeState MessageType = "state"
MsgTypeError MessageType = "error"
MsgTypeChat MessageType = "chat"
MsgTypeGameOver MessageType = "gameOver"
)
type Message struct {
Type MessageType `json:"type"`
PlayerID string `json:"playerId,omitempty"`
Data interface{} `json:"data,omitempty"`
Timestamp int64 `json:"timestamp"`
}
type ApiResponse struct {
Status int `json:"status"`
Code int `json:"code"`
Message string `json:"message"`
Data interface{} `json:"data"`
}
type CreateRoomRequest struct {
PlayerName string `json:"playerName"`
MaxPlayers int `json:"maxPlayers"`
}
type JoinRoomRequest struct {
PlayerName string `json:"playerName"`
}
type User struct {
ID string `json:"id"`
Username string `json:"username"`
Password string `json:"-"`
Nickname string `json:"nickname"`
}
type RegisterRequest struct {
Username string `json:"username"`
Password string `json:"password"`
Nickname string `json:"nickname"`
Captcha string `json:"captcha"`
CaptchaID string `json:"captchaId"`
}
type LoginRequest struct {
Username string `json:"username"`
Password string `json:"password"`
Captcha string `json:"captcha"`
CaptchaID string `json:"captchaId"`
}
type CaptchaResponse struct {
CaptchaID string `json:"captchaId"`
Image string `json:"image"`
}
type LeaveRoomRequest struct {
PlayerID string `json:"playerId"`
}
type PlayerRoomInfo struct {
UserID string `json:"userId"`
RoomID string `json:"roomId"`
}