🇪🇸 Versión en Español
- 💻 Proyecto InternIT - Backend
- 💻 InternIT Project - Backend
Este repositorio contiene el código del backend de la aplicacion InternIT, una API desarrollada en Node.js y TypeScript para gestionar la comunicación entre empresas y aplicantes para puestos de prácticas. Proporciona una serie de endpoints para la autenticación, gestión de perfiles, ofertas de trabajo y paneles informativos. Además, se utiliza MongoDB como base de datos.
Podras acceder al repositorio de la parte de frontend en este enlace https://github.com/TheGrootTeam/front_alfa
El backend de esta aplicación está construido con tecnologías modernas que aseguran escalabilidad, seguridad y un desarrollo eficiente. A continuación, se listan las principales tecnologías utilizadas junto con sus versiones:
- v22.3.0: Plataforma de ejecución JavaScript en el servidor.
- v5.5.3: Lenguaje de programación que añade tipado estático a JavaScript.
- v4.19.2: Framework para Node.js utilizado para crear la API RESTful.
- v6.8.0: Base de datos NoSQL utilizada para almacenar la información de la aplicación.
- v8.5.1: Librería de modelado para MongoDB y Node.js.
- v29.7.0: Framework de testing utilizado para pruebas unitarias.
- v6.2.8: Utilizado para documentar la API.
- v8.57.0: Herramienta para la verificación del código, asegurando un código limpio y consistente.
- v3.3.3: Formateador de código para mantener una consistencia en el estilo de escritura.
- v16.4.5: Utilizado para cargar variables de entorno desde un archivo
.env
en el proceso de Node.js. - : Servicio para gestionar el envío de correos electrónicos en la aplicación.
- : Tecnología de contenedores utilizada para desplegar la aplicación en distintos entornos.
Puedes encontrar más detalles sobre las tecnologías y módulos utilizados en este proyecto en la siguiente documentación:
Antes de comenzar, asegúrate de tener instalados los siguientes software en tu entorno de desarrollo:
-
MONGO_URI=mongodb://127.0.0.1:27017/Ejemplo
-
API_VERSION=version
-
JWT_SECRET=place-here-a-custom-string
-
RESEND_API_KEY=place-here-your-resend-api-key
-
CLIENT_PORT=vite-port
-
FILES_PATH=/usr/src/app/public # para usar en produccion
-
FILES_PATH=src/public # para usar en desarrollo
Para empezar con el desarrollo de este proyecto, sigue los pasos a continuación:
-
Clonar el repositorio:
git clone https://github.com/usuario/back_internit.git cd back_internit
-
Instalar dependencias: Asegúrate de tener Node.js instalado. Luego, ejecuta el siguiente comando:
npm install
-
Configurar las variables de entorno: Debes configurar las variables de entorno en un archivo
.env
en la raíz del proyecto, siguiendo el formato de.env.example
. Las variables clave incluyen:-
MONGODB_URI
: La URI de conexión a MongoDB. -
JWT_SECRET
: La clave secreta para el uso de JWT. -
PORT
: El puerto en el que se ejecutará el servidor. -
RESEND_API_KEY
: La clave API para enviar correos electrónicos -
CLIENT_PORT
: El puerto donde escuchará el servidor -
FILES_PATH=/usr/src/app/public # para usar en produccion
-
FILES_PATH=src/public # para usar en desarrollo
-
-
Iniciar la base de datos:
npm run initDB
-
Iniciar el servidor de desarrollo:
npm run dev
-
Compilar el proyecto:
npm run build
-
Iniciar el servidor en producción:
npm start
-
Ejecutar pruebas:
npm run test
-
Linting:
npm run lint
-
Formatear el código:
npm run format
Para iniciar el servidor en modo desarrollo, ejecuta el siguiente comando:
npm run dev
El servidor se iniciará en el puerto especificado en las variables de entorno (por defecto en http://localhost:3000
).
Para construir y ejecutar el servidor en modo producción, sigue estos pasos:
-
Compila el código:
npm run build
-
Inicia el servidor:
npm start
- POST
/login
: Iniciar sesión y obtener un token JWT. - POST
/register
: Registrar un nuevo usuario (empresa o aplicante).
- GET
/profile
: Obtener el perfil del usuario autenticado. - PUT
/profile/update
: Actualizar la información del perfil.
- GET
/offers
: Obtener una lista de ofertas de trabajo. - POST
/offers/new
: Crear una nueva oferta de trabajo. - PATCH
/offers/edit
: Editar una oferta de trabajo existente.
- GET
/infoDashboards/:applicantOrCompany
: Obtener métricas e información en tiempo real para el tipo de usuario.
POST /login
- Description: Authenticates a user and returns a token.
- Request:
- Body:
{ "email": "[email protected]", "password": "password123" }
- Body:
- Response:
- 200 OK:
{ "token": "dsfoig324okjtl24" }
- 401 Unauthorized:
{ "error": "wrong password" }
- 200 OK:
POST /register
- Description: Registers a new user.
- Request:
- Body:
{ "dniCif": "12345678A", "password": "password123", "isCompany": false, "email": "[email protected]" }
- Body:
- Response:
- 201 Created:
{ "message": "User registered successfully" }
- 400 Bad Request:
{ "error": "Invalid input data" }
- 201 Created:
PUT /profile/update
- Description: Updates user profile information.
- Request:
- Headers:
{ "Authorization": "Bearer <token>" }
- Body:
{ "name": "New Name", "email": "[email protected]" }
- Headers:
- Response:
- 200 OK:
{ "message": "Profile updated successfully" }
- 400 Bad Request:
{ "error": "Invalid input data" }
- 200 OK:
GET /offers
- Description: Retrieves a list of offers.
- Response:
- 200 OK:
[ { "id": "offer1", "title": "Offer Title", "description": "Offer Description", "price": 100 }, ... ]
- 200 OK:
POST /offers/new
- Description: Creates a new offer.
- Request:
- Headers:
{ "Authorization": "Bearer <token>" }
- Body:
{ "title": "Offer Title", "description": "Offer Description", "price": 100 }
- Headers:
- Response:
- 201 Created:
{ "message": "Offer created successfully" }
- 201 Created:
PATCH /offers/edit
- Description: Edits an existing offer.
- Request:
- Headers:
{ "Authorization": "Bearer <token>" }
- Body:
{ "id": "offer1", "title": "Updated Offer Title", "description": "Updated Offer Description", "price": 150 }
- Headers:
- Response:
- 200 OK:
{ "message": "Offer updated successfully" }
- 200 OK:
GET /infoDashboards/:applicantOrCompany
- Description: Retrieves information dashboards based on the type of user (applicant or company).
- Request:
- Headers:
{ "Authorization": "Bearer <token>" }
- Headers:
- Response:
- 200 OK:
{ "data": [ { "metric": "Some Metric", "value": 123 }, ... ] }
- 200 OK:
A continuación, se muestra una visión general de la estructura del proyecto:
.
├── src
│ ├── bin
│ │ └── www.ts # Punto de entrada de la aplicación
│ ├── controllers # Controladores de las API
│ │ ├── CreateOfferController.ts
│ │ ├── LoginController.ts
│ │ ├── RegisterController.ts
│ │ ├── EditProfileController.ts
│ ├── middlewares # Funciones de middleware personalizadas
│ │ └── authJWT.ts
│ ├── models # Modelos de MongoDB (Schemas)
│ │ ├── Applicant.ts
│ │ ├── Company.ts
│ │ ├── Offer.ts
│ ├── routes # Definición de rutas de la API
│ │ ├── index.ts
│ │ ├── offersRoutes.ts
│ │ ├── loginRoutes.ts
│ │ ├── registerRoutes.ts
│ │ ├── profileRoutes.ts
│ ├── swagger.config.ts # Configuración de Swagger para la documentación de la API
├── package.json # Dependencias y scripts del proyecto
└── tsconfig.json # Configuración de TypeScript
El backend de esta aplicación sigue una arquitectura modular y escalable, organizada por capas. A continuación, se describen los principales componentes de la arquitectura:
- Controladores (Controllers): Los controladores manejan las peticiones de la API, procesan los datos y delegan las operaciones de la base de datos a los modelos.
- Modelos (Models): Los modelos definen la estructura de los datos en MongoDB utilizando Mongoose, lo que permite la interacción directa con la base de datos.
- Middlewares: Los middlewares se encargan de tareas como la autenticación con JWT, la validación de datos y el manejo de errores.
- Swagger: La documentación de la API se genera automáticamente utilizando Swagger, lo que facilita el consumo de la API por parte de otros desarrolladores.
- Capa de Presentación (API): Interactúa con el cliente a través de las peticiones HTTP.
- Capa de Negocio (Lógica): Contiene la lógica de negocio que se implementa en los controladores.
- Capa de Persistencia (Base de Datos): Gestión y manipulación de datos en MongoDB a través de los modelos de Mongoose.
Este proyecto incluye un archivo Dockerfile
que permite construir y desplegar la aplicación en un entorno de contenedores.
docker build -t back_internit .
docker run -p 3000:3000 back_internit
El servidor estará disponible en http://localhost:3000
.
Este proyecto está en desarrollo activo. Próximas características incluyen mejoras en la documentación de la API y optimizaciones en el manejo de grandes volúmenes de datos.
Este proyecto ha sido desarrollado en su totalidad por el equipo The Goot Team, en el marco del Bootcamp de Desarrollo Web Fullstack (Edición XVI de la escuela KeepCoding).
- Ivette Farre - https://github.com/Iv3tt3
- Carles Espuñes - https://github.com/Cespuess
- Marta Vilaseca - https://github.com/marta-vilaseca
- David Arraras - https://github.com/Darrlop
- Syra Dominguez - https://github.com/SyraDominguez
Para contribuir a este proyecto:
- Realiza un fork del repositorio.
- Crea una nueva rama (
git checkout -b feature/nueva-funcionalidad
). - Realiza tus cambios y haz commit (
git commit -m 'Añadir nueva funcionalidad'
). - Sube los cambios a tu repositorio (
git push origin feature/nueva-funcionalidad
). - Abre un Pull Request para revisión.
Este proyecto está licenciado bajo la Licencia MIT. Consulta el archivo LICENSE para obtener más detalles.
🇬🇧 English Version
- 💻 Proyecto InternIT - Backend
- 💻 InternIT Project - Backend
This repository contains the backend code for the InternIT application, an API developed in Node.js and TypeScript to manage communication between companies and job applicants. It provides a set of endpoints for authentication, profile management, job offers, and information dashboards. In addition, MongoDB is used as the database.
You can access the repository of the frontend part in this link https://github.com/thegrootteam/front_alfa
The backend of this application is built with modern technologies that ensure scalability, security, and efficient development. Below is a list of the main technologies used along with their versions:
- v22.3.0: JavaScript runtime platform on the server.
- v5.5.3: Programming language that adds static typing to JavaScript.
- v4.19.2: Framework for Node.js used to create the RESTful API.
- v6.8.0: NoSQL database used to store application data.
- v8.5.1: Modeling library for MongoDB and Node.js.
- v29.7.0: Testing framework used for unit tests.
- v6.2.8: Used to document the API.
- v8.57.0: Code verification tool, ensuring clean and consistent code.
- v3.3.3: Code formatter to maintain consistency in code style.
- v16.4.5: Used to load environment variables from a
.env
file in Node.js processes. - : Container technology used to deploy the application in different environments.
You can find more details about the technologies and modules used in this project in the following documentation:
Before starting, make sure you have the following software installed in your development environment:
-
MONGO_URI=mongodb://127.0.0.1:27017/Ejemplo
-
API_VERSION=version
-
JWT_SECRET=place-here-a-custom-string
-
RESEND_API_KEY=place-here-your-resend-api-key
-
CLIENT_PORT=vite-port
-
FILES_PATH=/usr/src/app/public # to use in production
-
FILES_PATH=src/public # to use in development
To start development on this project, follow the steps below:
-
Clone the repository:
git clone https://github.com/usuario/back_internit.git cd back_internit
-
Install dependencies: Make sure Node.js is installed. Then, run the following command:
npm install
-
Set up environment variables: You need to configure environment variables in a
.env
file in the root of the project, following the format of.env.example
. The key variables include:-
MONGODB_URI
: MongoDB connection URI. -
JWT_SECRET
: The secret key for using JWT. -
PORT
: The port where the server will run. -
RESEND_API_KEY
: The API key for sending emails -
CLIENT_PORT
: The port where the server will listen -
FILES_PATH
: /usr/src/app/public # to use in production -
FILES_PATH
: /src/public # to use in development
-
-
Initialize the database:
npm run initDB
-
Start the development server:
npm run dev
-
Compile the project:
npm run build
-
Start the production server:
npm start
-
Run tests:
npm run test
-
Lint the code:
npm run lint
-
Format the code:
npm run format
To start the server in development mode, run the following command:
npm run dev
The server will start on the port specified in the environment variables (default is http://localhost:3000
).
To build and start the server in production mode, follow these steps:
-
Compile the code:
npm run build
-
Start the server:
npm start
- POST
/login
: Log in and obtain a JWT token. - POST
/register
: Register a new user (company or applicant).
- GET
/profile
: Get the profile of the authenticated user. - PUT
/profile/update
: Update profile information.
- GET
/offers
: Get a list of job offers. - POST
/offers/new
: Create a new job offer. - PATCH
/offers/edit
: Edit an existing job offer.
- GET
/infoDashboards/:applicantOrCompany
: Get real-time metrics and information for the type of user.
POST /login
- Description: Authenticates a user and returns a token.
- Request:
- Body:
{ "email": "[email protected]", "password": "password123" }
- Body:
- Response:
- 200 OK:
{ "token": "dsfoig324okjtl24" }
- 401 Unauthorized:
{ "error": "wrong password" }
- 200 OK:
POST /register
- Description: Registers a new user.
- Request:
- Body:
{ "dniCif": "12345678A", "password": "password123", "isCompany": false, "email
- Body:
": "[email protected]" } ```
- Response:
- 201 Created:
{ "message": "User registered successfully" }
- 400 Bad Request:
{ "error": "Invalid input data" }
- 201 Created:
PUT /profile/update
- Description: Updates user profile information.
- Request:
- Headers:
{ "Authorization": "Bearer <token>" }
- Body:
{ "name": "New Name", "email": "[email protected]" }
- Headers:
- Response:
- 200 OK:
{ "message": "Profile updated successfully" }
- 400 Bad Request:
{ "error": "Invalid input data" }
- 200 OK:
GET /offers
- Description: Retrieves a list of offers.
- Response:
- 200 OK:
[ { "id": "offer1", "title": "Offer Title", "description": "Offer Description", "price": 100 }, ... ]
- 200 OK:
POST /offers/new
- Description: Creates a new offer.
- Request:
- Headers:
{ "Authorization": "Bearer <token>" }
- Body:
{ "title": "Offer Title", "description": "Offer Description", "price": 100 }
- Headers:
- Response:
- 201 Created:
{ "message": "Offer created successfully" }
- 201 Created:
PATCH /offers/edit
- Description: Edits an existing offer.
- Request:
- Headers:
{ "Authorization": "Bearer <token>" }
- Body:
{ "id": "offer1", "title": "Updated Offer Title", "description": "Updated Offer Description", "price": 150 }
- Headers:
- Response:
- 200 OK:
{ "message": "Offer updated successfully" }
- 200 OK:
GET /infoDashboards/:applicantOrCompany
- Description: Retrieves information dashboards based on the type of user (applicant or company).
- Request:
- Headers:
{ "Authorization": "Bearer <token>" }
- Headers:
- Response:
- 200 OK:
{ "data": [ { "metric": "Some Metric", "value": 123 }, ... ] }
- 200 OK:
Below is an overview of the project structure:
.
├── src
│ ├── bin
│ │ └── www.ts # Application entry point
│ ├── controllers # API controllers
│ │ ├── CreateOfferController.ts
│ │ ├── LoginController.ts
│ │ ├── RegisterController.ts
│ │ ├── EditProfileController.ts
│ ├── middlewares # Custom middleware functions
│ │ └── authJWT.ts
│ ├── models # MongoDB Models (Schemas)
│ │ ├── Applicant.ts
│ │ ├── Company.ts
│ │ ├── Offer.ts
│ ├── routes # API route definitions
│ │ ├── index.ts
│ │ ├── offersRoutes.ts
│ │ ├── loginRoutes.ts
│ │ ├── registerRoutes.ts
│ │ ├── profileRoutes.ts
│ ├── swagger.config.ts # Swagger configuration for API documentation
├── package.json # Project dependencies and scripts
└── tsconfig.json # TypeScript configuration
The backend of this application follows a modular and scalable architecture, organized into layers. Below are the main components of the architecture:
- Controllers: Handle API requests, process data, and delegate database operations to models.
- Models: Define the data structure in MongoDB using Mongoose, allowing direct interaction with the database.
- Middlewares: Responsible for tasks such as JWT authentication, data validation, and error handling.
- Swagger: Automatically generates API documentation using Swagger, facilitating API consumption by other developers.
- Presentation Layer (API): Interacts with the client through HTTP requests.
- Business Layer (Logic): Contains the business logic implemented in the controllers.
- Persistence Layer (Database): Manages and manipulates data in MongoDB through Mongoose models.
This project includes a Dockerfile
that allows you to build and deploy the application in a containerized environment.
docker build -t back_internit .
docker run -p 3000:3000 back_internit
The server will be available at http://localhost:3000
.
This project is in active development. Upcoming features include improvements to API documentation and optimizations for handling large volumes of data.
This project was developed entirely by the The Goot Team, as part of the Fullstack Web Development Bootcamp (16th Edition) at KeepCoding.
- Ivette Farre - https://github.com/Iv3tt3
- Carles Espuñes - https://github.com/Cespuess
- Marta Vilaseca - https://github.com/marta-vilaseca
- David Arraras - https://github.com/Darrlop
- Syra Dominguez - https://github.com/SyraDominguez
To contribute to this project:
- Fork the repository.
- Create a new branch (
git checkout -b feature/new-feature
). - Make your changes and commit them (
git commit -m 'Add new feature'
). - Push the changes to your repository (
git push origin feature/new-feature
). - Open a Pull Request for review.
This project is licensed under the MIT License. See the LICENSE file for more details.