Задать вопрос
@Andrey1302
FullStack Developer (React.js | Node.js | Nest.js)

Как правильно реализовать управление игровыми сессиями в API?

Я разрабатываю backend для платформы, где пользователи могут запускать мини-игры. Для отслеживания игровых сессий создаю сущность GameSession.

Базовый флоу:
- Одна игра → несколько сессий на одного пользователя (например, с разных устройств).
- У каждой сессии есть expiresAt и status (OPEN, CLOSED, EXPIRED).
- Есть cron-задача, которая регулярно помечает истёкшие сессии как EXPIRED.
- Когда игра начинается я полагаю клиент должен стучаться на /start-game, когда заканчивается - на /end-game

Модель:
@Entity('game_sessions')
export class GameSession {
  @PrimaryGeneratedColumn('uuid')
  id: string;

  @ManyToOne(() => User)
  user: User;

  @ManyToOne(() => Game)
  game: Game;

  @Column()
  sessionToken: string;  // UUID, уникальный

  @Column({ type: 'enum', enum: GameSessionStatus })
  status: GameSessionStatus;

  @Column({ nullable: true })
  expiresAt: Date;

  @Column({ nullable: true })
  endedAt: Date;

  @CreateDateColumn()
  startedAt: Date;
}


Вопросы:
1. Нормальным ли считается подход когда допускается несколько активных сессий с одинаковым game_id + user_id? Или же при повторном запросе /start-game лучше закрывать предыдущую открытую сессию и создавать новую? Или же возвращать токен открытой если она есть?
2. Стоит ли использовать sessionToken вместо id в публичном API?
3. Какие поля впринципе обязательны для модели GameSession для корректного управления состоянием сессии?
4. Нужна ли блокировка (pessimistic_write или optimistic) при завершении/создании сессии? Например, если пользователь дважды подряд вызывает POST /games/end?
5. Как определить оптимальное время expiresAt?

Также буду благодарен за best practices или ссылки на примеры архитектуры игровых платформ.
  • Вопрос задан
  • 36 просмотров
Подписаться 1 Средний 4 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы