Done setup template

This commit is contained in:
2024-06-01 12:34:20 +00:00
parent 71d4afcc5e
commit 449a5f644f
104 changed files with 313 additions and 256 deletions

82
backend/app.py Normal file
View File

@ -0,0 +1,82 @@
from collections.abc import AsyncGenerator
from contextlib import asynccontextmanager
from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import JSONResponse
from fastapi.middleware.cors import CORSMiddleware
from fastapi.middleware.gzip import GZipMiddleware
from backend.core.config import get_app_settings
from backend.core.root_logger import get_logger
from backend.routes import router
from backend import __version__
import uvicorn
settings = get_app_settings()
logger = get_logger()
description = f"""
fuware is a web application for managing your hours items and tracking them.
"""
@asynccontextmanager
async def lifespan_fn(_: FastAPI) -> AsyncGenerator[None, None]:
logger.info("start: database initialization")
import backend.db.init_db as init_db
init_db.main()
logger.info("end: database initialization")
logger.info("-----SYSTEM STARTUP-----")
# logger.info("------APP SETTINGS------")
# logger.info(
# settings.model_dump_json(
# indent=4,
# exclude={
# "SECRET",
# "DB_URL", # replace by DB_URL_PUBLIC for logs
# "DB_PROVIDER",
# },
# )
# )
yield
logger.info("-----SYSTEM SHUTDOWN-----")
app = FastAPI(
title="Fuware",
description=description,
version=__version__,
docs_url=settings.DOCS_URL,
redoc_url=settings.REDOC_URL,
lifespan=lifespan_fn,
)
app.add_middleware(GZipMiddleware, minimum_size=1000)
if not settings.PRODUCTION:
allowed_origins = ["http://localhost:3000"]
app.add_middleware(
CORSMiddleware,
allow_origins=allowed_origins,
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
@app.exception_handler(HTTPException)
async def unicorn_exception_handler(request: Request, exc: HTTPException):
return JSONResponse(
status_code=exc.status_code,
content={"status": exc.status_code, "data": exc.detail},
)
def api_routers():
app.include_router(router)
api_routers()
def main():
uvicorn.run("app:app", host="0.0.0.0", port=settings.API_PORT, reload=True, workers=1, forwarded_allow_ips="*")
if __name__ == "__main__":
main()