Aller au contenu

Stockage

tilttek/bingo

Contract\BingoStore garde les jeux et leurs cartons ; Store\InMemoryBingoStore les garde en mémoire, pour les tests et les scripts.

MéthodeFait
game(), addGame(), saveGame()Lit, ajoute à la version 1 et enregistre la version suivante d'un jeu
card(), cardOf()Lit un carton par numéro de série, cartons imprimés compris, ou le carton qu'un joueur détient dans un jeu
addCard($card, $fingerprint)Ajoute un carton à la version 1 ; retourne false, sans rien garder, quand un autre carton du jeu a l'empreinte
saveCard()Enregistre la version suivante d'un carton
openCardsOf($player, $limit)Les cartons du joueur dans les jeux ouverts, au plus $limit ; jamais un carton imprimé

Les versions

Un jeu et un carton comptent leurs changements : chacun leur donne leur version suivante, à partir de 1. save…() refuse avec BingoConflict quand la version stockée n'est pas celle d'avant ; addGame() refuse un identifiant pris, et addCard() un numéro de série pris ou un second carton pour un joueur ; un carton imprimé n'a pas de joueur, et un jeu en détient autant qu'il en imprime. Bingo relit le jeu ou le carton et refait le changement en cas de conflit, jusqu'à Bingo::ATTEMPTS fois : deux gestes enregistrés en même temps cochent tous les deux, l'un après l'autre. Un dépôt adossé à une base de données écrit save…() comme une mise à jour conditionnée par la version, et garde les empreintes d'un jeu sous un index unique.

Ce que garde un dépôt

Un jeu garde sa réserve, sa grille, ses motifs et son mode, le nombre de cartons distribués, les cases appelées et les numéros de série gagnants. Un carton garde son jeu, son numéro de série, la référence de son joueur — aucune pour un carton imprimé —, sa disposition, les clés d'idempotence des gestes qui ont coché chaque cellule, ainsi que le motif et le moment de sa victoire. Aucun libellé écrit par un joueur et aucun nom n'est gardé : les joueurs sont les références que donne l'application.