Backend con base de datos relacional MySQL
This commit is contained in:
+6
-2
@@ -2,6 +2,10 @@ FROM python:3.10-slim
|
|||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
|
||||||
RUN pip install fastapi uvicorn
|
COPY requirements.txt .
|
||||||
|
|
||||||
CMD ["uvicorn", "api.routes:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
COPY . .
|
||||||
|
|
||||||
|
CMD ["uvicorn", "api.main:app", "--host", "0.0.0.0", "--port", "8000", "--reload"]
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
import os
|
||||||
|
from sqlalchemy import create_engine
|
||||||
|
|
||||||
|
DB_USER = "root"
|
||||||
|
DB_PASSWORD = "root"
|
||||||
|
DB_HOST = "db"
|
||||||
|
DB_PORT = "3306"
|
||||||
|
DB_NAME = "deckofcards"
|
||||||
|
|
||||||
|
DATABASE_URL = (
|
||||||
|
f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}"
|
||||||
|
)
|
||||||
|
|
||||||
|
engine = create_engine(
|
||||||
|
DATABASE_URL,
|
||||||
|
pool_pre_ping=True,
|
||||||
|
echo=False
|
||||||
|
)
|
||||||
@@ -0,0 +1,5 @@
|
|||||||
|
from .connection import engine
|
||||||
|
from .models import Base
|
||||||
|
|
||||||
|
def init_db():
|
||||||
|
Base.metadata.create_all(bind=engine)
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
from sqlalchemy.orm import declarative_base
|
||||||
|
from sqlalchemy import Column, Integer, String, Float
|
||||||
|
|
||||||
|
Base = declarative_base()
|
||||||
|
|
||||||
|
class DoCMFLevel(Base):
|
||||||
|
__tablename__ = "docmf_levels"
|
||||||
|
|
||||||
|
id = Column(Integer, primary_key=True, index=True)
|
||||||
|
term = Column(String(50), nullable=False)
|
||||||
|
core_a = Column(Float, nullable=False)
|
||||||
|
core_b = Column(Float, nullable=False)
|
||||||
|
support_c = Column(Float, nullable=False)
|
||||||
|
support_d = Column(Float, nullable=False)
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
from .connection import engine
|
||||||
|
|
||||||
|
SessionLocal = sessionmaker(
|
||||||
|
autocommit=False,
|
||||||
|
autoflush=False,
|
||||||
|
bind=engine
|
||||||
|
)
|
||||||
|
|
||||||
|
def get_db():
|
||||||
|
db = SessionLocal()
|
||||||
|
try:
|
||||||
|
yield db
|
||||||
|
finally:
|
||||||
|
db.close()
|
||||||
+18
-6
@@ -1,14 +1,25 @@
|
|||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
from fastapi.middleware.cors import CORSMiddleware
|
from fastapi.middleware.cors import CORSMiddleware
|
||||||
|
from contextlib import asynccontextmanager
|
||||||
|
|
||||||
from routers.value_function import router as value_router
|
from api.database.init_db import init_db
|
||||||
from routers.docmf_build import router as docmf_build_router
|
|
||||||
from routers.docmf_evaluate import router as docmf_eval_router
|
# Routers
|
||||||
from routers.docmf_simple_validation import router as simple_validation_router
|
from api.routers.test_db import router as test_db_router
|
||||||
from routers.docmf_validation import router as validation_router
|
from api.routers.value_function import router as value_router
|
||||||
|
from api.routers.docmf_build import router as docmf_build_router
|
||||||
|
from api.routers.docmf_evaluate import router as docmf_eval_router
|
||||||
|
from api.routers.docmf_simple_validation import router as simple_validation_router
|
||||||
|
from api.routers.docmf_validation import router as validation_router
|
||||||
|
|
||||||
|
|
||||||
app = FastAPI()
|
@asynccontextmanager
|
||||||
|
async def lifespan(app: FastAPI):
|
||||||
|
init_db()
|
||||||
|
yield
|
||||||
|
|
||||||
|
|
||||||
|
app = FastAPI(lifespan=lifespan)
|
||||||
|
|
||||||
app.add_middleware(
|
app.add_middleware(
|
||||||
CORSMiddleware,
|
CORSMiddleware,
|
||||||
@@ -18,6 +29,7 @@ app.add_middleware(
|
|||||||
allow_headers=["*"],
|
allow_headers=["*"],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
app.include_router(test_db_router, prefix="/api")
|
||||||
app.include_router(value_router, prefix="/api/criteria/doc")
|
app.include_router(value_router, prefix="/api/criteria/doc")
|
||||||
app.include_router(docmf_build_router, prefix="/api/criteria/doc-mf")
|
app.include_router(docmf_build_router, prefix="/api/criteria/doc-mf")
|
||||||
app.include_router(docmf_eval_router, prefix="/api/criteria/doc-mf")
|
app.include_router(docmf_eval_router, prefix="/api/criteria/doc-mf")
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter, HTTPException
|
||||||
from models.docmf_models import DoCMFMultiRequest
|
from api.models.docmf_models import DoCMFMultiRequest
|
||||||
from services.docmf_build_service import build_docmf_multi
|
from api.services.docmf_build_service import build_docmf_multi
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter, HTTPException
|
||||||
from models.evaluation_models import EvaluationRequest
|
from api.models.evaluation_models import EvaluationRequest
|
||||||
from services.docmf_evaluate_service import evaluate_docmf
|
from api.services.docmf_evaluate_service import evaluate_docmf
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter, HTTPException
|
||||||
from models.docmf_simple_validation_models import SimpleValidationRequest
|
from api.models.docmf_simple_validation_models import SimpleValidationRequest
|
||||||
from services.docmf_simple_validation_service import validate_simple_levels
|
from api.services.docmf_simple_validation_service import validate_simple_levels
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter, HTTPException
|
||||||
from models.docmf_validation_models import ValidationRequest
|
from api.models.docmf_validation_models import ValidationRequest
|
||||||
from services.docmf_validation_service import validate_levels
|
from api.services.docmf_validation_service import validate_levels
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
from fastapi import APIRouter, Depends
|
||||||
|
from sqlalchemy import text
|
||||||
|
from api.database.session import get_db
|
||||||
|
|
||||||
|
router = APIRouter()
|
||||||
|
|
||||||
|
@router.get("/test-db")
|
||||||
|
def test_db_connection(db=Depends(get_db)):
|
||||||
|
try:
|
||||||
|
db.execute(text("SELECT 1"))
|
||||||
|
return {"status": "ok", "message": "Conexión a MySQL correcta"}
|
||||||
|
except Exception as e:
|
||||||
|
return {"status": "error", "message": str(e)}
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
from fastapi import APIRouter, HTTPException
|
from fastapi import APIRouter, HTTPException
|
||||||
from models.value_function_models import ValueFunctionRequest
|
from api.models.value_function_models import ValueFunctionRequest
|
||||||
from services.value_function_service import compute_value_function, compute_points
|
from api.services.value_function_service import compute_value_function, compute_points
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
from utils.interpolation import linear_interpolation
|
from api.utils.interpolation import linear_interpolation
|
||||||
|
|
||||||
def evaluate_docmf(request):
|
def evaluate_docmf(request):
|
||||||
x = request.x
|
x = request.x
|
||||||
|
|||||||
@@ -0,0 +1,6 @@
|
|||||||
|
fastapi
|
||||||
|
uvicorn
|
||||||
|
sqlalchemy
|
||||||
|
pymysql
|
||||||
|
pydantic
|
||||||
|
cryptography
|
||||||
Reference in New Issue
Block a user