72 lines
No EOL
2.1 KiB
Python
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) |