Aventuras con NestJS: API를 구성합니다. 파트 1

Este artículo no va a ser exactamente un tutorial, ya que no estoy seguro de saber lo suficiente como para enseñar a otros, pero queria intentar de documentar mi proceso al construir una aplicación y me pareció que escribir algunos articulos al honoro podría ayudarme y tal vez también ayude a alguien que los lea. No voy a estar explicando las cosas detalladamente y paso por paso, va a ser más una idea general de lo que hago, en caso de que te quede alguna duda o pienses que me olvide de algo Importante por favor coméntalo. Para aprender sobre Nest es muy recomendable leer su pagina de documentación y los articulos de Marcin Wanago: API with nestjs

La aplicación final va a evolucionar con el tiempo, pero como minimo va a incluir:
  • Autenticación y Autorización
  • Productos con variantes y diferentes ubicaciones para stock(depositos, locales)
  • Integración con Mercado Libre
  • Procesamiento de pagos con Mercado Pago

  • La aplicación va a ser un sistema de gestion para una libreria que vende libros usados, ofertas y nuevos, algunas de las tecnologias que voy a utilizar:
  • NestJs
  • PostgreSQL
  • 레디스
  • 타자기
  • GraphQL

  • 관리자가 관리할 수 있도록 프런트엔드를 생성할 수 있습니다.

    En este artículo vamos a empezar configurando el proyecto:

    Empezamos creando una nueva aplicación: nest new {app_name} si no tienen instalado el CLI de nest pueden instalarlo con: npm i -g @nestjs/cli Es una gran herramienta para facilitar el desarrollo, cuenta con generadores para evitar escribir código repetitivo. Al correr el comando para crear una nueva aplicació nos va a preguntar que package manager queremos usar, yo voy a elegir yarn .

    Instalemos los primero paquetes que vamos a usar:

    yarn add @nestjs/config @nestjs/graphql @nestjs/apollo @nestjs/typeorm apollo-server-express graphql typeorm pg
    


    Para configurar GraphQL y TypeOrm tenemos que modificar nuestro archivo app.module.ts 범죄자:

    @Module({
      imports: [
        ConfigModule.forRoot({
          isGlobal: true,
        }),
        TypeOrmModule.forRootAsync({
          inject: [ConfigService],
          useFactory: (configService: ConfigService) => ({
            url: configService.get('POSTGRES_URL'),
            // acá vamos a ir agregando las entidades que creemos-
            entities: [],
            type: 'postgres',
            synchronize: true,
          }),
        }),
        GraphQLModule.forRootAsync<ApolloDriverConfig>({
          driver: ApolloDriver,
          inject: [ConfigService],
          useFactory: (configService: ConfigService) => ({
            playground: true,
            debug: true,
            autoSchemaFile: path.join(process.cwd(), 'src/graphql/schema.gql'),
          }),
        }),
      ],
      controllers: [AppController],
      providers: [AppService],
    })
    export class AppModule {}
    


    El primer modulo que importamos es ConfigModule para poder acceder à la información de archivos .env , y lo ponemos como global para poder usarlo sin tener que importarlo en otros modulos. Después vamos con TypeOrmModule para trabajar con la base de datos, syncronize: true es para que TypeOrm mantenga sincronizada la base de datos con las entidades que definimos en nuestro código, en producción esto no es recomendado y habría que utilizar migraciones.

    Para trabajar con GraphQL vamos a usar el "Code-first approach", para eso configuramos la opción autoSchemaFile . GraphQL automáticamente basándose en los decoradores que utilizamos en nuestras clases y sus propiedades.

    Antes de poder correr nuestra aplicación tenemos que tener una base de datos a la cual acceder, para eso yo voy a usar Docker Compose, voy a agregar un archivo docker-compose.yml en el directorio base, y adentro de ese archivo:

    version: '3'
    
    services:
      postgres:
        image: postgres:14
        container_name: postgres_db
        restart: unless-stopped
        volumes:
          - ./postgres:/var/lib/postgresql/data
        ports:
          - "5432:5432"
        environment:
          POSTGRES_DB: postgres
          POSTGRES_PASSWORD: postgres
    


    Docker Compose를 사용하지 않는 경우 로컬 기반 데이터베이스를 설치하는 데 사용할 수 있습니다.

    파라 크리어 누에스트로 프라이머 리졸버 우사모스 nest g resolver app --flat y agregamos:

    import { Resolver, Query } from '@nestjs/graphql';
    
    @Resolver()
    export class AppResolver {
      @Query(() => String)
      hello() {
        return 'hello world';
      }
    }
    


    Con todo esto ya podemos correr la aplicación con yarn start:dev y navegar a localhost:3000/graphql Para ver el playground de GraphQL y probar nuestra query.



    Pueden ver el código en este repositorio: nest-adventures

    Eso es todo por ahora, en la siguiente parte vamos a agregar los productos y funcionalidades relacionadas a ellos.

    Muchas gracias por leer. Este es el primer artículo que escribo, asi que cualquier comentario sobre como mejorar o si les gusto el contenido es altamente apreciado.

    좋은 웹페이지 즐겨찾기