- Frontend: React + Vite + React Router + Leaflet
- Backend: Python + FastAPI
- Base de datos: Neo4j 4.4.x
- Autenticación: JWT
- Python 3.10+
- Node.js 18+
- Neo4j Desktop con DBMS versión 4.4.x
- Descarga Neo4j Desktop desde https://neo4j.com/download/
- Crea un nuevo DBMS con versión 4.4.x
- Instala los plugins APOC y Neosemantics (n10s)
- Importa el dump proporcionado:
- Copia
fullstack-graph-db.dumpen la carpetaimportdel DBMS - Abre la terminal del DBMS y ejecuta:
- Copia
bin\neo4j-admin load --from=import\fullstack-graph-db.dump --database=neo4j --force- Inicia el DBMS
- Desactiva la autenticación en
neo4j.conf: dbms.security.auth_enabled=false
cd backend
python -m venv venv
venv\Scripts\activate # Windows
source venv/bin/activate # Mac/Linux
pip install -r requirements.txtCrea un archivo .env en la carpeta backend:
NEO4J_URI=bolt://localhost:7687
NEO4J_USER=neo4j
NEO4J_PASSWORD=
SECRET_KEY=supersecretkey123
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=60
EXTERNAL_API_URL=https://crbcn-go-api.kube.tech.beegroup-cimne.com
EXTERNAL_API_EMAIL=testui_registered@cimne.upc.edu
EXTERNAL_API_PASSWORD=123456aA!uvicorn main:app --reloadEl backend estará disponible en http://localhost:8000
La documentación de la API en http://localhost:8000/docs
cd frontend
npm install
npm run devEl frontend estará disponible en http://localhost:5173
- Levantar Neo4j
- Backend: uvicorn main:app --reload
- Frontend: npm run dev
fullstack-assessment/ ├── backend/ │ ├── main.py │ ├── auth.py │ ├── database.py │ ├── .env │ └── routes/ │ ├── users.py │ └── buildings.py ├── frontend/ │ └── src/ │ ├── api/ │ ├── components/ │ ├── context/ │ └── pages/ └── README.md
- Autenticación desactivada en Neo4j por simplicidad del entorno local. En producción debería estar habilitada.
- Coordenadas de edificios obtenidas en tiempo real desde la API del Catastro español usando la referencia catastral de cada edificio.
- Inconsistencia del dataset: Las referencias de los edificios del dump proporcionado (
9729505DF2892H, etc.) no coinciden con las referencias devueltas por la API externa en el endpointaverage_dwelling_area. Por este motivo, el valor del indicador aparece comonullpara los edificios del dump. El código de filtrado está correctamente implementado y funcionaría si los datasets estuvieran sincronizados. - Roles de usuario: Se implementan dos roles (
useryadmin) aunque la autorización por rol no está completamente restrictiva, priorizando la simplicidad según las indicaciones del enunciado.