Added auth user repository #70
This commit is contained in:
parent
411e44a681
commit
2457107c63
41
src/bot_data/abc/auth_user_repository_abc.py
Normal file
41
src/bot_data/abc/auth_user_repository_abc.py
Normal file
@ -0,0 +1,41 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from typing import Optional
|
||||
|
||||
from cpl_query.extension import List
|
||||
|
||||
from bot_api.filter.auth_user_select_criteria import AuthUserSelectCriteria
|
||||
from bot_data.filtered_result import FilteredResult
|
||||
from bot_data.model.auth_user import AuthUser
|
||||
|
||||
|
||||
class AuthUserRepositoryABC(ABC):
|
||||
|
||||
@abstractmethod
|
||||
def __init__(self): pass
|
||||
|
||||
@abstractmethod
|
||||
def get_all_auth_users(self) -> List[AuthUser]: pass
|
||||
|
||||
@abstractmethod
|
||||
def get_filtered_auth_users_async(self, criteria: AuthUserSelectCriteria) -> FilteredResult: pass
|
||||
|
||||
@abstractmethod
|
||||
def get_auth_user_by_email_async(self, email: str) -> AuthUser: pass
|
||||
|
||||
@abstractmethod
|
||||
def find_auth_user_by_email_async(self, email: str) -> Optional[AuthUser]: pass
|
||||
|
||||
@abstractmethod
|
||||
def find_auth_user_by_confirmation_id_async(self, id: str) -> Optional[AuthUser]: pass
|
||||
|
||||
@abstractmethod
|
||||
def find_auth_user_by_forgot_password_id_async(self, id: str) -> Optional[AuthUser]: pass
|
||||
|
||||
@abstractmethod
|
||||
def add_auth_user(self, user: AuthUser): pass
|
||||
|
||||
@abstractmethod
|
||||
def update_auth_user(self, user: AuthUser): pass
|
||||
|
||||
@abstractmethod
|
||||
def delete_auth_user(self, user: AuthUser): pass
|
@ -5,6 +5,7 @@ from cpl_discord.service.discord_collection_abc import DiscordCollectionABC
|
||||
|
||||
from bot_core.abc.module_abc import ModuleABC
|
||||
from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||
from bot_data.abc.auth_user_repository_abc import AuthUserRepositoryABC
|
||||
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
|
||||
from bot_data.abc.client_repository_abc import ClientRepositoryABC
|
||||
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
|
||||
@ -12,6 +13,7 @@ from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||
from bot_data.abc.user_joined_server_repository_abc import UserJoinedServerRepositoryABC
|
||||
from bot_data.abc.user_joined_voice_channel_abc import UserJoinedVoiceChannelRepositoryABC
|
||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
|
||||
from bot_data.service.auth_user_repository_service import AuthUserRepositoryService
|
||||
from bot_data.service.auto_role_repository_service import AutoRoleRepositoryService
|
||||
from bot_data.service.client_repository_service import ClientRepositoryService
|
||||
from bot_data.service.known_user_repository_service import KnownUserRepositoryService
|
||||
@ -30,6 +32,7 @@ class DataModule(ModuleABC):
|
||||
pass
|
||||
|
||||
def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
|
||||
services.add_transient(AuthUserRepositoryABC, AuthUserRepositoryService)
|
||||
services.add_transient(ServerRepositoryABC, ServerRepositoryService)
|
||||
services.add_transient(UserRepositoryABC, UserRepositoryService)
|
||||
services.add_transient(ClientRepositoryABC, ClientRepositoryService)
|
||||
|
24
src/bot_data/filtered_result.py
Normal file
24
src/bot_data/filtered_result.py
Normal file
@ -0,0 +1,24 @@
|
||||
from cpl_query.extension import List
|
||||
|
||||
|
||||
class FilteredResult:
|
||||
|
||||
def __init__(self, result: List = None, total_count: int = 0):
|
||||
self._result = [] if result is None else result
|
||||
self._total_count = total_count
|
||||
|
||||
@property
|
||||
def result(self) -> List:
|
||||
return self._result
|
||||
|
||||
@result.setter
|
||||
def result(self, value: List):
|
||||
self._result = value
|
||||
|
||||
@property
|
||||
def total_count(self) -> int:
|
||||
return self._total_count
|
||||
|
||||
@total_count.setter
|
||||
def total_count(self, value: int):
|
||||
self._total_count = value
|
@ -33,12 +33,44 @@ class AuthUser(TableABC):
|
||||
self._forgot_password_id = forgot_password_id
|
||||
self._refresh_token_expire_time = refresh_token_expire_time
|
||||
|
||||
self._auth_role_id = auth_role.value
|
||||
self._auth_role_id = auth_role
|
||||
|
||||
TableABC.__init__(self)
|
||||
self._created_at = created_at if created_at is not None else self._created_at
|
||||
self._modified_at = modified_at if modified_at is not None else self._modified_at
|
||||
|
||||
@property
|
||||
def id(self) -> int:
|
||||
return self._auth_user_id
|
||||
|
||||
@property
|
||||
def first_name(self) -> str:
|
||||
return self._first_name
|
||||
|
||||
@property
|
||||
def last_name(self) -> str:
|
||||
return self._last_name
|
||||
|
||||
@property
|
||||
def email(self) -> str:
|
||||
return self._email
|
||||
|
||||
@property
|
||||
def password(self) -> str:
|
||||
return self._password
|
||||
|
||||
@property
|
||||
def refresh_token(self) -> str:
|
||||
return self._refresh_token
|
||||
|
||||
@property
|
||||
def refresh_token_expire_time(self) -> datetime:
|
||||
return self._refresh_token_expire_time
|
||||
|
||||
@property
|
||||
def auth_role(self) -> AuthRoleEnum:
|
||||
return self._auth_role_id
|
||||
|
||||
@staticmethod
|
||||
def get_select_all_string() -> str:
|
||||
return str(f"""
|
||||
@ -52,6 +84,27 @@ class AuthUser(TableABC):
|
||||
WHERE `Id` = {id};
|
||||
""")
|
||||
|
||||
@staticmethod
|
||||
def get_select_by_email_string(email: str) -> str:
|
||||
return str(f"""
|
||||
SELECT * FROM `AuthUsers`
|
||||
WHERE `EMail` = {email};
|
||||
""")
|
||||
|
||||
@staticmethod
|
||||
def get_select_by_confirmation_id_string(id: str) -> str:
|
||||
return str(f"""
|
||||
SELECT * FROM `AuthUsers`
|
||||
WHERE `ConfirmationId` = {id};
|
||||
""")
|
||||
|
||||
@staticmethod
|
||||
def get_select_by_forgot_password_i_string(id: str) -> str:
|
||||
return str(f"""
|
||||
SELECT * FROM `AuthUsers`
|
||||
WHERE `ForgotPasswordId` = {id};
|
||||
""")
|
||||
|
||||
@property
|
||||
def insert_string(self) -> str:
|
||||
return str(f"""
|
||||
@ -78,7 +131,7 @@ class AuthUser(TableABC):
|
||||
{self._confirmation_id},
|
||||
{self._forgot_password_id},
|
||||
{self._refresh_token_expire_time},
|
||||
{self._auth_role_id}
|
||||
{self._auth_role_id.value}
|
||||
{self._created_at},
|
||||
{self._modified_at}
|
||||
)
|
||||
@ -96,7 +149,7 @@ class AuthUser(TableABC):
|
||||
`ConfirmationId` = '{self._confirmation_id}',
|
||||
`ForgotPasswordId` = '{self._forgot_password_id}',
|
||||
`RefreshTokenExpiryTime` = '{self._refresh_token_expire_time}',
|
||||
`AutoRole` = {self._auth_role_id},
|
||||
`AutoRole` = {self._auth_role_id.value},
|
||||
`LastModifiedAt` = '{self._modified_at}'
|
||||
WHERE `AuthUsers`.`Id` = {self._auth_user_id};
|
||||
""")
|
||||
|
125
src/bot_data/service/auth_user_repository_service.py
Normal file
125
src/bot_data/service/auth_user_repository_service.py
Normal file
@ -0,0 +1,125 @@
|
||||
from typing import Optional
|
||||
|
||||
from cpl_core.database.context import DatabaseContextABC
|
||||
from cpl_query.extension import List
|
||||
|
||||
from bot_api.filter.auth_user_select_criteria import AuthUserSelectCriteria
|
||||
from bot_core.logging.database_logger import DatabaseLogger
|
||||
from bot_data.abc.auth_user_repository_abc import AuthUserRepositoryABC
|
||||
from bot_data.filtered_result import FilteredResult
|
||||
from bot_data.model.auth_role_enum import AuthRoleEnum
|
||||
from bot_data.model.auth_user import AuthUser
|
||||
|
||||
|
||||
class AuthUserRepositoryService(AuthUserRepositoryABC):
|
||||
|
||||
def __init__(self, logger: DatabaseLogger, db_context: DatabaseContextABC):
|
||||
self._logger = logger
|
||||
self._context = db_context
|
||||
|
||||
AuthUserRepositoryABC.__init__(self)
|
||||
|
||||
@staticmethod
|
||||
def _user_from_result(result: tuple) -> AuthUser:
|
||||
return AuthUser(
|
||||
result[1],
|
||||
result[2],
|
||||
result[3],
|
||||
result[4],
|
||||
result[5],
|
||||
result[6],
|
||||
result[7],
|
||||
result[8],
|
||||
AuthRoleEnum(result[9]),
|
||||
id=result[0]
|
||||
)
|
||||
|
||||
def get_all_auth_users(self) -> List[AuthUser]:
|
||||
users = List(AuthUser)
|
||||
self._logger.trace(__name__, f'Send SQL command: {AuthUser.get_select_all_string()}')
|
||||
results = self._context.select(AuthUser.get_select_all_string())
|
||||
for result in results:
|
||||
self._logger.trace(__name__, f'Get auth user with id {result[0]}')
|
||||
users.append(self._user_from_result(result))
|
||||
|
||||
return users
|
||||
|
||||
def get_filtered_auth_users_async(self, criteria: AuthUserSelectCriteria) -> FilteredResult:
|
||||
users = self.get_all_auth_users()
|
||||
self._logger.trace(__name__, f'Send SQL command: {AuthUser.get_select_all_string()}')
|
||||
|
||||
query = users
|
||||
|
||||
if criteria.first_name is not None and criteria.first_name != '':
|
||||
query = query.where(lambda x: criteria.first_name in x.first_name or x.first_name == criteria.first_name)
|
||||
|
||||
if criteria.last_name is not None and criteria.last_name != '':
|
||||
query = query.where(lambda x: criteria.last_name in x.last_name or x.last_name == criteria.last_name)
|
||||
|
||||
if criteria.email is not None and criteria.email != '':
|
||||
query = query.where(lambda x: criteria.email in x.email or x.email == criteria.email)
|
||||
|
||||
if criteria.auth_role is not None:
|
||||
query = query.where(lambda x: x.auth_role == AuthRoleEnum(criteria.auth_role))
|
||||
|
||||
# sort
|
||||
if criteria.sort_column is not None and criteria.sort_column != '' and criteria.sort_direction is not None and criteria.sort_direction:
|
||||
crit_sort_direction = criteria.sort_direction.lower()
|
||||
if crit_sort_direction == "desc" or crit_sort_direction == "descending":
|
||||
query = query.order_by_descending(lambda x: getattr(x, criteria.sort_column))
|
||||
else:
|
||||
query = query.order_by(lambda x: getattr(x, criteria.sort_column))
|
||||
|
||||
skip = criteria.page_size * criteria.page_index
|
||||
result = FilteredResult()
|
||||
result.total_count = query.count()
|
||||
result.result = query.skip(skip).take(criteria.page_size)
|
||||
|
||||
return result
|
||||
|
||||
def get_auth_user_by_email_async(self, email: str) -> AuthUser:
|
||||
self._logger.trace(__name__, f'Send SQL command: {AuthUser.get_select_by_email_string(email)}')
|
||||
result = self._context.select(AuthUser.get_select_by_email_string(email))[0]
|
||||
return self._user_from_result(result)
|
||||
|
||||
def find_auth_user_by_email_async(self, email: str) -> Optional[AuthUser]:
|
||||
self._logger.trace(__name__, f'Send SQL command: {AuthUser.get_select_by_email_string(email)}')
|
||||
result = self._context.select(AuthUser.get_select_by_email_string(email))
|
||||
if result is None or len(result) == 0:
|
||||
return None
|
||||
|
||||
result = result[0]
|
||||
|
||||
return self._user_from_result(result)
|
||||
|
||||
def find_auth_user_by_confirmation_id_async(self, id: str) -> Optional[AuthUser]:
|
||||
self._logger.trace(__name__, f'Send SQL command: {AuthUser.get_select_by_email_string(id)}')
|
||||
result = self._context.select(AuthUser.get_select_by_email_string(id))
|
||||
if result is None or len(result) == 0:
|
||||
return None
|
||||
|
||||
result = result[0]
|
||||
|
||||
return self._user_from_result(result)
|
||||
|
||||
def find_auth_user_by_forgot_password_id_async(self, id: str) -> Optional[AuthUser]:
|
||||
self._logger.trace(__name__, f'Send SQL command: {AuthUser.get_select_by_email_string(id)}')
|
||||
result = self._context.select(AuthUser.get_select_by_email_string(id))
|
||||
if result is None or len(result) == 0:
|
||||
return None
|
||||
|
||||
result = result[0]
|
||||
|
||||
return self._user_from_result(result)
|
||||
|
||||
def add_auth_user(self, user: AuthUser):
|
||||
self._logger.trace(__name__, f'Send SQL command: {user.insert_string}')
|
||||
self._context.cursor.execute(user.insert_string)
|
||||
|
||||
def update_auth_user(self, user: AuthUser):
|
||||
self._logger.trace(__name__, f'Send SQL command: {user.udpate_string}')
|
||||
self._context.cursor.execute(user.udpate_string)
|
||||
|
||||
def delete_auth_user(self, user: AuthUser):
|
||||
self._logger.trace(__name__, f'Send SQL command: {user.delete_string}')
|
||||
self._context.cursor.execute(user.delete_string)
|
Loading…
Reference in New Issue
Block a user