diff --git a/backend/fastapi/.env b/backend/fastapi/.env deleted file mode 100644 index 0822967..0000000 --- a/backend/fastapi/.env +++ /dev/null @@ -1,4 +0,0 @@ -# esto esta aqui porque es un entorno local -# y además un usuario y contraseña bastante -# genéricos -DB_URL = "mysql+aiomysql://root:root@localhost:3306/DAD" \ No newline at end of file diff --git a/backend/fastapi/config.py b/backend/fastapi/config.py deleted file mode 100644 index 815f7df..0000000 --- a/backend/fastapi/config.py +++ /dev/null @@ -1 +0,0 @@ -API_PREFIX = "/api/v1" \ No newline at end of file diff --git a/backend/fastapi/db.py b/backend/fastapi/db.py deleted file mode 100644 index e8df993..0000000 --- a/backend/fastapi/db.py +++ /dev/null @@ -1,7 +0,0 @@ -from databases import Database -import os -from dotenv import load_dotenv - -load_dotenv() -DB_URL = os.getenv("DB_URL") -database = Database(DB_URL) \ No newline at end of file diff --git a/backend/fastapi/endpoints/__pycache__/sensors.cpython-312.pyc b/backend/fastapi/endpoints/__pycache__/sensors.cpython-312.pyc deleted file mode 100644 index f5f448c..0000000 Binary files a/backend/fastapi/endpoints/__pycache__/sensors.cpython-312.pyc and /dev/null differ diff --git a/backend/fastapi/endpoints/sensors.py b/backend/fastapi/endpoints/sensors.py deleted file mode 100644 index 4cb809f..0000000 --- a/backend/fastapi/endpoints/sensors.py +++ /dev/null @@ -1,67 +0,0 @@ -from fastapi import APIRouter, Body, HTTPException, Query -from fastapi import APIRouter, Body, HTTPException, Query -from typing import Optional -from pydantic import BaseModel -from sqlalchemy import select, insert -from sqlalchemy.ext.asyncio import AsyncSession -from sqlalchemy.future import select -from models.sql.Sensor import sensor_mq_data -from db import database -from models.schemas.SensorModel import SensorModel - -router = APIRouter() - -@router.get("") -async def get_all( - _sort: Optional[str] = Query(None, alias="_sort", description="Campo por el cual ordenar los resultados"), - _order: Optional[str] = Query("asc", description="Orden de los resultados, 'asc' o 'desc'"), - _limit: Optional[int] = Query(100, ge=1, description="Número máximo de resultados a mostrar"), -): - query = select(sensor_mq_data) - - if _sort: - if _order == "desc": - query = query.order_by(getattr(sensor_mq_data.c, _sort).desc()) - else: - query = query.order_by(getattr(sensor_mq_data.c, _sort)) - - if _limit: - query = query.limit(_limit) - - async with database.transaction(): - result = await database.fetch_all(query) - return result - -@router.get("/sensor") -async def get_by_params( - id: Optional[int] = Query(None, alias="id", description="ID del sensor a buscar"), - sensor_type: Optional[str] = Query(None, alias="sensor_type", description="Tipo de sensor"), - min_value: Optional[float] = Query(None, alias="min_value", description="Valor mínimo del sensor"), - max_value: Optional[float] = Query(None, alias="max_value", description="Valor máximo del sensor"), - min_temp: Optional[float] = Query(None, alias="min_temp", description="Temperatura mínima"), - max_temp: Optional[float] = Query(None, alias="max_temp", description="Temperatura máxima"), - min_humidity: Optional[float] = Query(None, alias="min_humidity", description="Humedad mínima"), - max_humidity: Optional[float] = Query(None, alias="max_humidity", description="Humedad máxima"), -): - query = select(sensor_mq_data) - - if id is not None: - query = query.where(sensor_mq_data.c.id == id) - if sensor_type is not None: - query = query.where(sensor_mq_data.c.sensor_type == sensor_type) - if min_value is not None: - query = query.where(sensor_mq_data.c.value >= min_value) - if max_value is not None: - query = query.where(sensor_mq_data.c.value <= max_value) - if min_temp is not None: - query = query.where(sensor_mq_data.c.temperature >= min_temp) - if max_temp is not None: - query = query.where(sensor_mq_data.c.temperature <= max_temp) - if min_humidity is not None: - query = query.where(sensor_mq_data.c.humidity >= min_humidity) - if max_humidity is not None: - query = query.where(sensor_mq_data.c.humidity <= max_humidity) - - async with database.transaction(): - result = await database.fetch_all(query) - return result \ No newline at end of file diff --git a/backend/fastapi/main.py b/backend/fastapi/main.py deleted file mode 100644 index 6ef4fb4..0000000 --- a/backend/fastapi/main.py +++ /dev/null @@ -1,36 +0,0 @@ -from fastapi import FastAPI -from contextlib import asynccontextmanager -from fastapi.middleware.cors import CORSMiddleware - -from fastapi.responses import JSONResponse -from config import API_PREFIX -from fastapi.openapi.utils import get_openapi -from endpoints import sensors -from db import database - -@asynccontextmanager -async def lifespan(app: FastAPI): - await database.connect() # Conecta la base de datos al iniciar - yield - await database.disconnect() # Desconecta al finalizar - -app = FastAPI( - title="Mi API de Calidad del Aire", - description="API para obtener mediciones de calidad del aire en Sevilla", - version="1.0.0", - docs_url=f"{API_PREFIX}/swagger", # Cambia la URL de Swagger UI - lifespan=lifespan, - openapi_url="/dad/openapi.json" -) - -app.add_middleware(CORSMiddleware, allow_origins=["*"], allow_methods=["*"], allow_headers=["*"]) - -@app.get(f"{API_PREFIX}/") -async def root(): - return {"message": "Has llegado a la raíz de la API"} - -@app.get(f"{API_PREFIX}/openapi.json", include_in_schema=False) -async def get_openapi_json(): - return JSONResponse(content=get_openapi(title="Mi API de Calidad del Aire", version="1.0.0", routes=app.routes)) - -app.include_router(sensors.router, prefix=f"{API_PREFIX}/sensors", tags=["sensors"]) \ No newline at end of file diff --git a/backend/fastapi/models/schemas/SensorModel.py b/backend/fastapi/models/schemas/SensorModel.py deleted file mode 100644 index 81d7659..0000000 --- a/backend/fastapi/models/schemas/SensorModel.py +++ /dev/null @@ -1,12 +0,0 @@ - -from pydantic import BaseModel -from datetime import datetime -from typing import Optional - -class SensorModel(BaseModel): - id: Optional[int] # pq el modelo se usará también para INSERT - sensor_type: str - lat: float - lon: float - value: float - timestamp: Optional[datetime] = None \ No newline at end of file diff --git a/backend/fastapi/models/schemas/__pycache__/SensorModel.cpython-312.pyc b/backend/fastapi/models/schemas/__pycache__/SensorModel.cpython-312.pyc deleted file mode 100644 index 1a77f30..0000000 Binary files a/backend/fastapi/models/schemas/__pycache__/SensorModel.cpython-312.pyc and /dev/null differ diff --git a/backend/fastapi/models/sql/Sensor.py b/backend/fastapi/models/sql/Sensor.py deleted file mode 100644 index 15e3e14..0000000 --- a/backend/fastapi/models/sql/Sensor.py +++ /dev/null @@ -1,14 +0,0 @@ -from sqlalchemy import Column, Integer, String, Float, TIMESTAMP, Table, MetaData, func - -metadata = MetaData() - -sensor_mq_data = Table( - "sensor_mq_data", - metadata, - Column("id", Integer, primary_key=True, autoincrement=True), - Column("sensor_type", String(50), nullable=False), # Tipo de sensor (MQ-135, etc.) - Column("lat", Float, nullable=False), # Latitud - Column("lon", Float, nullable=False), # Longitud - Column("value", Float, nullable=False), # Valor leído del sensor - Column("timestamp", TIMESTAMP, server_default=func.current_timestamp()) # Fecha automática -) \ No newline at end of file diff --git a/backend/fastapi/models/sql/__pycache__/Sensor.cpython-312.pyc b/backend/fastapi/models/sql/__pycache__/Sensor.cpython-312.pyc deleted file mode 100644 index d19f96a..0000000 Binary files a/backend/fastapi/models/sql/__pycache__/Sensor.cpython-312.pyc and /dev/null differ diff --git a/backend/fastapi/requirements.txt b/backend/fastapi/requirements.txt deleted file mode 100644 index d318c19..0000000 --- a/backend/fastapi/requirements.txt +++ /dev/null @@ -1,8 +0,0 @@ -uvicorn -fastapi -contextlib2 -dotenv -pydantic -sqlalchemy -databases -aiomysql diff --git a/backend/fastapi/run.py b/backend/fastapi/run.py deleted file mode 100644 index 3245e0a..0000000 --- a/backend/fastapi/run.py +++ /dev/null @@ -1,14 +0,0 @@ -import subprocess - -def run_api(): - try: - subprocess.run( - ['uvicorn', 'main:app', '--reload', '--port', '9091'], - check=True, - cwd='./' - ) - except subprocess.CalledProcessError as e: - print(f"Error al iniciar API DAD: {e.stderr}") - -if __name__ == "__main__": - run_api()