/API_CINE_2022

Proyecto Integrado IAW

Primary LanguageTypeScript

🎞️ PROYECTO INTEGRADO IAW

API-CINE 2022: El proyecto surge ante la necesidad del diseΓ±o Back-End de una APIREST en NESTJS para la gestiΓ³n de un servicio de streaming de pelΓ­culas. Se implementa la gestiΓ³n de un servicio de streaming a travΓ©s de una API REST en NESTJS y Postman para la construcciΓ³n, prueba e iteraciΓ³n de la API sobre una base de datos PostgreSQL, almacenada en un contenedor docker.

Tabla de Contenidos

πŸ” ΒΏEn quΓ© nos estamos basando para el desarrollo?

  • Modelo E-R que define nuestra base de datos: API_CINE - Database ER diagram (14-12-2022)

  • Modelo de desarrollo que esboza quΓ© queremos desarrollar: image

πŸ’» InstalaciΓ³n

  • Para iniciar la instalaciΓ³n:

    $ npm i -g @nestjs/cli
  • Para la creaciΓ³n del proyecto:

    $ nest new api
  • Para instalar las librerΓ­as:

    • Copiamos las dependencias en nuestro archivo "package.json":
      "dependencies": {
        "@nestjs/common": "^9.0.0",
        "@nestjs/config": "^2.2.0",
        "@nestjs/core": "^9.0.0",
        "@nestjs/mapped-types": "^1.2.0",
        "@nestjs/platform-express": "^9.0.0",
        "@nestjs/typeorm": "^9.0.1",
        "class-transformer": "^0.5.1",
        "class-validator": "^0.13.2",
        "pg": "^8.8.0",
        "reflect-metadata": "^0.1.13",
        "rimraf": "^3.0.2",
        "rxjs": "^7.2.0",
        "typeorm": "^0.3.10"
      }
    • Y, lanzamos:
      $ npm install
  • Para acceder e iniciar el proyecto:

    $ cd api
    $ yarn start:dev

πŸ“« Postman, la herramienta de desarrollo de nuestro CRUD

🐳 Docker, runtime para contenedor con nuestra base de datos PostgreSQL

  • Un archivo DockerCompose, que define y es la orquestaciΓ³n de nuestro contenedor Docker:

    version: '3.1'
    
    services:
    
      psql-db:
        image: postgres:12.1-alpine
        ports:
          - ${POSTGRES_PORT_EXTERNAL}:5432
        environment:
          - POSTGRES_USER=${DB_USER}
          - POSTGRES_PASSWORD=${DB_PASS}
          - POSTGRES_DB=${DB_NAME}
        volumes:
          - psql-db-data:/var/lib/postgresql/data
        networks:
          - ws-network
    
    volumes:
      psql-db-data:
    
    networks:
      ws-network:
  • App.module, donde vamos a definir la conexiΓ³n a nuestra base de datos PostgreSQL del contenedor docker meidante la llamada de variables definidas en un archivo .env:

    @Module({
    imports: [ConfigModule.forRoot(), TypeOrmModule.forRoot({
      type: 'postgres',
      host: process.env.DB_HOST,
      port: parseInt(process.env.DB_PORT),
      username: process.env.DB_USER,
      password: process.env.DB_PASS,
      database: process.env.DB_NAME,
      autoLoadEntities: true,
      synchronize: !!process.env.DB_SYNC
    }), UsuariosModule, PeliculasModule, ValoracionesModule, GenerosModule, CestaModule, AuthModule, SeedModule
    ],
    controllers: [AppController],
    providers: [AppService],
    })

πŸ“Ž EstructuraciΓ³n del proyecto

