Clonar repo:
git clone https://github.com/DarthKenar/StarWarsAPI
Vamos al directorio del proyecto:
cd StarWarsAPI
Instalamos dependencias:
npm install
Compilamos Javascript:
npx tsc
npm run test
npm run dev
Documentacion local:
http://localhost:3000/api-docs
Host | Method | RoutePath | Action |
---|---|---|---|
localhost:3000 | GET | "/" |
Muestra el Home. |
localhost:3000 | GET | "/film/s/all" |
Muestra todas las películas. |
localhost:3000 | GET | "/film/:id" |
Muestra una película. |
localhost:3000 | GET | "/film/s/search" |
Muestra una lista de películas por nombre. |
localhost:3000 | DELETE | "/film/del/:id" |
Borra los personajes asociados a una película. |
localhost:3000 | DELETE | "/film/s/del/all" |
Borra todas las películas y todos los personajes asociados. |
-- | -- | -- | -- |
localhost:3000 | GET | "/api-docs" |
Muestra la documentación |
ProjectRoot
├── dist // Carpeta distribuible.
│ ├── views // Carpeta de Templates.
│ │ └── layouts // Diseños de templates base.
│ │ │ └── mainTemplate.handlebars // Template principal.
│ │ └── partials // Porciones de template como componentes para reutilizar.
│ │ │ └── checkCharacters.handlebars // Template que muestra si la película tiene o no personajes en la DB.
│ │ │ └── searchFilm.handlebars // Buscador por nombre de película.
│ │ ├── homeTemplate.handlebars // Template inicial de GET a raiz "/"
│ │ ├── infoTemplate.handlebars // Template que muestra toda la informacion independientemente del path.
├── src // Carpeta de codigo fuente.
│ ├── build // Carpeta de compilación.
│ │ └── controllers // Carpeta contenedora de los controladores de las rutas.
│ │ │ └── auth.controller.ts // Controladores de las rutas para film.
│ │ │ └── film.controller.ts // Controladores de las rutas para auth.
│ │ └── routes // Carpeta de rutas de la API.
│ │ │ └── auth.routes.ts // Rutas definidas para el modelo Auth.
│ │ │ └── film.routes.ts // Rutas definidas para el modelo Film.
│ │ └── utils // Carpeta contenedora de funciones útiles.
│ │ │ └── auth.utils.ts // funciones útiles para auth.controller.ts.
│ │ │ └── film.utils.ts // funciones útiles para film.controller.ts.
│ │ └── validators // Carpeta contenedora de los controladores de las rutas.
│ │ │ └── auth.validator.ts // validadores para auth.controller.ts.
│ │ └── app.ts // Archivo de centralización de rutas.
│ │ └── index.ts // Archivo de ejecución del servidor.
│ ├── database // Carpeta referente a la base de datos.
│ │ └── entity // Carpeta contenedora de los modelos.
│ │ │ └── models.ts // archivo de definición de los modelos de la base de datos.
│ │ └── data-source.ts // Archivo de configuración de la base de datos.
│ ├── docs // Carpeta referente a la documentación.
│ │ └── models.mmd // Diagrama de modelos realizado en mermaidchart
│ │ └── swagger.json // archivo de configuración para documentación en Swagger
│ ├── tests // Carpeta referente a los tests.
│ │ └── auth.test.ts // Testing de funciones utilizadas por los módulos auth.ts
│ │ └── base.test.ts // Testing de funciones independientes y sín módulo. (ej. petición a la raíz "/")
│ │ └── film.test.ts // Testing de funciones utilizadas por los módulos film.ts
├── .gitignore // Archivo gitignore estándar.
├── package-lock.json // Dependencias de librerías exactas de Node.js
├── package.json // Dependencias de librerías de Node.js
├── README.md // Archivo Readme.md estándar.
└── tsconfig.json // Configuración para compilación de Typescript
Prodution Dependencies
-
"axios": "^1.6.7",
-
"bcrypt": "^5.1.1",
-
"cross-env": "^7.0.3",
-
"dotenv": "^16.4.5",
-
"express": "^4.18.2",
-
"reflect-metadata": "^0.2.1",
-
"sqlite3": "^5.1.7",
-
"swagger-ui-express": "^5.0.0",
-
"typeorm": "^0.3.20"
Dev Dependencies
-
"@types/express": "^4.17.21",
-
"@types/jest": "^29.5.12",
-
"@types/node": "^20.11.24",
-
"@types/supertest": "^6.0.2",
-
"jest": "^29.7.0",
-
"nodemon": "^3.1.0",
-
"ts-jest": "^29.1.2",
-
"supertest": "^6.3.4",
-
"typescript": "^5.3.3"
Utilizando la API STAR WARS, podrás obtener las películas y personajes de cada entrega. (Requerido)
Es necesario tener todas las películas, para ello debemos guardar en una base local todas las películas con los campos que creas necesarios. Inicialmente se consulta a la BD local preguntando si existen esas películas, si no existen vamos a la API y guardamos las películas localmente para optimizar los tiempos de respuesta y no ir cada vez a la API externa.
Al consultar cada película esta tiene que guardar en una base local todos los personajes relacionados a esta con los campos nombre, género, películas y especie. Inicialmente se consulta a la BD local preguntando si existen esos personajes, si no existen vamos a la API y guardamos los personajes localmente para optimizar los tiempos de respuesta y no ir cada vez a la API externa.
Crear un endpoint que borre los personajes de la película indicada de la base de datos. Crear un endpoint que borre TODOS los datos de la Base de datos.
-
Hacer un buscador de películas, especies.
-
Implementar login user y pass. Middleware de verificación token. (authentication)
- Usar Node js (Typescript)
- Utilizar Swagger para la documentación de la API (no excluyente)
- La BD puede ser cualquiera
- Se debe exponer el endpoint de consulta de películas para ser utilizada
- Proponer diseño y lógica en cada desafío.
- Se puede subir a github/gitlab y compartir el link o bien un zip.
- Proponer manejo de errores (404, 401, 400, 500)