Aller au contenu

Jeu de Donjon IA

Nous allons commencer par créer un nouveau monorepo. Depuis le répertoire de votre choix, exécutez la commande suivante :

Terminal window
npx create-nx-workspace@~21.4.1 dungeon-adventure --pm=pnpm --preset=@aws/nx-plugin --iacProvider=CDK --ci=skip

Cela configurera un monorepo NX dans le répertoire dungeon-adventure que vous pourrez ensuite ouvrir dans vscode. Il devrait ressembler à ceci :

  • Répertoire.nx/
  • Répertoire.vscode/
  • Répertoirenode_modules/
  • Répertoirepackages/ emplacement de vos sous-projets
  • .gitignore
  • .npmrc
  • .prettierignore
  • .prettierrc
  • nx.json configure le CLI Nx et les paramètres par défaut du monorepo
  • package.json toutes les dépendances Node sont définies ici
  • pnpm-lock.yaml ou bun.lock, yarn.lock, package-lock.json selon le gestionnaire de paquets
  • pnpm-workspace.yaml si vous utilisez pnpm
  • README.md
  • tsconfig.base.json étendu par tous les sous-projets Node
  • tsconfig.json
  • aws-nx-plugin.config.mts configuration du plugin Nx pour AWS

Maintenant, nous sommes prêts à créer nos différents sous-projets en utilisant le @aws/nx-plugin.

Commençons par créer notre API de jeu. Pour cela, créons une API tRPC appelée GameApi en suivant les étapes ci-dessous :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - ts#trpc-api
  5. Remplissez les paramètres requis
    • name: GameApi
  6. Cliquez sur Generate

Vous devriez voir apparaître de nouveaux fichiers dans votre arborescence.

Cliquez ici pour examiner ces fichiers en détail.

Créons maintenant notre API de scénario avec FastAPI :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - py#fast-api
  5. Remplissez les paramètres requis
    • name: StoryApi
    • moduleName: story_api
  6. Cliquez sur Generate

De nouveaux fichiers devraient apparaître.

Cliquez ici pour examiner ces fichiers en détail.

Créons l’interface utilisateur avec React :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - ts#react-website
  5. Remplissez les paramètres requis
    • name: GameUI
  6. Cliquez sur Generate
Cliquez ici pour examiner ces fichiers en détail.

Ajoutons l’authentification Cognito :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - ts#react-website#auth
  5. Remplissez les paramètres requis
    • cognitoDomain: game-ui
    • project: @dungeon-adventure/game-ui
    • allowSignup: true
  6. Cliquez sur Generate
Cliquez ici pour examiner ces fichiers en détail.

Interface utilisateur : Connexion à l’API de scénario

Section intitulée « Interface utilisateur : Connexion à l’API de scénario »

Connectons l’UI à l’API StoryApi :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - api-connection
  5. Remplissez les paramètres requis
    • sourceProject: @dungeon-adventure/game-ui
    • targetProject: dungeon_adventure.story_api
  6. Cliquez sur Generate
Cliquez ici pour examiner ces fichiers en détail.

Interface utilisateur : Connexion à l’API de jeu

Section intitulée « Interface utilisateur : Connexion à l’API de jeu »

Connectons l’UI à l’API GameApi :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - api-connection
  5. Remplissez les paramètres requis
    • sourceProject: @dungeon-adventure/game-ui
    • targetProject: @dungeon-adventure/game-api
  6. Cliquez sur Generate
Cliquez ici pour examiner ces fichiers en détail.

Créons le projet d’infrastructure CDK :

  1. Installez le Nx Console VSCode Plugin si ce n'est pas déjà fait
  2. Ouvrez la console Nx dans VSCode
  3. Cliquez sur Generate (UI) dans la section "Common Nx Commands"
  4. Recherchez @aws/nx-plugin - ts#infra
  5. Remplissez les paramètres requis
    • name: infra
  6. Cliquez sur Generate
Cliquez ici pour examiner ces fichiers en détail.

Modifions application-stack.ts pour instancier nos constructions :

import {
GameApi,
GameUI,
StoryApi,
UserIdentity,
} from ':dungeon-adventure/common-constructs';
import { Stack, StackProps } from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class ApplicationStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
// The code that defines your stack goes here
const userIdentity = new UserIdentity(this, 'UserIdentity');
const gameApi = new GameApi(this, 'GameApi', {
integrations: GameApi.defaultIntegrations(this).build(),
});
const storyApi = new StoryApi(this, 'StoryApi', {
integrations: StoryApi.defaultIntegrations(this).build(),
});
// grant our authenticated role access to invoke our APIs
[storyApi, gameApi].forEach((api) =>
api.grantInvokeAccess(userIdentity.identityPool.authenticatedRole),
);
// Ensure this is instantiated last so our runtime-config.json can be automatically configured
new GameUI(this, 'GameUI');
}
}

Les intégrations par défaut mappent chaque opération à une fonction Lambda.

Construisons maintenant notre code
Terminal window
pnpm nx run-many --target build --all

Vous serez invité à synchroniser les références TypeScript. Sélectionnez Yes pour résoudre les erreurs d’import.

Les artefacts sont générés dans dist/. Félicitations, vous avez créé tous les sous-projets ! 🎉🎉🎉