{"id":21739331,"url":"https://github.com/brandovidal/prueba-tecnica-backend-softek","last_synced_at":"2026-04-13T03:03:11.395Z","repository":{"id":261312275,"uuid":"883931116","full_name":"brandovidal/prueba-tecnica-backend-softek","owner":"brandovidal","description":"Prueba tecnica Softek","archived":false,"fork":false,"pushed_at":"2024-11-22T15:44:34.000Z","size":511,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-25T21:26:16.545Z","etag":null,"topics":["api","nestjs","nodejs","rest-api","test","typeescript"],"latest_commit_sha":null,"homepage":"https://ngahyu3u43.execute-api.us-east-1.amazonaws.com","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/brandovidal.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-05T20:38:56.000Z","updated_at":"2024-11-22T15:44:38.000Z","dependencies_parsed_at":"2025-01-25T21:23:47.702Z","dependency_job_id":"1c1a7b94-917b-4ce5-ae0c-ec9678c1f6d9","html_url":"https://github.com/brandovidal/prueba-tecnica-backend-softek","commit_stats":null,"previous_names":["brandovidal/prueba-tecnica-backend-softek"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandovidal%2Fprueba-tecnica-backend-softek","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandovidal%2Fprueba-tecnica-backend-softek/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandovidal%2Fprueba-tecnica-backend-softek/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/brandovidal%2Fprueba-tecnica-backend-softek/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/brandovidal","download_url":"https://codeload.github.com/brandovidal/prueba-tecnica-backend-softek/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244717338,"owners_count":20498283,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","nestjs","nodejs","rest-api","test","typeescript"],"created_at":"2024-11-26T06:08:31.454Z","updated_at":"2025-10-16T16:18:16.374Z","avatar_url":"https://github.com/brandovidal.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🏆 Reto Técnico - Backend NodeJS AWS\n\n## 📝 Descripción del reto técnico:\n\n- ✅ Adaptar y transformar los modelos de la API SWAPI a español, es decir tienenque mapear todos los nombres de los atributos del inglés al español. Ejemplo:{ “name” : “Luke”} cambiar a {“nombre” : ”Luke”}.\n- ✅ Integrar la API de prueba StarWars API (líneas abajo está el link) se debenintegrar uno o más endpoints.\n- ✅ Crear un modelo de su elección mediante el uso de un endpoint POST, la datase tendrá que almacenar dentro de una base de datos.\n- ✅ Crear un endpoint GET que muestre la data almacenada.\n\nAPI de prueba SWAPI: https://swapi.py4e.com/documentation\n\n## 📒 Puntos mínimos-obligatorios del MVP:\n\n- ✅ Mínimo 2 endpoints, GET para recuperar la información y POST para crear un elemento\n- ✅ Integración con una base de datos (DynamoDB o MySQL)\n- ✅ Integración con SWAPI\n- ✅ Traducción de atributos de inglés a español\n- ✅ Uso de Serverless Framework\n- ✅ Uso de Node.js\n- ✅ Respeto de las buenas prácticas de desarrollo\n\n## ➕ Puntos Bonus:\n\n- ✅ Pruebas unitarias\n- ✅ Uso de TypeScript\n- ✅ Documentación de uso\n- ✅ Documentación en Open API/Swagger\n- ✅ Desplegar sin errores en AWS con el comando deploy del framework serverless\n- ✅ Mayor complejidad de Integración\n- ✅ Uso de un framework (NestJS)\n- ✅ Trabajar en capas y por dominio\n\n### 🪄 Arquitectura recomendada\n\n![Arquitectura recomendada](image.png)\n\n## 📁 Estructura del proyecto\n\n```css\n├── .serverless/\n├── .vscode/\n├── dist/\n├── node_modules/\n├── requests/\n├── src/\n|   ├── common/\n|   |   ├── decorators/\n|   |   ├── serializers/\n|   ├── config/\n|   ├── models/\n|   |   ├── people/\n|   |   |   ├── dto/\n|   |   |   ├── entities/\n|   |   |   ├── people.controller.ts\n|   |   |   ├── people.module.ts\n|   |   |   ├── people.service.ts\n|   ├── providers/\n|   |   ├── api/\n|   |   ├── database/\n|   ├── app.controller.spec.ts\n|   ├── app.controller.ts\n|   ├── app.module.ts\n|   ├── app.service.ts\n|   ├── app.ts\n|   ├── lambda.ts\n|   ├── main.ts\n├── test/\n├── .env\n├── .env.example\n├── .eslintrc.js\n├── .gitignore\n├── .prettierrc\n├── docker-compose.yml\n├── image.png\n├── nest-cli.json\n├── package.json\n├── pnpm-lock.yaml\n├── README.md\n├── serverless.yml\n├── tsconfig.build.json\n└── tsconfig.json\n```\n\n## 💫 Instalacion del proyecto\n\n```bash\n$ pnpm install\n```\n\n## 👩‍💻 Pasos para ejecutar en local (`dev`) el proyecto\n\n```bash\n# Para instalar la Base de Datos (MySQL) con Docker\n$ pnpm run deps\n\n# Ejecutar el proyecto en modo `dev`\n$ pnpm run dev\n```\n\n\u003e ⚠️ Importante: tener declaradas las siguientes variables de entorno, revisar el archivo `.env.example`.\n\n- `PORT`: Puerto del servidor. Ejemplo: `3000`\n- `DATABASE_HOST`: Endpoint de la base de datos. Ejemplo: `localhost`\n- `DATABASE_PORT`: Puerto de la base de datos. Ejemplo: `3306`\n- `DATABASE_ROOT_PASSWORD`: Contraseña del usuario root de la base de datos. Ejemplo: `root`\n- `DATABASE_NAME`: Nombre de la base de datos. Ejemplo: `softek_db`\n- `DATABASE_USER`: Nombre del usuario de la base de datos. Ejemplo: `superadmin`\n- `DATABASE_PASSWORD`: Contraseña del usuario de la base de datos. Ejemplo: `Admin123456*`\n- `SWAPI_API_URL`: URL de la API de Star Wars. Ejemplo: `https://swapi.py4e.com/api`\n\n\u003e 🧾 Nota: Se pueden usar los endpoints declarados en la carpeta `requests/`\n\nInstalar con el plugin de VSCode [REST Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client)\n\n```css\n├── requests/\n|   ├── dev/\n|   ├── people/\n|   |   ├── bulk-create.rest\n|   |   ├── create.rest\n|   |   ├── get-all.rest\n|   ├── app.rest\n└── (...)\n```\n\n## 🎉 Pasos para usar el proyecto\n\n1. Primero poblar la base de datos con los personajes de Swapi API, llamar al siguiente endpoint desde el archivo `bulk-create.rest` o con el comando **curl**:\n\n```bash\n$ curl -X POST http://localhost:3000/api/people/fusionados -H \"Content-Type: application/json\"\n```\n\n2. Visualizar la data almacenada en la base de datos, llamar al siguiente endpoint desde el archivo `get-all.rest` o con el comando curl:\n\n```bash\n$ curl -X GET http://localhost:3000/api/people/historial -H \"Content-Type: application/json\"\n```\n\n3. Se puede agregar nuevos persoanjes en la base de datos llamando al siguiente endpoint desde el archivo `create.rest` o con el comando curl:\n\n```bash\n$ curl -X POST http://localhost:3000/api/people/almacenar -H \"Content-Type: application/json\" -d '{ \"name\": \"Luke\" }'\n```\n\n## 🐛 Pasos para realizar pruebas del proyecto\n\nPruebas unitarias\n\n```bash\n$ pnpm run test\n```\n\nPruebas e2e\n\n```bash\n$ pnpm run test:e2e\n```\n\n## 🚀 Pasos para desplegar en AWS (`prod`) el proyecto\n\nDesde la terminal ejecutar el siguiente comando para configurar las credenciales de AWS:\n\n```bash\n### Ingresar las siguientes variable AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY y AWS_REGION en la terminal\n$ aws configure\n\nAWS Access Key ID [None]: $AWS_ACCESS_KEY_ID\nAWS Secret Access Key [None]: $AWS_ACCESS_KEY_ID\nDefault region name [None]: $AWS_REGION\nDefault output format [None]: text\n```\n\nDesplegar el proyecto en AWS con Serverless Framework:\n\n```bash\n$ pnpm run deploy\n```\n\n\u003e ⚠️ Importante: Adicionalmente se puede probar los endpoint en la carpeta `requests`\n\nDespues de desplegar el proyecto, agregar el endpoint (la variable `BASE_API_URL`) en el archivo .env. Tener en consideración que puede demorar unos segundos en reflejarse el nuevo endpoint.\n\n- `BASE_API_URL`: URL de la API en AWS. Ejemplo: `https://p92xfml1ml.execute-api.us-east-1.amazonaws.com/prod/docs`\n\n```css\n├── requests/\n|   ├── prod/\n|   ├── people/\n|   |   ├── bulk-create.rest\n|   |   ├── create.rest\n|   |   ├── get-all.rest\n|   ├── app.rest\n└── (...)\n```\n\nO probar con CURL\n\n1. Primero poblar la base de datos con los personajes de Swapi API, llamar al siguiente endpoint desde el archivo `bulk-create.rest` o con el comando **curl**:\n\n```bash\n$ curl -X POST $BASE_API_URL/prod/api/people/fusionados -H \"Content-Type: application/json\"\n\n### Ejemplo:\n$ curl -X POST https://p92xfml1ml.execute-api.us-east-1.amazonaws.com/prod/api/people/fusionados -H \"Content-Type: application/json\"\n```\n\n2. Visualizar la data almacenada en la base de datos, llamar al siguiente endpoint desde el archivo `get-all.rest` o con el comando curl:\n\n```bash\n$ curl -X GET $BASE_API_URL/prod/api/people/historial -H \"Content-Type: application/json\"\n\n### Ejemplo\n$ curl -X GET https://p92xfml1ml.execute-api.us-east-1.amazonaws.com/prod/api/people/historial -H \"Content-Type: application/json\"\n```\n\n3. Se puede agregar nuevos persoanjes en la base de datos llamando al siguiente endpoint desde el archivo `create.rest` o con el comando curl:\n\n```bash\n$ curl -X POST $BASE_API_URL/prod/api/people/almacenar -H \"Content-Type: application/json\" -d '{ \"name\": \"Luke\" }'\n\n### Ejemplo\n$ curl -X POST https://p92xfml1ml.execute-api.us-east-1.amazonaws.com/prod/api/people/almacenar -H \"Content-Type: application/json\" -d '{ \"name\": \"Luke\" }'\n```\n\nVer la documentacion en la siguiente ruta:\n\n```bash\n## Modo dev\n$ http://localhost:3000/docs\n\n## Modo prod\n$BASE_API_URL/prod/docs\n\n### Ejemplo:\nhttps://p92xfml1ml.execute-api.us-east-1.amazonaws.com/prod/docs\n```\n\nAl final las pruebas borrar el serverless creado con el siguiente commando:\n\n```bash\n$ pnpm run deploy:remove\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrandovidal%2Fprueba-tecnica-backend-softek","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbrandovidal%2Fprueba-tecnica-backend-softek","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbrandovidal%2Fprueba-tecnica-backend-softek/lists"}