remove fucking uow and replace it by TransactionContextManager

This commit is contained in:
2024-04-23 08:10:17 +00:00
parent 12d61e01e1
commit ad92682eda
11 changed files with 108 additions and 89 deletions

View File

@@ -1,9 +1,6 @@
from sqlalchemy.exc import IntegrityError
from api.application.abstractions import UnitOfWork
from api.application.abstractions.transaction import TransactionContextManager
from api.application.contracts.auth.auth_request import UserCreateRequest
from api.application.protocols.password_hasher import PasswordHasher
from api.domain.user.error import UserAlreadyExistsError
from api.domain.user.model import User
from api.domain.user.repository import UserRepository
@@ -11,11 +8,11 @@ from api.domain.user.repository import UserRepository
class CreateUser:
def __init__(
self,
uow: UnitOfWork,
transaction: TransactionContextManager,
user_repository: UserRepository,
password_hasher: PasswordHasher,
) -> None:
self.uow = uow
self.transaction = transaction
self.user_repository = user_repository
self.hasher = password_hasher
@@ -27,13 +24,6 @@ class CreateUser:
hashed_password=self.hasher.hash_password(request.password),
)
try:
async with self.transaction as tr:
await self.user_repository.create_user(user=user)
await self.uow.commit()
except IntegrityError as e:
msg = e.args[0].split("\n")[-1]
msg = msg.split(":")[1].strip()
if "email" in msg:
raise UserAlreadyExistsError(message=msg)
await tr.commit()

View File

@@ -1,12 +1,20 @@
from api.application.abstractions.transaction import TransactionContextManager
from api.application.contracts.company.company_request import CreateNewCompany
from api.application.contracts.company.company_response import CompanyBaseResponse
from api.application.contracts.company.company_response import \
CompanyBaseResponse
from api.domain.company.repository import CompanyRepository
class CreateCompany:
def __init__(self, company_repository: CompanyRepository) -> None:
def __init__(
self,
transaction: TransactionContextManager,
company_repository: CompanyRepository,
) -> None:
self.company_repository = company_repository
self.transaction = transaction
async def execute(self, request: CreateNewCompany) -> CompanyBaseResponse:
# companies = await self.company_repository.
return CompanyBaseResponse(name=request.name, email=request.email)
async with self.transaction as tr:
# companies = await self.company_repository.
return CompanyBaseResponse(name=request.name, email=request.email)

View File

@@ -1,12 +1,26 @@
from api.application.contracts.company.company_request import CompanyByOwnerEmail
from api.application.contracts.company.company_response import CompanyBaseResponse
from api.application.abstractions.transaction import TransactionContextManager
from api.application.contracts.company.company_request import \
CompanyByOwnerEmail
from api.application.contracts.company.company_response import \
CompanyBaseResponse
from api.domain.company.repository import CompanyRepository
class GetCompaniesByOwnerEmail:
def __init__(self, company_repository: CompanyRepository) -> None:
def __init__(
self,
transaction: TransactionContextManager,
company_repository: CompanyRepository,
) -> None:
self.company_repository = company_repository
self.transaction = transaction
async def execute(self, request: CompanyByOwnerEmail) -> list[CompanyBaseResponse]:
companies = await self.company_repository.get_companies_by_owner_email(filter={"email": request.email})
return [CompanyBaseResponse(name=comp.name.value, email=comp.email.value) for comp in companies]
async with self.transaction:
companies = await self.company_repository.get_companies_by_owner_email(
filter={"email": request.email}
)
return [
CompanyBaseResponse(name=comp.name.value, email=comp.email.value)
for comp in companies
]

View File

@@ -1,15 +1,18 @@
from api.application.abstractions import UnitOfWork
from api.application.abstractions.transaction import TransactionContextManager
from api.application.contracts.user import GetUserByEmailRequest, UserResponse
from api.domain.user.repository import UserRepository
class GetUserByEmail:
def __init__(self, uow: UnitOfWork, user_repository: UserRepository) -> None:
self.uow = uow
def __init__(
self, transaction: TransactionContextManager, user_repository: UserRepository
) -> None:
self.transaction = transaction
self.user_repository = user_repository
async def execute(self, request: GetUserByEmailRequest) -> UserResponse | None:
user = await self.user_repository.get_user(filter={"email": request.email})
if user:
async with self.transaction:
user = await self.user_repository.get_user(filter={"email": request.email})
if user:
return None
return None
return None