Saltearse al contenido

Juego de Mazmorra con IA

Módulo 1: Configuración del monorepo

Comenzaremos creando un nuevo monorepo. 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 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 predeterminados del monorepo
  • 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
  • tsconfig.json

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

API del Juego

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 nuevos archivos en tu árbol de directorios.

Haz clic aquí para examinar estos archivos en detalle.

API de Historia

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

  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
  6. Haga clic en Generate

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

Haz clic aquí para examinar estos archivos en detalle.

Interfaz del Juego: Sitio Web

Creemos la interfaz de usuario. 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#cloudscape-website
  5. Complete los parámetros requeridos
    • name: GameUI
  6. Haga clic en Generate

Verás nuevos archivos en tu árbol.

Haz clic aquí para examinar en detalle.

Interfaz del Juego: Autenticación

Configuremos 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#cloudscape-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 detalles.

Interfaz del Juego: Conectar a Story API

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

Cambios en el árbol de archivos:

Detalles aquí.

Interfaz del Juego: Conectar a Game API

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

Cambios en el árbol:

Detalles aquí.

Infraestructura del Juego

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

Cambios en el árbol:

Detalles aquí.

Actualizar infraestructura

Modifiquemos application-stack.ts para instanciar nuestros constructs:

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

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

Construir el código

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

Verás:

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

Selecciona para actualizar referencias TypeScript automáticamente.

Los artefactos construidos están en dist/. ¡Felicidades! Has creado todos los subproyectos necesarios. 🎉🎉🎉