Saltearse al contenido

Juego de Mazmorra con IA

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

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

Esto configurará un monorepo 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 el CLI de Nx y los valores por defecto del monorepo
  • package.json todas las dependencias de node se definen aquí
  • 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
  • tsconfig.json
  • aws-nx-plugin.config.mts configuración para el Nx Plugin para AWS

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

Primero creemos nuestra Game API. 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 nuevos archivos en tu árbol de directorios.

Haz clic aquí para examinar estos archivos en detalle.

Ahora creemos nuestra Story API. 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 nuevos archivos en tu árbol de directorios.

Haz clic aquí para examinar estos archivos en detalle.

Ahora creemos la UI para interactuar con el juego. Ejecuta:

  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#react-website
  5. Complete los parámetros requeridos
    • name: GameUI
  6. Haga clic en Generate

Verás nuevos archivos en tu árbol de directorios.

Haz clic aquí para examinar en detalle.

Configuremos la UI para requerir autenticación con Amazon Cognito:

  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#react-website#auth
  5. Complete los parámetros requeridos
    • cognitoDomain: game-ui
    • project: @dungeon-adventure/game-ui
    • allowSignup: true
  6. Haga clic en Generate

Verás cambios en el árbol de archivos.

Haz clic para ver detalles.

Conectemos la UI a Story API:

  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

Verás nuevos archivos generados.

Detalles aquí.

Conectemos la UI a Game API:

  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

Verás cambios en el árbol de archivos.

Detalles aquí.

Creemos el proyecto de infraestructura CDK:

  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

Verás nuevos archivos generados.

Detalles aquí.

Actualicemos application-stack.ts para instanciar constructos:

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');
}
}

Usamos integraciones por defecto para las APIs, mapeando cada operación a una función lambda.

Ahora construyamos el código por primera vez
Terminal window
pnpm nx run-many --target build --all

Verás este prompt:

Ventana de terminal
NX The workspace is out of sync
[@nx/js:typescript-sync]: Algunos archivos de configuración TypeScript tienen referencias faltantes.
? ¿Quieres sincronizar los cambios?
Sí, sincronizar y ejecutar tareas
No, ejecutar sin sincronizar

Selecciona para actualizar referencias TypeScript automáticamente.

Los artefactos se generan en dist/. ¡Felicidades! Has creado todos los subproyectos necesarios. 🎉🎉🎉