Proyecto full stack para gestionar un inventario de vehículos de una flota, con autenticación y CRUD completo.fileciteturn3file0
- Backend: Node.js, Express, MS SQL Server, JWT
- Frontend: React, Vite, React Router, Axios
- Base de datos: Microsoft SQL Server
- DevOps: Azure DevOps (CI/CD), Azure App Service, Azure SQL Database
backend/
src/
server.js
app.js
config/
db.js
utils/
jwt.js
middleware/
auth.middleware.js
error.middleware.js
repositories/
user.repository.js
vehicle.repository.js
services/
auth.service.js
vehicle.service.js
controllers/
auth.controller.js
vehicle.controller.js
routes/
index.js
auth.routes.js
vehicle.routes.js
sql/
schema.sql
seed.sql
package.json
.env.example
frontend/
src/
main.jsx
App.jsx
api/
axiosClient.js
authApi.js
vehicleApi.js
auth/
AuthContext.jsx
ProtectedRoute.jsx
components/
layout/Navbar.jsx
vehicles/VehicleForm.jsx
vehicles/VehicleTable.jsx
pages/
LoginPage.jsx
VehicleListPage.jsx
VehicleCreatePage.jsx
VehicleEditPage.jsx
VehicleDetailPage.jsx
package.json
vite.config.js
index.html
azure-pipelines.yml
README.md
.gitignore
-
Abrir SQL Server Management Studio (SSMS).
-
Ejecutar el script
backend/sql/schema.sqlpara crear:- Base de datos
VehiclesDB - Tablas
UsersyVehicles
- Base de datos
-
Ejecutar
backend/sql/seed.sqlpara insertar el usuario inicial:- Usuario:
admin - Contraseña:
admin123(almacenada como hash con bcrypt)
- Usuario:
Crear un archivo .env en la carpeta backend basado en .env.example, por ejemplo:
PORT=4000
DB_HOST=localhost
DB_USER=sa
DB_PASS=StrongPass_2025!
DB_NAME=VehiclesDB
JWT_SECRET=ProdKey_InvVehiculos_2025_XYZcd backend
npm install
npm run devLa API quedará disponible en:
http://localhost:4000/api
-
POST /api/auth/login- Body:
{ "username": "admin", "password": "admin123" } - Respuesta: token JWT + datos básicos del usuario
- Body:
-
GET /api/vehicles -
GET /api/vehicles/:id -
POST /api/vehicles -
PUT /api/vehicles/:id -
DELETE /api/vehicles/:id
Todas las rutas de vehículos requieren encabezado:
Authorization: Bearer <token>cd frontend
npm install
npm run devLa aplicación se levanta por defecto en:
http://localhost:5173
- Iniciar sesión con:
- Usuario:
admin - Contraseña:
admin123
- Usuario:
- Ver listado de vehículos.
- Crear, editar, consultar y eliminar vehículos.
- Cerrar sesión desde la barra de navegación.
El cliente Axios se encuentra en:
frontend/src/api/axiosClient.js
Por defecto:
baseURL: "http://localhost:4000/api";Si el backend se despliega en Azure App Service, se debe actualizar esta baseURL para apuntar a la URL pública de la API.
-
Levantar SQL Server y ejecutar
schema.sql+seed.sql. -
Configurar
.envenbackend. -
Ejecutar backend:
cd backend npm install npm run dev -
Ejecutar frontend:
cd frontend npm install npm run dev -
Navegar a
http://localhost:5173e iniciar sesión conadmin/admin123.
Esta sección describe cómo implementar un pipeline de CI/CD en Azure DevOps y desplegar la solución en Azure App Service y Azure SQL Database, tal como se solicita en el examen.fileciteturn3file0
En la raíz del repositorio se incluye un archivo azure-pipelines.yml con una configuración base de integración continua que:
- Ejecuta
npm installdel backend. - Ejecuta
npm installdel frontend. - Construye el frontend con
npm run build. - Publica los artefactos del frontend (carpeta
dist).
Flujo general del pipeline:
- Disparador en la rama
main. - Job de build para backend (validar que instala correctamente).
- Job de build para frontend (validar que instala y compila).
- Publicación de artefactos de frontend para despliegue.
Pasos recomendados:
- Crear un proyecto en Azure DevOps.
- Conectar el repositorio donde está este código (GitHub o Azure Repos).
- En Pipelines → New pipeline, seleccionar:
- Fuente: repositorio con este proyecto.
- Opción: “Existing Azure Pipelines YAML file”.
- Archivo:
/azure-pipelines.yml.
- Guardar y ejecutar el pipeline para validar que el build de backend y frontend se completa correctamente.
-
Crear un recurso Azure SQL Database.
- Conectarse desde SSMS.
- Ejecutar los scripts
backend/sql/schema.sqlybackend/sql/seed.sql.
-
Crear un recurso Azure App Service con runtime de Node.js (por ejemplo, Node 18 LTS).
-
Configurar en el App Service las variables de entorno de producción:
DB_HOST(servidor o cadena de conexión de Azure SQL)DB_USERDB_PASSDB_NAME(por ejemplo,VehiclesDB)JWT_SECRETNODE_ENV=production
-
Agregar al pipeline una tarea de despliegue de App Service (por ejemplo,
AzureWebApp@1) apuntando al código del backend. -
Una vez desplegado, la API quedará expuesta en una URL del tipo:
https://<nombre-app-service>.azurewebsites.net/api
Opciones:
Azure Static Web Apps
- Crear un recurso Azure Static Web App.
- Conectar el mismo repositorio.
- Configurar:
- Comando de build:
npm run build - Carpeta de salida:
dist
- Comando de build:
- Actualizar
frontend/src/api/axiosClient.jspara apuntar a la URL del backend en Azure App Service.
Azure App Service (contenido estático)
- Utilizar el artefacto del pipeline con la carpeta
frontend/dist. - Crear un App Service configurado para servir contenido estático.
- Publicar el contenido de
disten el App Service. - Asegurarse de que
axiosClient.jsusa la URL pública del backend en Azure.
Para cumplir con el requisito de:
Código Fuente: Subir todo el código a un repositorio público o privado y proporcionar acceso.fileciteturn3file0
Pasos sugeridos:
git init
git add .
git commit -m "Prueba técnica - Inventario de vehículos"
git branch -M main
git remote add origin <URL_DEL_REPOSITORIO>
git push -u origin mainPosteriormente, compartir la URL del repositorio al evaluador.
- Usuario:
admin - Contraseña:
admin123
Estas credenciales deben utilizarse únicamente en entornos de prueba o desarrollo.