Files
income_calculator/backend/main.py
2026-02-23 16:49:24 +03:00

51 lines
1.6 KiB
Python

from pathlib import Path
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from fastapi.staticfiles import StaticFiles
from backend.api import accounts, balance, banks, charts, import_api, settings_api
from backend.db.database import init_db
init_db()
app = FastAPI(title="Income Calculator", version="0.1.0")
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
app.include_router(banks.router)
app.include_router(accounts.router)
app.include_router(import_api.router)
app.include_router(balance.router)
app.include_router(charts.router)
app.include_router(settings_api.router)
# Статика Vue (собранная в frontend/dist)
static_path = Path(__file__).resolve().parent.parent / "frontend" / "dist"
if static_path.exists():
app.mount("/assets", StaticFiles(directory=static_path / "assets"), name="assets")
@app.get("/")
def index():
from fastapi.responses import FileResponse
return FileResponse(static_path / "index.html")
@app.get("/{full_path:path}")
def serve_spa(full_path: str):
from fastapi.responses import FileResponse
if full_path.startswith("api/"):
return FileResponse(static_path / "index.html") # let API handle; this won't be hit
f = static_path / full_path
if f.is_file():
return FileResponse(f)
return FileResponse(static_path / "index.html")
else:
@app.get("/")
def root():
return {"message": "Backend running. Build frontend: cd frontend && npm run build"}