add getting company
This commit is contained in:
3
api/app_entrypoint/__init__.py
Normal file
3
api/app_entrypoint/__init__.py
Normal file
@@ -0,0 +1,3 @@
|
||||
from .main import app_factory
|
||||
|
||||
__all__ = ("app_factory",)
|
64
api/app_entrypoint/dependencies.py
Normal file
64
api/app_entrypoint/dependencies.py
Normal file
@@ -0,0 +1,64 @@
|
||||
from fastapi import FastAPI
|
||||
from sqlalchemy.ext.asyncio import AsyncEngine, AsyncSession, async_sessionmaker
|
||||
|
||||
from api.application.abstractions.uow import UnitOfWork
|
||||
from api.application.protocols.date_time import DateTimeProvider
|
||||
from api.application.protocols.jwt import JwtTokenProcessor
|
||||
from api.application.protocols.password_hasher import PasswordHasher
|
||||
from api.application.usecase.auth.auth_user import LoginUser
|
||||
from api.application.usecase.auth.create_user import CreateUser
|
||||
from api.application.usecase.company.get_users_company import GetCompaniesByOwnerEmail
|
||||
from api.domain.company.repository import CompanyRepository
|
||||
from api.domain.user.repository import UserRepository
|
||||
from api.infrastructure.auth.jwt_settings import JwtSettings
|
||||
from api.infrastructure.dependencies.adapters import (
|
||||
create_engine,
|
||||
create_session_maker,
|
||||
new_session,
|
||||
new_unit_of_work,
|
||||
)
|
||||
from api.infrastructure.dependencies.configs import (
|
||||
app_settings,
|
||||
get_db_settings,
|
||||
get_jwt_settings,
|
||||
)
|
||||
from api.infrastructure.dependencies.protocols import (
|
||||
get_date_time_provider,
|
||||
get_jwt_token_processor,
|
||||
get_password_hasher,
|
||||
get_user_login,
|
||||
)
|
||||
from api.infrastructure.dependencies.repositories import (
|
||||
get_company_repository,
|
||||
get_user_repository,
|
||||
)
|
||||
from api.infrastructure.dependencies.usecases import (
|
||||
provide_create_user,
|
||||
provide_get_companies_by_email,
|
||||
)
|
||||
from api.infrastructure.persistence.db_setings import DBSettings
|
||||
from api.infrastructure.settings import Settings
|
||||
|
||||
|
||||
def init_dependencies(app: FastAPI) -> None:
|
||||
app.dependency_overrides[DBSettings] = get_db_settings
|
||||
app.dependency_overrides[JwtSettings] = get_jwt_settings
|
||||
app.dependency_overrides[Settings] = app_settings
|
||||
|
||||
app.dependency_overrides[AsyncEngine] = create_engine
|
||||
app.dependency_overrides[async_sessionmaker[AsyncSession]] = create_session_maker
|
||||
app.dependency_overrides[AsyncSession] = new_session
|
||||
|
||||
app.dependency_overrides[UnitOfWork] = new_unit_of_work
|
||||
|
||||
app.dependency_overrides[DateTimeProvider] = get_date_time_provider
|
||||
app.dependency_overrides[PasswordHasher] = get_password_hasher
|
||||
|
||||
app.dependency_overrides[JwtTokenProcessor] = get_jwt_token_processor
|
||||
app.dependency_overrides[LoginUser] = get_user_login
|
||||
|
||||
app.dependency_overrides[UserRepository] = get_user_repository
|
||||
app.dependency_overrides[CompanyRepository] = get_company_repository
|
||||
|
||||
app.dependency_overrides[CreateUser] = provide_create_user
|
||||
app.dependency_overrides[GetCompaniesByOwnerEmail] = provide_get_companies_by_email
|
41
api/app_entrypoint/error_handlers.py
Normal file
41
api/app_entrypoint/error_handlers.py
Normal file
@@ -0,0 +1,41 @@
|
||||
from fastapi import FastAPI, Request
|
||||
from fastapi.responses import JSONResponse
|
||||
|
||||
from api.domain.error import DomainValidationError
|
||||
from api.domain.user.error import (
|
||||
UserAlreadyExistsError,
|
||||
UserInvalidCredentialsError,
|
||||
UserIsNotAuthorizedError,
|
||||
)
|
||||
|
||||
|
||||
async def validation_error_exc_handler(request: Request, exc: DomainValidationError) -> JSONResponse:
|
||||
return JSONResponse(status_code=400, content={"detail": exc.message})
|
||||
|
||||
|
||||
async def user_authentication_error_exc_handler(request: Request, exc: UserIsNotAuthorizedError) -> JSONResponse:
|
||||
return JSONResponse(
|
||||
status_code=401,
|
||||
content={"detail": exc.message},
|
||||
headers={"WWW-Authenticate": "Bearer"},
|
||||
)
|
||||
|
||||
|
||||
async def user_already_exist_error_exc_handler(request: Request, exc: UserAlreadyExistsError) -> JSONResponse:
|
||||
return JSONResponse(status_code=409, content={"detail": exc.message})
|
||||
|
||||
|
||||
async def user_invalid_credentials_error_exc_handler(
|
||||
request: Request, exc: UserInvalidCredentialsError
|
||||
) -> JSONResponse:
|
||||
return JSONResponse(status_code=401, content={"detail": exc.message})
|
||||
|
||||
|
||||
def init_exc_handlers(app: FastAPI) -> None:
|
||||
app.add_exception_handler(
|
||||
DomainValidationError,
|
||||
validation_error_exc_handler,
|
||||
)
|
||||
app.add_exception_handler(UserIsNotAuthorizedError, user_authentication_error_exc_handler)
|
||||
app.add_exception_handler(UserAlreadyExistsError, user_already_exist_error_exc_handler)
|
||||
app.add_exception_handler(UserInvalidCredentialsError, user_invalid_credentials_error_exc_handler)
|
50
api/app_entrypoint/main.py
Normal file
50
api/app_entrypoint/main.py
Normal file
@@ -0,0 +1,50 @@
|
||||
from collections.abc import AsyncGenerator
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
from fastapi import FastAPI
|
||||
from sqlalchemy.ext.asyncio import AsyncEngine
|
||||
|
||||
from api.app_entrypoint.dependencies import init_dependencies
|
||||
from api.app_entrypoint.error_handlers import init_exc_handlers
|
||||
from api.infrastructure.auth.jwt_settings import JwtSettings
|
||||
from api.infrastructure.dependencies.adapters import create_engine
|
||||
from api.infrastructure.dependencies.configs import (
|
||||
app_settings,
|
||||
get_db_settings,
|
||||
get_jwt_settings,
|
||||
)
|
||||
from api.infrastructure.persistence.db_setings import DBSettings
|
||||
from api.infrastructure.persistence.models import Base
|
||||
from api.infrastructure.settings import Settings
|
||||
|
||||
from .routers import init_routers
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI) -> AsyncGenerator:
|
||||
app.dependency_overrides[DBSettings] = get_db_settings
|
||||
app.dependency_overrides[JwtSettings] = get_jwt_settings
|
||||
app.dependency_overrides[Settings] = app_settings
|
||||
app.dependency_overrides[AsyncEngine] = create_engine
|
||||
engine = app.dependency_overrides[AsyncEngine](
|
||||
app.dependency_overrides[Settings](
|
||||
app.dependency_overrides[DBSettings](),
|
||||
app.dependency_overrides[JwtSettings](),
|
||||
),
|
||||
)
|
||||
|
||||
async with engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.drop_all)
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
yield
|
||||
|
||||
|
||||
def app_factory() -> FastAPI:
|
||||
app = FastAPI(
|
||||
lifespan=lifespan,
|
||||
)
|
||||
init_dependencies(app)
|
||||
init_routers(app)
|
||||
init_exc_handlers(app)
|
||||
|
||||
return app
|
15
api/app_entrypoint/routers.py
Normal file
15
api/app_entrypoint/routers.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from fastapi import FastAPI
|
||||
|
||||
from api.presentation.routers import (
|
||||
auth_router,
|
||||
company_router,
|
||||
healthcheck_router,
|
||||
user_router,
|
||||
)
|
||||
|
||||
|
||||
def init_routers(app: FastAPI) -> None:
|
||||
app.include_router(user_router)
|
||||
app.include_router(auth_router)
|
||||
app.include_router(company_router)
|
||||
app.include_router(healthcheck_router)
|
Reference in New Issue
Block a user