Files
personal_development/ServerManagerWebApp/backend/app/main.py
T
2026-01-09 19:24:41 +00:00

64 lines
2.0 KiB
Python

import os
import json
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from sqlalchemy.orm import Session
from contextlib import asynccontextmanager
from . import models
from .database import SessionLocal, engine, get_db
from .routers import samba, comics, duplicates, downloader, qbittorrent, system, tasks, settings, stash, scheduler as scheduler_router
from .scheduler import start_scheduler, scheduler
models.Base.metadata.create_all(bind=engine)
def reset_stuck_scans():
progress_file = "logs/duplicates_scan.json"
if os.path.exists(progress_file):
try:
with open(progress_file, 'r') as f:
data = json.load(f)
if data.get("status") == "scanning":
with open(progress_file, 'w') as f:
json.dump({"status": "failed", "error": "Scan interrupted by server restart"}, f)
except Exception:
pass
@asynccontextmanager
async def lifespan(app: FastAPI):
reset_stuck_scans()
start_scheduler()
yield
scheduler.shutdown()
app = FastAPI(lifespan=lifespan)
origins = ["*"]
app.add_middleware(
CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(samba.router, prefix="/samba", tags=["samba"])
app.include_router(comics.router, prefix="/comics", tags=["comics"])
app.include_router(duplicates.router, prefix="/duplicates", tags=["duplicates"])
app.include_router(downloader.router, prefix="/downloader", tags=["downloader"])
app.include_router(qbittorrent.router, prefix="/qbittorrent", tags=["qbittorrent"])
app.include_router(system.router, prefix="/system", tags=["system"])
app.include_router(tasks.router, prefix="/tasks", tags=["tasks"])
app.include_router(settings.router, prefix="/settings", tags=["settings"])
app.include_router(stash.router, prefix="/stash", tags=["stash"])
app.include_router(scheduler_router.router, prefix="/scheduler", tags=["scheduler"])
@app.get("/")
def read_root():
return {"Hello": "World"}