transfer_tdms_tcs/backend/backend_transfer_tdms_tcs/app/main.py
2026-02-11 20:49:50 +03:00

72 lines
No EOL
2.1 KiB
Python

from contextlib import asynccontextmanager # ДОБАВЬТЕ ЭТОТ ИМПОРТ!
from fastapi import FastAPI, Depends
from sqlalchemy.orm import Session
from sqlalchemy import text
from .database import engine, Base, get_db
from .models import *
from .routers import unloadings, products
from .admin import setup_admin
@asynccontextmanager
async def lifespan(app: FastAPI):
# Создание таблиц при старте
Base.metadata.create_all(bind=engine)
# Создание триггера
# Создание триггера
from sqlalchemy import text
with engine.begin() as conn:
conn.execute(text("""
CREATE TRIGGER IF NOT EXISTS insert_product_from_unloading
AFTER INSERT ON unloading
FOR EACH ROW
WHEN NOT EXISTS (SELECT 1 FROM product WHERE guid = NEW.guid)
BEGIN
INSERT INTO product (guid, name)
VALUES (NEW.guid, NEW.name);
-- Обновляем product_guid после создания продукта
UPDATE unloading
SET product_guid = NEW.guid
WHERE guid = NEW.guid;
END;
"""))
yield
# Очистка при завершении
pass
app = FastAPI(
title="Unloading System API",
description="Система управления выгрузками и продуктами",
version="1.0.0",
lifespan=lifespan
)
# Настройка админки
admin = setup_admin(app)
# Подключение роутеров
app.include_router(unloadings.router)
app.include_router(products.router)
@app.get("/")
async def root():
return {
"message": "Unloading System API",
"docs": "/docs",
"admin": "/admin"
}
@app.get("/test-db")
def test_db(db: Session = Depends(get_db)):
from sqlalchemy import text
result = db.execute(text("SELECT name FROM sqlite_master WHERE type='table'"))
tables = [row[0] for row in result]
return {"tables": tables}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)