This project is a full-stack application with a React frontend and an Express backend using Prisma as an ORM. The frontend is initiated with Create React App, and the backend is written in TypeScript.
backend/
: Contains the server-side code written in Node.js.src/
: Contains the source code for the backend.index.ts
: The entry point for the backend server.application/
: Contains the application logic.domain/
: Contains the business logic.infrastructure/
: Contains code that communicates with the database.presentation/
: Contains code related to the presentation layer (such as controllers).routes/
: Contains the route definitions for the API.tests/
: Contains test files.
prisma/
: Contains the Prisma schema file for ORM.tsconfig.json
: TypeScript configuration file.
frontend/
: Contains the client-side code written in React.src/
: Contains the source code for the frontend.public/
: Contains static files such as the HTML file and images.build/
: Contains the production-ready build of the frontend.
.env
: Contains the environment variables.docker-compose.yml
: Contains the Docker Compose configuration to manage your application's services.README.md
: This file contains information about the project and instructions on how to run it.
The project is divided into two main directories: frontend
and backend
.
The frontend is a React application, and its main files are located in the src
directory. The public
directory contains static assets, and the build directory contains the production build
of the application.
The backend is an Express application written in TypeScript. The src
directory contains the source code, divided into several subdirectories:
application
:Contains the application logic.domain
: Contains the domain models.infrastructure
: Contains code related to the infrastructure.presentation
: Contains code related to the presentation layer.routes
: Contains the application's routes.tests
: Contains the application's tests.
The prisma
directory contains the Prisma schema.
To get started with this project, follow these steps:
- Clone the repo
- install the dependencias for frontend and backend
cd frontend
npm install
cd ../backend
npm install
- Build the backend server
cd backend
npm run build
- Run the backend server
cd backend
npm start
- In a new terminal window, build the frontend server:
cd frontend
npm run build
- Start the frontend server
cd frontend
npm start
The backend server will be running at http://localhost:3010, and the frontend will be available at http://localhost:3000.
This project uses Docker to run a PostgreSQL database. Here's how to get it up and running:
Install Docker on your machine if you haven't done so already. You can download it here. Navigate to the root directory of the project in your terminal. Run the following command to start the Docker container:
docker-compose up -d
This will start a PostgreSQL database in a Docker container. The -d flag runs the container in detached mode, meaning it runs in the background.
To access the PostgreSQL database, you can use any PostgreSQL client with the following connection details:
- Host: localhost
- Port: 5432
- User: postgres
- Password: password
- Database: mydatabase
Please replace User, Password, and Database with the actual user, password, and database name specified in your .env file.
To stop the Docker container, run the following command:
docker-compose down
To generate the database using Prisma, follow these steps:
Make sure the .env
file in the root directory of the backend contains the DATABASE_URL
variable with the correct connection string to your PostgreSQL database. If it doesn't work, try replacing the full URL directly in schema.prisma
, in the url
variable.
Open a terminal and navigate to the backend directory where the schema.prisma and seed.ts files are located.
Run the following commands to generate the Prisma structure, apply migrations to your database, and populate it with example data:
npx prisma generate
npx prisma migrate dev
ts-node seed.ts
Once you have completed all the steps, you should be able to save new candidates, both via the web and API, view them in the database, and retrieve them via GET by ID.
POST http://localhost:3010/candidates
{
"firstName": "Albert",
"lastName": "Saelices",
"email": "albert.saelices@gmail.com",
"phone": "656874937",
"address": "Calle Sant Dalmir 2, 5ºB. Barcelona",
"educations": [
{
"institution": "UC3M",
"title": "Computer Science",
"startDate": "2006-12-31",
"endDate": "2010-12-26"
}
],
"workExperiences": [
{
"company": "Coca Cola",
"position": "SWE",
"description": "",
"startDate": "2011-01-13",
"endDate": "2013-01-17"
}
],
"cv": {
"filePath": "uploads/1715760936750-cv.pdf",
"fileType": "application/pdf"
}
}
Este proyecto es una aplicación full-stack con un frontend en React y un backend en Express usando Prisma como un ORM. El frontend se inicia con Create React App y el backend está escrito en TypeScript.
backend/
: Contiene el código del lado del servidor escrito en Node.js.src/
: Contiene el código fuente para el backend.index.ts
: El punto de entrada para el servidor backend.application/
: Contiene la lógica de aplicación.domain/
: Contiene la lógica de negocio.infrastructure/
: Contiene código que se comunica con la base de datos.presentation/
: Contiene código relacionado con la capa de presentación (como controladores).routes/
: Contiene las definiciones de rutas para la API.tests/
: Contiene archivos de prueba.
prisma/
: Contiene el archivo de esquema de Prisma para ORM.tsconfig.json
: Archivo de configuración de TypeScript.
frontend/
: Contiene el código del lado del cliente escrito en React.src/
: Contiene el código fuente para el frontend.public/
: Contiene archivos estáticos como el archivo HTML e imágenes.build/
: Contiene la construcción lista para producción del frontend.
.env
: Contiene las variables de entorno.docker-compose.yml
: Contiene la configuración de Docker Compose para gestionar los servicios de tu aplicación.README.md
: Este archivo, contiene información sobre el proyecto e instrucciones sobre cómo ejecutarlo.
El proyecto está dividido en dos directorios principales: frontend
y backend
.
El frontend es una aplicación React y sus archivos principales están ubicados en el directorio src
. El directorio public
contiene activos estáticos y el directorio build
contiene la construcción de producción de la aplicación.
El backend es una aplicación Express escrita en TypeScript. El directorio src
contiene el código fuente, dividido en varios subdirectorios:
application
: Contiene la lógica de aplicación.domain
: Contiene los modelos de dominio.infrastructure
: Contiene código relacionado con la infraestructura.presentation
: Contiene código relacionado con la capa de presentación.routes
: Contiene las rutas de la aplicación.tests
: Contiene las pruebas de la aplicación.
El directorio prisma
contiene el esquema de Prisma.
Tienes más información sobre buenas prácticas utilizadas en la guía de buenas prácticas.
Las especificaciones de todos los endpoints de API los tienes en api-spec.yaml.
La descripción y diagrama del modelo de datos los tienes en ModeloDatos.md.
Para comenzar con este proyecto, sigue estos pasos:
- Clona el repositorio.
- Instala las dependencias para el frontend y el backend:
cd frontend
npm install
cd ../backend
npm install
- Construye el servidor backend:
cd backend
npm run build
- Inicia el servidor backend:
cd backend
npm start
- En una nueva ventana de terminal, construye el servidor frontend:
cd frontend
npm run build
- Inicia el servidor frontend:
cd frontend
npm start
El servidor backend estará corriendo en http://localhost:3010 y el frontend estará disponible en http://localhost:3000.
Este proyecto usa Docker para ejecutar una base de datos PostgreSQL. Así es cómo ponerlo en marcha:
Instala Docker en tu máquina si aún no lo has hecho. Puedes descargarlo desde aquí. Navega al directorio raíz del proyecto en tu terminal. Ejecuta el siguiente comando para iniciar el contenedor Docker:
docker-compose up -d
Esto iniciará una base de datos PostgreSQL en un contenedor Docker. La bandera -d corre el contenedor en modo separado, lo que significa que se ejecuta en segundo plano.
Para acceder a la base de datos PostgreSQL, puedes usar cualquier cliente PostgreSQL con los siguientes detalles de conexión:
- Host: localhost
- Port: 5432
- User: postgres
- Password: password
- Database: mydatabase
Por favor, reemplaza User, Password y Database con el usuario, la contraseña y el nombre de la base de datos reales especificados en tu archivo .env.
Para detener el contenedor Docker, ejecuta el siguiente comando:
docker-compose down
Para generar la base de datos utilizando Prisma, sigue estos pasos:
-
Asegúrate de que el archivo
.env
en el directorio raíz del backend contenga la variableDATABASE_URL
con la cadena de conexión correcta a tu base de datos PostgreSQL. Si no te funciona, prueba a reemplazar la URL completa directamente enschema.prisma
, en la variableurl
. -
Abre una terminal y navega al directorio del backend donde se encuentra el archivo
schema.prisma
yseed.ts
. -
Ejecuta los siguientes comandos para generar la estructura de prisma, las migraciones a tu base de datos y poblarla con datos de ejemplo:
npx prisma generate
npx prisma migrate dev
ts-node seed.ts
Una vez has dado todos los pasos, deberías poder guardar nuevos candidatos, tanto via web, como via API, verlos en la base de datos y obtenerlos mediante GET por id.
POST http://localhost:3010/candidates
{
"firstName": "Albert",
"lastName": "Saelices",
"email": "albert.saelices@gmail.com",
"phone": "656874937",
"address": "Calle Sant Dalmir 2, 5ºB. Barcelona",
"educations": [
{
"institution": "UC3M",
"title": "Computer Science",
"startDate": "2006-12-31",
"endDate": "2010-12-26"
}
],
"workExperiences": [
{
"company": "Coca Cola",
"position": "SWE",
"description": "",
"startDate": "2011-01-13",
"endDate": "2013-01-17"
}
],
"cv": {
"filePath": "uploads/1715760936750-cv.pdf",
"fileType": "application/pdf"
}
}