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 respecto 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
- Redis
- Typescript
- GraphQL
También tengo planeado crear el frontend para manejo administrativo.
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
con:
@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
. Esto hace que nest genere el esquema de 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
En caso de que no sepan usar Docker Compose, pueden usar una instalación local de la base de datos.
Para crear nuestro primer Resolver usamos 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.
Top comments (0)