β”œβ”€β”€ api
β”‚  β”œβ”€β”€ .env
β”‚  β”œβ”€β”€ .eslintrc.js
β”‚  β”œβ”€β”€ .gitignore
β”‚  β”œβ”€β”€ .prettierrc
β”‚  β”œβ”€β”€ docker-compose.yml
β”‚  β”œβ”€β”€ nest-cli.json
β”‚  β”œβ”€β”€ package.json
β”‚  β”œβ”€β”€ README.md
β”‚  β”œβ”€β”€ src
β”‚  β”‚  β”œβ”€β”€ app.controller.spec.ts
β”‚  β”‚  β”œβ”€β”€ app.controller.ts
β”‚  β”‚  β”œβ”€β”€ app.module.ts
β”‚  β”‚  β”œβ”€β”€ app.service.ts
β”‚  β”‚  β”œβ”€β”€ main.ts
β”‚  β”‚  └── modulos
β”‚  β”‚    β”œβ”€β”€ auth
β”‚  β”‚    β”‚  β”œβ”€β”€ auth.controller.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ auth.module.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ auth.service.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ dto
β”‚  β”‚    β”‚  β”‚  β”œβ”€β”€ create-user.dto.ts
β”‚  β”‚    β”‚  β”‚  └── update-auth.dto.ts
β”‚  β”‚    β”‚  └── entities
β”‚  β”‚    β”‚    └── user.entity.ts
β”‚  β”‚    β”œβ”€β”€ cesta
β”‚  β”‚    β”‚  β”œβ”€β”€ cesta.controller.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ cesta.module.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ cesta.service.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ dto
β”‚  β”‚    β”‚  β”‚  β”œβ”€β”€ create-cesta.dto.ts
β”‚  β”‚    β”‚  β”‚  └── update-cesta.dto.ts
β”‚  β”‚    β”‚  └── entities
β”‚  β”‚    β”‚    └── cesta.entity.ts
β”‚  β”‚    β”œβ”€β”€ generos
β”‚  β”‚    β”‚  β”œβ”€β”€ dto
β”‚  β”‚    β”‚  β”‚  β”œβ”€β”€ create-genero.dto.ts
β”‚  β”‚    β”‚  β”‚  └── update-genero.dto.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ entities
β”‚  β”‚    β”‚  β”‚  └── genero.entity.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ generos.controller.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ generos.module.ts
β”‚  β”‚    β”‚  └── generos.service.ts
β”‚  β”‚    β”œβ”€β”€ peliculas
β”‚  β”‚    β”‚  β”œβ”€β”€ dto
β”‚  β”‚    β”‚  β”‚  β”œβ”€β”€ create-pelicula.dto.ts
β”‚  β”‚    β”‚  β”‚  └── update-pelicula.dto.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ entities
β”‚  β”‚    β”‚  β”‚  └── pelicula.entity.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ peliculas.controller.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ peliculas.module.ts
β”‚  β”‚    β”‚  └── peliculas.service.ts
β”‚  β”‚    β”œβ”€β”€ seed
β”‚  β”‚    β”‚  β”œβ”€β”€ data
β”‚  β”‚    β”‚  β”‚  β”œβ”€β”€ cesta.json
β”‚  β”‚    β”‚  β”‚  β”œβ”€β”€ generos.json
β”‚  β”‚    β”‚  β”‚  β”œβ”€β”€ peliculas.json
β”‚  β”‚    β”‚  β”‚  β”œβ”€β”€ users.json
β”‚  β”‚    β”‚  β”‚  β”œβ”€β”€ usuarios.json
β”‚  β”‚    β”‚  β”‚  └── valoraciones.json
β”‚  β”‚    β”‚  β”œβ”€β”€ seed.controller.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ seed.module.ts
β”‚  β”‚    β”‚  └── seed.service.ts
β”‚  β”‚    β”œβ”€β”€ usuarios
β”‚  β”‚    β”‚  β”œβ”€β”€ dto
β”‚  β”‚    β”‚  β”‚  β”œβ”€β”€ create-usuario.dto.ts
β”‚  β”‚    β”‚  β”‚  └── update-usuario.dto.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ entities
β”‚  β”‚    β”‚  β”‚  └── usuario.entity.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ usuarios.controller.ts
β”‚  β”‚    β”‚  β”œβ”€β”€ usuarios.module.ts
β”‚  β”‚    β”‚  └── usuarios.service.ts
β”‚  β”‚    └── valoraciones
β”‚  β”‚      β”œβ”€β”€ dto
β”‚  β”‚      β”‚  β”œβ”€β”€ create-valoracion.dto.ts
β”‚  β”‚      β”‚  └── update-valoracion.dto.ts
β”‚  β”‚      β”œβ”€β”€ entities
β”‚  β”‚      β”‚  └── valoracion.entity.ts
β”‚  β”‚      β”œβ”€β”€ valoraciones.controller.ts
β”‚  β”‚      β”œβ”€β”€ valoraciones.module.ts
β”‚  β”‚      └── valoraciones.service.ts
β”‚  β”œβ”€β”€ test
β”‚  β”‚  β”œβ”€β”€ app.e2e-spec.ts
β”‚  β”‚  └── jest-e2e.json
β”‚  β”œβ”€β”€ tsconfig.build.json
β”‚  β”œβ”€β”€ tsconfig.json
β”‚  └── yarn.lock
└── README.md

πŸ“š DocumentaciΓ³n del desarrollo

1 3 4 5 6 7 8 9 10 11 12 13 14