from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.security import OAuth2PasswordBearer from fastapi.middleware.cors import CORSMiddleware from fastapi_pagination import add_pagination from db import create_db_and_tables from user import user_router, auth_router, create_admin_user from account.account_routes import router as account_router from account.category_routes import router as category_router from ledger.routes import router as ledger_router from payee.routes import router as payee_router from transaction.routes import router as transaction_router @asynccontextmanager async def lifespan(app: FastAPI): create_db_and_tables() create_admin_user() yield #do something before end app = FastAPI(lifespan=lifespan) add_pagination(app) origins = [ "http://localhost:8000", "http://localhost:5173", ] app.add_middleware( CORSMiddleware, allow_origins=origins, allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) app.include_router(auth_router, prefix="/auth", tags=["auth"], ) app.include_router(user_router, prefix="/users", tags=["users"]) app.include_router(account_router, prefix="/accounts", tags=["accounts"]) app.include_router(category_router, prefix="/categories", tags=["categories"]) app.include_router(ledger_router, prefix="/ledgers", tags=["ledgers"]) app.include_router(payee_router, prefix="/payees", tags=["payees"]) app.include_router(transaction_router, prefix="/transactions", tags=["transactions"]) oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token") if __name__ == '__main__': import uvicorn uvicorn.run("main:app", host='0.0.0.0', port=8000, reload=True)