Оба варианта турнира в основном сводятся к каждому матчу, либо к одному из следующих вариантов:
- Игрок выигрывает и выходит в следующий раунд
- Игрок выигрывает и выигрывает турнир
- Игрок проигрывает и покидает турнир
- Игрок проигрывает и наступает в сетку проигравшего
Итак, если вы смоделируете это так, чтобы у вас была коллекция совпадений со схемой вроде:
{
_id :.., <- match id
players:[playerId1, playerId2],
resultForWinner: <either "WINS_TOURNAMENT" or match id of next match>
resultForLoser: <either "EXIT_TOURNAMENT" or match id of loser bracket match
}
Вы можете составить оба типа турнирных скобок с этой схемой и повторно использовать свою турнирную логику, не делая различий между двумя, кроме настройки брекетов.