add user password hasher and depebdency
This commit is contained in:
@@ -1,4 +1,9 @@
|
||||
from .user_request import UserCreateRequest
|
||||
from .user_request import GetUserByEmailRequest, UserCreateRequest
|
||||
from .user_response import UserDetaledResponse, UserResponse
|
||||
|
||||
__all__ = ("UserResponse", "UserDetaledResponse", "UserCreateRequest")
|
||||
__all__ = (
|
||||
"UserResponse",
|
||||
"UserDetaledResponse",
|
||||
"UserCreateRequest",
|
||||
"GetUserByEmailRequest",
|
||||
)
|
||||
|
@@ -6,3 +6,8 @@ class UserCreateRequest:
|
||||
name: str
|
||||
email: str
|
||||
password: str
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class GetUserByEmailRequest:
|
||||
email: str
|
||||
|
0
api/application/protocols/__init__.py
Normal file
0
api/application/protocols/__init__.py
Normal file
11
api/application/protocols/password_hasher.py
Normal file
11
api/application/protocols/password_hasher.py
Normal file
@@ -0,0 +1,11 @@
|
||||
from typing import Protocol
|
||||
|
||||
|
||||
class PasswordHasher(Protocol):
|
||||
@staticmethod
|
||||
def hash_password(password: str) -> str:
|
||||
raise NotImplementedError
|
||||
|
||||
@staticmethod
|
||||
def verify_password(password: str, hashed_password: str) -> bool:
|
||||
raise NotImplementedError
|
@@ -1,15 +1,26 @@
|
||||
from api.application.abstractions import UnitOfWork
|
||||
from api.application.contracts.user.user_request import UserCreateRequest
|
||||
from api.application.protocols.password_hasher import PasswordHasher
|
||||
from api.domain.user.model import User
|
||||
from api.domain.user.repository import UserRepository
|
||||
|
||||
|
||||
class CreateUser:
|
||||
def __init__(self, uow: UnitOfWork, user_repository: UserRepository) -> None:
|
||||
def __init__(
|
||||
self,
|
||||
uow: UnitOfWork,
|
||||
user_repository: UserRepository,
|
||||
password_hasher: PasswordHasher,
|
||||
) -> None:
|
||||
self.uow = uow
|
||||
self.user_repository = user_repository
|
||||
self.hasher = password_hasher
|
||||
|
||||
async def execute(self, request: UserCreateRequest) -> None:
|
||||
user = User.create(name=request.name, email=request.email, password=request.password)
|
||||
user = User.create(
|
||||
name=request.name,
|
||||
email=request.email,
|
||||
hashed_password=self.hasher.hash_password(request.password),
|
||||
)
|
||||
await self.user_repository.create_user(user=user)
|
||||
await self.uow.commit()
|
15
api/application/usecase/user/get_user_by_email.py
Normal file
15
api/application/usecase/user/get_user_by_email.py
Normal file
@@ -0,0 +1,15 @@
|
||||
from api.application.abstractions import UnitOfWork
|
||||
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
|
||||
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:
|
||||
return None
|
||||
return None
|
Reference in New Issue
Block a user