def create_app()

in src/Backend/src/api/factory.py [0:0]


def create_app(container: injector.Injector) -> fastapi.FastAPI:
    """
    Creates fastapi app.
    """
    setts = container.get(typings.Settings)
    app = fastapi.FastAPI(title="LIA", version="0.5.2")
    sentry.setup(settings=setts)
    logging_config.configure(
        processors=None,
        level=setts.get("log_level"),
        fmt=setts.get("log_format"),
    )

    app.add_middleware(fastapi_injector.InjectorMiddleware, injector=container)
    app.add_middleware(
        CORSMiddleware,
        allow_origins=setts.get("origin", "").split(","),
        allow_credentials=True,
        allow_methods=["*"],
        allow_headers=["*"],
    )
    app.add_middleware(
        LoggingMiddleware,
        log_context=container.get(logging_config.LogContext),
        tracing_context=container.get(tracing.TracingContext),
        project_id=setts.get("project_id", "unknown"),
    )

    app.include_router(routers.groups_router, prefix="/api/v1/groups")
    app.include_router(routers.organizations_router, prefix="/api/v1/organizations")
    app.include_router(routers.processor_router, prefix="/api/v1/processor")
    app.include_router(routers.base_router, prefix="/api/v1")
    app.include_router(routers.auth_router, prefix="/api/v1/auth")
    app.include_router(routers.users_router, prefix="/api/v1/users")
    app.include_router(routers.roles_router, prefix="/api/v1/roles")
    app.include_router(routers.exams_router, prefix="/api/v1/exams")

    app.add_exception_handler(
        errors.BaseError,
        handler=error_handler,  # type: ignore[arg-type]
    )
    app.add_exception_handler(exceptions.FirebaseError, handler=firebase_handler)
    app.add_exception_handler(Exception, handler=default_error_handler)

    fastapi_pagination.add_pagination(app)

    fastapi_injector.attach_injector(app, container)

    return app