1
0
mirror of https://github.com/MADTeacher/go_basics.git synced 2025-11-23 21:34:47 +02:00
Files
go_basics/part_8/tic_tac_toe_v7/database/models.go
Stanislav Chernyshev d4e7211d1d Глава 8
Допричесать игру
2025-06-22 21:04:23 +03:00

49 lines
1.4 KiB
Go

package database
import (
"encoding/json"
b "tic-tac-toe/board"
m "tic-tac-toe/model"
"time"
)
// PlayerFinishGame представляет модель таблицы
// для хранения завершенной игры в БД
type PlayerFinishGame struct {
// ID игры
ID int `gorm:"primary_key;autoIncrement;not null"`
// Имя победителя
WinnerName string `gorm:"not null"`
// Имя противника
AnotherPlayerName string `gorm:"not null"`
// JSON-представление доски
BoardJSON []byte `gorm:"type:json;not null"`
// Символ победившего игрока
PlayerFigure int `gorm:"not null"`
// Время завершения игры
Time time.Time `gorm:"not null"`
}
// Задаем имя таблицы для структуры PlayerFinishGame
func (pfg *PlayerFinishGame) TableName() string {
return "player_finish_games"
}
// Преобразуем таблицу PlayerFinishGame в модель PlayerFinishGame
// из пакета model
func (f *PlayerFinishGame) ToModel() (*m.FinishGameSnapshot, error) {
var board b.Board
if err := json.Unmarshal(f.BoardJSON, &board); err != nil {
return nil, err
}
return &m.FinishGameSnapshot{
ID: f.ID,
Board: &board,
PlayerFigure: b.BoardField(f.PlayerFigure),
WinnerName: f.WinnerName,
AnotherPlayerName: f.AnotherPlayerName,
Time: f.Time,
}, nil
}