Universidad Mariano Galvez de Guatemala Facultad de Ingenieria en Sistemas | Analisis de Sistemas I
| Nombre | Rol | |---|---|---| | Cinthia Yadira Robles Sotoj | Product Owner | | Ezequiel Alexander Castro | Scrum Team | | Madelin Velvet Mendoza Bedoya | Scrum Master |
AgroStore es una aplicacion web para la comercializacion agricola entre productores y compradores. El sistema permite registrar usuarios, publicar productos agricolas, realizar pedidos, gestionar entregas, recibir notificaciones y consultar informacion administrativa mediante reportes.
La aplicacion esta dividida en tres componentes principales:
- Frontend: React con Vite.
- Backend: Node.js con Express.
- Base de datos: PostgreSQL.
La ejecucion local recomendada se realiza con Docker Compose, ya que levanta automaticamente la base de datos, el backend y el frontend.
Para instalar y ejecutar el proyecto se requiere:
| Requisito | Version recomendada | Uso |
|---|---|---|
| Sistema operativo | Windows 10/11, Linux o macOS | Entorno base de ejecucion |
| Git | Ultima version estable | Clonar y versionar el proyecto |
| Docker Desktop | Ultima version estable | Levantar servicios con contenedores |
| Node.js | 18 o superior | Ejecucion local sin Docker |
| npm | Incluido con Node.js | Instalacion de dependencias |
| Navegador web | Chrome, Edge o Firefox | Uso de la aplicacion |
Nota: si se usa Docker Compose, no es necesario instalar PostgreSQL manualmente porque la base de datos se levanta en un contenedor.
App_Agrostore/
|-- backend/ API REST con Node.js y Express
| |-- src/
| | |-- index.js Servidor principal
| | |-- db.js Conexion a PostgreSQL
| | |-- middleware/ Middleware de autenticacion
| | `-- routes/ Rutas REST del sistema
| |-- Dockerfile
| |-- package.json
| `-- .env.example
|
|-- frontend/ Aplicacion web React con Vite
| |-- src/
| | |-- components/ Componentes reutilizables
| | |-- context/ Contexto de autenticacion
| | |-- pages/ Pantallas por rol
| | `-- services/ Cliente API
| |-- Dockerfile
| |-- package.json
| `-- .env.example
|
|-- database/
| `-- schema.sql Script de creacion de base de datos
|
|-- docs/
| `-- api/
| |-- endpoints.md Resumen legible de endpoints
| `-- openapi.yaml Especificacion Swagger/OpenAPI
|
|-- docker-compose.yml Orquestacion de servicios
`-- README.md Guia principal del proyecto
Esta es la forma recomendada para ejecutar AgroStore localmente.
git clone https://github.com/alexdev-sudo/App_Agrostore.git
cd App_AgrostoreSi ya tienes el proyecto descargado:
cd C:\proyectos_Dev\App_Agrostoredocker compose up --buildEste comando construye y levanta:
agrostore-db: base de datos PostgreSQL.agrostore-backend: API REST Node.js/Express.agrostore-frontend: frontend React servido con Nginx.
| Servicio | URL |
|---|---|
| Frontend | http://localhost:5173 |
| Backend API | http://localhost:3001 |
| Health check | http://localhost:3001/health |
| Swagger API Docs | http://localhost:3001/api-docs/ |
| PostgreSQL | localhost:5432 |
| Rol | Telefono | Contrasena |
|---|---|---|
| Administrador | 00000000 |
****** |
Para pruebas funcionales tambien se pueden registrar usuarios con rol Productor y Comprador desde la pantalla de login.
Esta opcion es util para desarrollo local cuando se desea ejecutar frontend y backend por separado.
- PostgreSQL instalado localmente.
- Base de datos llamada
agrostore_db. - Script
database/schema.sqlejecutado manualmente en PostgreSQL.
cd backend
npm install
copy .env.example .env
npm run devEl backend quedara disponible en:
http://localhost:3001
cd frontend
npm install
copy .env.example .env
npm run devEl frontend quedara disponible en:
http://localhost:5173
Cuando se ejecuta con Docker, estas variables se definen en docker-compose.yml.
Cuando se ejecuta manualmente, deben colocarse en backend/.env.
| Variable | Descripcion | Ejemplo |
|---|---|---|
DB_HOST |
Host de PostgreSQL | db en Docker, localhost local |
DB_PORT |
Puerto de PostgreSQL | 5432 |
DB_USER |
Usuario de base de datos | postgres |
DB_PASSWORD |
Contrasena de base de datos | XXXXXX |
DB_NAME |
Nombre de la base de datos | agrostore_db |
JWT_SECRET |
Clave secreta para firmar tokens JWT | XXXXXXXXXXXXXXX_XXXXXXXXXXXX_XXXXXXXXXXXXXXXX |
PORT |
Puerto del backend | 3001 |
NODE_ENV |
Entorno de ejecucion | development |
FRONTEND_URL |
URL permitida para CORS | http://localhost:5173 |
Cuando se ejecuta manualmente, debe colocarse en frontend/.env.
| Variable | Descripcion | Ejemplo |
|---|---|---|
VITE_API_URL |
URL base de la API REST | http://localhost:3001/api |
Para ejecutar el despliegue local completo:
docker compose up --buildPara detener los servicios:
docker compose downPara detener y eliminar tambien los datos de PostgreSQL:
docker compose down -vAdvertencia:
docker compose down -velimina el volumen de base de datos y borra los datos locales.
Para desplegar la aplicacion en un servidor se recomienda:
- Configurar una base de datos PostgreSQL en el servidor o en un servicio administrado.
- Definir variables de entorno seguras para el backend.
- Cambiar
NODE_ENVaproduction. - Configurar
FRONTEND_URLcon la URL real del frontend. - Construir el frontend con
npm run build. - Servir el frontend mediante Nginx u otro servidor web.
- Ejecutar el backend con
npm starto dentro de un contenedor Docker. - No publicar secretos reales dentro del repositorio.
Se recomienda usar Visual Studio Code.
Extensiones sugeridas:
- ESLint.
- Docker.
- PostgreSQL.
- Thunder Client o REST Client.
- GitLens.
El proyecto no utiliza entorno virtual de Python.
Cada aplicacion Node.js administra sus dependencias mediante node_modules y package-lock.json.
Backend:
cd backend
npm installFrontend:
cd frontend
npm installBackend:
| Comando | Descripcion |
|---|---|
npm run dev |
Ejecuta el backend con Nodemon |
npm start |
Ejecuta el backend con Node.js |
Frontend:
| Comando | Descripcion |
|---|---|
npm run dev |
Ejecuta Vite en modo desarrollo |
npm run build |
Genera la version de produccion |
npm run preview |
Previsualiza el build |
npm run lint |
Ejecuta ESLint |
El frontend cuenta con ESLint configurado mediante frontend/eslint.config.js.
Para ejecutar la revision:
cd frontend
npm run lintActualmente no hay una configuracion formal de Prettier en el proyecto. Si el equipo decide utilizarlo, debe agregarse como dependencia de desarrollo y documentarse en esta seccion.
La API esta documentada con Swagger/OpenAPI.
| Recurso | Ubicacion |
|---|---|
| Swagger UI | http://localhost:3001/api-docs/ |
| OpenAPI YAML | docs/api/openapi.yaml |
| Resumen de endpoints | docs/api/endpoints.md |
Para probar rutas protegidas desde Swagger:
- Ejecutar
POST /api/auth/login. - Copiar el token JWT recibido.
- Presionar el boton Authorize.
- Pegar el token.
- Ejecutar endpoints protegidos.
El script de creacion de base de datos se encuentra en:
database/schema.sql
Cuando se usa Docker Compose, PostgreSQL ejecuta este script automaticamente la primera vez que se crea el volumen db_data.
- El backend usa JWT para autenticacion.
- Las contrasenas se almacenan como hash con bcrypt.
- Los roles principales son
Administrador,ProductoryComprador. - El contenedor del backend monta la carpeta
docspara poder leerdocs/api/openapi.yaml. - La API utiliza JSON para requests y responses.