Saltearse al contenido

Juego de Mazmorra con IA

Módulo 1: Configuración del monorepositorio

Sección titulada «Módulo 1: Configuración del monorepositorio»

Comenzaremos creando un nuevo monorepositorio. Desde el directorio deseado, ejecuta el siguiente comando:

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

Esto configurará un monorepositorio NX dentro del directorio dungeon-adventure que podrás abrir en VSCode. Debería verse así:

  • Directory.nx/
  • Directory.vscode/
  • Directorynode_modules/
  • Directorypackages/ aquí residirán tus subproyectos
  • .gitignore
  • .npmrc
  • .prettierignore
  • .prettierrc
  • nx.json configura los valores predeterminados de la CLI de Nx y el monorepositorio
  • package.json aquí se definen todas las dependencias de Node
  • pnpm-lock.yaml o bun.lock, yarn.lock, package-lock.json según el gestor de paquetes
  • pnpm-workspace.yaml si usas pnpm
  • README.md
  • tsconfig.base.json todos los subproyectos basados en Node extienden este archivo
  • tsconfig.json

Ahora estamos listos para comenzar a crear nuestros diferentes subproyectos usando el @aws/nx-plugin.

Primero creemos nuestra API del Juego. Para esto, crearemos una API tRPC llamada GameApi siguiendo estos pasos:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - ts#trpc-api
  5. Complete los parámetros requeridos
    • name: GameApi
  6. Haga clic en Generate

Deberías ver que han aparecido algunos archivos nuevos en tu árbol de directorios.

Haz clic aquí para examinar estos archivos en detalle.

Ahora creemos nuestra API de la Historia. Para esto, crearemos una API Fast llamada StoryApi siguiendo estos pasos:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - py#fast-api
  5. Complete los parámetros requeridos
    • name: StoryApi
    • moduleName: story_api
  6. Haga clic en Generate

Deberías ver que han aparecido algunos archivos nuevos en tu árbol de directorios.

Haz clic aquí para examinar estos archivos en detalle.

Ahora creemos la interfaz de usuario que te permitirá interactuar con el juego. Para esto, creemos un sitio web llamado GameUI siguiendo estos pasos:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - ts#cloudscape-website
  5. Complete los parámetros requeridos
    • name: GameUI
  6. Haga clic en Generate

Deberías ver que han aparecido algunos archivos nuevos en tu árbol de directorios.

Haz clic aquí para examinar estos archivos en detalle.

Interfaz de Usuario del Juego: Autenticación

Sección titulada «Interfaz de Usuario del Juego: Autenticación»

Ahora configuremos nuestra Game UI para requerir acceso autenticado mediante Amazon Cognito siguiendo estos pasos:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - ts#cloudscape-website#auth
  5. Complete los parámetros requeridos
    • cognitoDomain: game-ui
    • project: @dungeon-adventure/game-ui
    • allowSignup: true
  6. Haga clic en Generate

Deberías ver que han aparecido/cambiado algunos archivos nuevos en tu árbol de directorios.

Haz clic aquí para examinar estos archivos en detalle.

Interfaz de Usuario del Juego: Conectar a Story API

Sección titulada «Interfaz de Usuario del Juego: Conectar a Story API»

Ahora configuremos nuestra Game UI para conectarse a nuestra Story API creada previamente:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - api-connection
  5. Complete los parámetros requeridos
    • sourceProject: @dungeon-adventure/game-ui
    • targetProject: dungeon_adventure.story_api
  6. Haga clic en Generate

Deberías ver que han aparecido/cambiado algunos archivos nuevos en tu árbol de directorios.

Haz clic aquí para examinar estos archivos en detalle.

Interfaz de Usuario del Juego: Conectar a Game API

Sección titulada «Interfaz de Usuario del Juego: Conectar a Game API»

Ahora configuremos nuestra Game UI para conectarse a nuestra Game API creada previamente:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - api-connection
  5. Complete los parámetros requeridos
    • sourceProject: @dungeon-adventure/game-ui
    • targetProject: @dungeon-adventure/game-api
  6. Haga clic en Generate

Deberías ver que han aparecido/cambiado algunos archivos nuevos en tu árbol de directorios.

Haz clic aquí para examinar estos archivos en detalle.

Infraestructura de la Interfaz de Usuario del Juego

Sección titulada «Infraestructura de la Interfaz de Usuario del Juego»

Ahora el último subproyecto que necesitamos crear es para la infraestructura CDK. Para crearlo, sigue estos pasos:

  1. Instale el Nx Console VSCode Plugin si aún no lo ha hecho
  2. Abra la consola Nx en VSCode
  3. Haga clic en Generate (UI) en la sección "Common Nx Commands"
  4. Busque @aws/nx-plugin - ts#infra
  5. Complete los parámetros requeridos
    • name: infra
  6. Haga clic en Generate

Deberías ver que han aparecido/cambiado algunos archivos nuevos en tu árbol de directorios.

Haz clic aquí para examinar estos archivos en detalle.

Actualicemos nuestro packages/infra/src/stacks/application-stack.ts para instanciar algunos de nuestros constructos ya generados:

import {
GameApi,
GameUI,
StoryApi,
UserIdentity,
} from ':dungeon-adventure/common-constructs';
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
export class ApplicationStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.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');
}
}

Observa que aquí proporcionamos integraciones predeterminadas para nuestras dos APIs. Por defecto, cada operación en nuestra API se mapea a una función lambda individual para manejar esa operación.

Ahora es momento de construir nuestro código por primera vez
Terminal window
pnpm nx run-many --target build --all

Deberías recibir el siguiente mensaje:

Ventana de terminal
NX The workspace is out of sync
[@nx/js:typescript-sync]: Some TypeScript configuration files are missing project references to the projects they depend on or contain outdated project references.
This will result in an error in CI.
? Would you like to sync the identified changes to get your workspace up to date?
Yes, sync the changes and run the tasks
No, run the tasks without syncing the changes

Este mensaje indica que NX ha detectado algunos archivos que pueden actualizarse automáticamente. En este caso, se refiere a los archivos tsconfig.json que no tienen referencias de TypeScript configuradas en proyectos referenciados. Selecciona la opción Yes, sync the changes and run the tasks para continuar. Deberías notar que todos los errores de importación en tu IDE se resuelven automáticamente, ya que el generador de sincronización agregará las referencias de TypeScript faltantes.

Todos los artefactos construidos están ahora disponibles dentro de la carpeta dist/ ubicada en la raíz del monorepositorio. Esta es una práctica estándar cuando se usan proyectos generados por el @aws/nx-plugin ya que no contamina tu árbol de archivos con archivos generados. En caso de que quieras limpiar tus archivos, simplemente puedes eliminar la carpeta dist/ sin preocuparte por archivos generados esparcidos por el árbol de directorios.

¡Felicidades! Has creado todos los subproyectos necesarios para comenzar a implementar el núcleo de nuestro juego Dunegeon Adventure. 🎉🎉🎉