mirror of
https://github.com/MADTeacher/go_basics.git
synced 2025-11-23 21:34:47 +02:00
49 lines
1.4 KiB
Go
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
|
|
}
|