Skip to content

Repository of LIDR.co, used in our training programs for software engineers and tech leaders

License

Notifications You must be signed in to change notification settings

LIDR-academy/AI4Devs-pipeline-solved

Repository files navigation

LTI - Sistema de Seguimiento de Talento

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.

Explicación de Directorios y Archivos

  • 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.

Estructura del Proyecto

El proyecto está dividido en dos directorios principales: frontend y backend.

Frontend

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.

Backend

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.

Primeros Pasos

Para comenzar con este proyecto, sigue estos pasos:

  1. Clona el repositorio.
  2. Instala las dependencias para el frontend y el backend:
cd frontend
npm install

cd ../backend
npm install
  1. Construye el servidor backend:
cd backend
npm run build
  1. Inicia el servidor backend:
cd backend
npm start
  1. En una nueva ventana de terminal, construye el servidor frontend:
cd frontend
npm run build
  1. 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.

Docker y PostgreSQL

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:

  1. Asegúrate de que el archivo .env en el directorio raíz del backend contenga la variable DATABASE_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 en schema.prisma, en la variable url.

  2. Abre una terminal y navega al directorio del backend donde se encuentra el archivo schema.prisma y seed.ts.

  3. 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": "[email protected]",
    "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"
    }
}

Configuración de EC2 y GitHub Actions

Para ejecutar este proyecto en una instancia EC2 y asegurarte de que GitHub Actions funcione correctamente, sigue estos pasos:

Configuración de EC2

  1. Crear una Instancia EC2:
  • Inicia sesión en la consola de AWS y navega a EC2.
  • Lanza una nueva instancia utilizando una AMI de Amazon Linux 2 o Ubuntu.
  • Asegúrate de seleccionar un tipo de instancia adecuado (por ejemplo, t2.micro para pruebas).
  1. Configurar el Grupo de Seguridad:
  • Asegúrate de que el grupo de seguridad asociado a tu instancia permita el tráfico en los siguientes puertos:
    • 22: Para SSH (acceso remoto).
    • 80: Para HTTP (si estás usando Nginx o un servidor web).
    • 8080: Para el backend (puerto donde se ejecuta tu aplicación).
  • Puedes agregar reglas de entrada en el grupo de seguridad para permitir el acceso desde cualquier IP (0.0.0.0/0) para propósitos de desarrollo, pero considera restringirlo en producción.
  1. Instalar Dependencias en EC2:
  • Conéctate a tu instancia EC2 a través de SSH:
    ssh -i your-key.pem ec2-user@your-ec2-public-ip
    
  • Instala Node.js y npm:
    curl -sL https://rpm.nodesource.com/setup_16.x | sudo bash -
    sudo yum install -y nodejs
    
  • Instala PM2 para gestionar tu aplicación:
    sudo npm install -g pm2
    
  • Instala Nginx si lo necesitas:
    sudo yum install -y nginx
    
  1. Configurar Variables de Entorno:
  • Crea un archivo .env en el directorio raíz del backend con las siguientes variables:
    DATABASE_URL=postgresql://user:password@localhost:5432/mydatabase
    
  • Asegúrate de reemplazar user, password y mydatabase con los valores correctos.

Variables en GitHub Actions

Para que el flujo de trabajo de GitHub Actions funcione correctamente, debes configurar las siguientes variables en los secretos de tu repositorio:

  1. AWS_ACCESS_ID: Tu ID de clave de acceso de AWS.
  2. AWS_ACCESS_KEY: Tu clave de acceso secreta de AWS.
  3. EC2_INSTANCE: La dirección IP pública o el nombre DNS de tu instancia EC2.

About

Repository of LIDR.co, used in our training programs for software engineers and tech leaders

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published