Aller au contenu

tilttek/quests-bundle

✅ publié

Des quêtes et des défis pour une application Symfony, tirés du journal de l'activité de ses membres.

tilttek/quests-bundle intègre tilttek/quests à Symfony. Les quêtes, avec leurs étapes, leurs genres, leurs dates, leurs chaînes et leurs récompenses, sont écrites dans la configuration et vérifiées à la compilation du conteneur. Elles peuvent aussi être gardées en base de données et modifiées par l'application. Une quête qui revient à des dates calculées, comme une semaine à partir de Pâques ou les jours autour d'un solstice, est lue par phil/almanac. La progression, les acceptations des membres, le journal des quêtes accomplies et les duels sont gardés dans Doctrine DBAL. Ils occupent cinq tables que le bundle ajoute au schéma généré par l'ORM : les migrations de l'application les créent donc. La projection qui transforme l'activité des membres en progression porte l'étiquette de tilttek/activity-bundle. Celui-ci la tient à jour à chaque geste, la rattrape et la reconstruit. Une quête accomplie devient un événement du répartiteur de l'application, avec ses récompenses et les membres qui les reçoivent ; il en va de même d'un duel gagné et d'un duel expiré. Des fonctions Twig et deux gabarits affichent la liste et le détail des quêtes. Des commandes listent les quêtes, affichent celles d'un membre et font expirer les duels. Enfin, les quêtes d'un membre sont exportées et effacées avec son compte par phil/privacy-bundle.

Il s'adresse à une application Symfony qui donne à ses membres des objectifs à atteindre, seuls, en équipe, en communauté ou les uns contre les autres. La bibliothèque seule convient à une application sans Symfony.

Il exige tilttek/quests, Doctrine DBAL, le répartiteur d'événements PSR ainsi que la configuration et le conteneur de Symfony. phil/almanac, l'ORM, la console, Twig, le traducteur et phil/privacy-bundle sont facultatifs : le bundle n'enregistre ce qui les utilise que s'ils sont installés.

La conception suit celle de la bibliothèque : les dépôts implémentent ses quatre contrats, DbalCatalog son catalogue modifiable, AlmanacScheduleReader ses lecteurs de calendrier. QuestsServices relie les services, DispatchingObserver transforme en événements ce que la bibliothèque annonce, et QuestsExtension en est le côté Twig.

État

PartieÉtat
Configuration des quêtes, des dépôts, du catalogue, du fuseau horaire et des duels, vérifiée à la compilationImplémentée et testée
DbalContributionStore, DbalEnrolmentStore, DbalCompletionStore, DbalDuelStore et les tables, avec l'écouteur du schémaImplémentés et testés
DbalCatalog : quêtes gardées en base de données sous forme de définitions JSON, chaînes vérifiées à l'enregistrement et au retraitImplémenté et testé
AlmanacSchedule et AlmanacScheduleReader : quêtes qui reviennent aux dates calculées par phil/almanacImplémentés et testés
La projection étiquetée pour tilttek/activity-bundleImplémentée et testée
Événements QuestCompleted, DuelWon et DuelExpiredImplémentés et testés
Fonctions Twig et gabarits de la liste et du détail, en anglais et en françaisImplémentés et testés
Commandes tilttek:quests:list, tilttek:quests:show et tilttek:quests:expireImplémentées et testées
Exportation et effacement d'un membre pour phil/privacy-bundleImplémentés et testés

Documentation

DocumentContenu
InstallationPrérequis, installation, les tables et la projection.
ConfigurationChaque option, avec un exemple, et les quêtes qui reviennent.
Base de donnéesLes cinq tables, leurs clés et le catalogue gardé en base de données.
ÉvénementsLes événements que le bundle répartit et la façon de donner les récompenses d'une quête.
GabaritsLes fonctions Twig, la liste et le détail, et leurs traductions.
CommandesLister les quêtes, afficher celles d'un membre, faire expirer les duels.
Vie privéeCe que contient l'exportation d'un membre et ce que son effacement supprime.
Points d'extensionRemplacer un dépôt ou le catalogue, un autre calendrier, l'observateur.
ExceptionsCe que le bundle lance.
TestsLes tests du bundle et les tests d'une application qui l'utilise.
RéférenceChaque classe et chaque service du bundle.

Démarrage rapide

// config/bundles.php
Tilttek\ActivityBundle\TilttekActivityBundle::class => ['all' => true],
Tilttek\QuestsBundle\TilttekQuestsBundle::class => ['all' => true],
# config/packages/tilttek_quests.yaml
tilttek_quests:
    timezone: America/Toronto
    quests:
        first-steps:
            ordered: true
            steps: [{ code: play, verbs: ['game.played'], count: 3 }, { code: write, verbs: ['sheet.published'] }]
            rewards: [{ kind: points, code: xp, amount: 50 }]
        easter-hunt:
            recurs: { from: 'easter - 2 days', until: 'easter + 1 day' }
            steps: [{ verbs: ['egg.found'], count: 10 }]
#[AsEventListener]
public function __invoke(QuestCompleted $event): void
{
    foreach ($event->beneficiaries as $member) {
        foreach ($event->rewards() as $reward) {
            // give the reward through the packages the application has
        }
    }
}

Prérequis

PHP 8.5 ou plus récent, Symfony 8.2 et Doctrine DBAL 4.5.

Contribuer

Les contributions sont les bienvenues sur le monodépôt de PHIL : lisez le guide de contribution et le code de conduite. Signalez une vulnérabilité en privé, comme l'explique la politique de sécurité, jamais dans un ticket public.

Licence

MIT, © Philippe Gamache, doing business as Le Gnome Archiviste; a Tilttek project. Consultez LICENSE.