Added logic to handle max message xp per hour #168
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
from abc import ABC, abstractmethod
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from cpl_query.extension import List
|
||||
@@ -10,22 +11,27 @@ class UserMessageCountPerHourRepositoryABC(ABC):
|
||||
|
||||
@abstractmethod
|
||||
def __init__(self): pass
|
||||
|
||||
|
||||
@abstractmethod
|
||||
def get_user_message_count_per_hours(self) -> List[UserMessageCountPerHour]: pass
|
||||
|
||||
@abstractmethod
|
||||
def find_user_message_count_per_hours_by_user_id(self, user_id: int) -> List[Optional[UserMessageCountPerHour]]: pass
|
||||
def find_user_message_count_per_hour_by_user_id(self, user_id: int) -> Optional[UserMessageCountPerHour]: pass
|
||||
|
||||
@abstractmethod
|
||||
def find_user_message_count_per_hours_by_user_id_and_active_hour(self, user_id: int) -> List[Optional[UserMessageCountPerHour]]: pass
|
||||
|
||||
def get_user_message_count_per_hour_by_user_id_and_date(self, user_id: int, date: datetime) -> \
|
||||
Optional[UserMessageCountPerHour]: pass
|
||||
|
||||
@abstractmethod
|
||||
def find_user_message_count_per_hour_by_user_id_and_date(self, user_id: int, date: datetime) -> \
|
||||
Optional[UserMessageCountPerHour]: pass
|
||||
|
||||
@abstractmethod
|
||||
def add_user_message_count_per_hour(self, umcph: UserMessageCountPerHour): pass
|
||||
|
||||
|
||||
@abstractmethod
|
||||
def update_user_message_count_per_hour(self, umcph: UserMessageCountPerHour): pass
|
||||
|
||||
|
||||
@abstractmethod
|
||||
def delete_user_message_count_per_hour(self, umcph: UserMessageCountPerHour): pass
|
||||
|
||||
|
@@ -19,9 +19,9 @@ class UserMessageCountPerHourMigration(MigrationABC):
|
||||
str(f"""
|
||||
CREATE TABLE IF NOT EXISTS `UserMessageCountPerHour` (
|
||||
`Id` BIGINT NOT NULL AUTO_INCREMENT,
|
||||
`Date` DATETIME(6) NOT NULL,
|
||||
`Date` VARCHAR(255) NOT NULL,
|
||||
`Hour` BIGINT,
|
||||
`Count` BIGINT,
|
||||
`XPCount` BIGINT,
|
||||
`UserId` BIGINT,
|
||||
`CreatedAt` DATETIME(6),
|
||||
`LastModifiedAt` DATETIME(6),
|
||||
|
@@ -29,6 +29,7 @@ class Level(TableABC):
|
||||
|
||||
@name.setter
|
||||
def name(self, value: str):
|
||||
self._modified_at = datetime.now().isoformat()
|
||||
self._name = value
|
||||
|
||||
@property
|
||||
@@ -37,6 +38,7 @@ class Level(TableABC):
|
||||
|
||||
@color.setter
|
||||
def color(self, value: str):
|
||||
self._modified_at = datetime.now().isoformat()
|
||||
self._color = value
|
||||
|
||||
@property
|
||||
@@ -45,6 +47,7 @@ class Level(TableABC):
|
||||
|
||||
@min_xp.setter
|
||||
def min_xp(self, value: int):
|
||||
self._modified_at = datetime.now().isoformat()
|
||||
self._min_xp = value
|
||||
|
||||
@property
|
||||
@@ -53,6 +56,7 @@ class Level(TableABC):
|
||||
|
||||
@permissions.setter
|
||||
def permissions(self, value: int):
|
||||
self._modified_at = datetime.now().isoformat()
|
||||
self._permissions = value
|
||||
|
||||
@property
|
||||
@@ -61,6 +65,7 @@ class Level(TableABC):
|
||||
|
||||
@server.setter
|
||||
def server(self, value: Server):
|
||||
self._modified_at = datetime.now().isoformat()
|
||||
self._server = value
|
||||
|
||||
@staticmethod
|
||||
|
@@ -9,9 +9,9 @@ class UserMessageCountPerHour(TableABC):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
date: datetime,
|
||||
date: str,
|
||||
hour: int,
|
||||
count: int,
|
||||
xp_count: int,
|
||||
user: User,
|
||||
created_at: datetime = None,
|
||||
modified_at: datetime = None,
|
||||
@@ -19,7 +19,7 @@ class UserMessageCountPerHour(TableABC):
|
||||
self._id = id
|
||||
self._date = date
|
||||
self._hour = hour
|
||||
self._count = count
|
||||
self._xp_count = xp_count
|
||||
self._user = user
|
||||
|
||||
TableABC.__init__(self)
|
||||
@@ -39,8 +39,13 @@ class UserMessageCountPerHour(TableABC):
|
||||
return self._hour
|
||||
|
||||
@property
|
||||
def count(self) -> int:
|
||||
return self._count
|
||||
def xp_count(self) -> int:
|
||||
return self._xp_count
|
||||
|
||||
@xp_count.setter
|
||||
def xp_count(self, value: int):
|
||||
self._modified_at = datetime.now().isoformat()
|
||||
self._xp_count = value
|
||||
|
||||
@property
|
||||
def user(self) -> User:
|
||||
@@ -67,27 +72,26 @@ class UserMessageCountPerHour(TableABC):
|
||||
""")
|
||||
|
||||
@staticmethod
|
||||
def get_select_by_user_id_and_current_hour_string(id: int) -> str:
|
||||
now = datetime.now()
|
||||
date = f'{now.year}-{now.month}-{now.day}%'
|
||||
def get_select_by_user_id_and_date_string(id: int, date: datetime) -> str:
|
||||
date_str = f'{str(date.year).zfill(4)}-{str(date.month).zfill(2)}-{str(date.day).zfill(2)}%'
|
||||
|
||||
return str(f"""
|
||||
SELECT * FROM `UserMessageCountPerHour`
|
||||
WHERE `UserId` = {id}
|
||||
AND `Date` LIKE '{date}'
|
||||
AND `Hour` = {now.hour};
|
||||
AND `Date` LIKE '{date_str}'
|
||||
AND `Hour` = {date.hour};
|
||||
""")
|
||||
|
||||
@property
|
||||
def insert_string(self) -> str:
|
||||
return str(f"""
|
||||
INSERT INTO `UserMessageCountPerHour` (
|
||||
`UserId`, `Date`, `JoinedOn`, `Count`, `CreatedAt`, `LastModifiedAt`
|
||||
`UserId`, `Date`, `Hour`, `XPCount`, `CreatedAt`, `LastModifiedAt`
|
||||
) VALUES (
|
||||
{self._user.user_id},
|
||||
'{self._date}',
|
||||
{self._hour},
|
||||
{self._count},
|
||||
{self._xp_count},
|
||||
'{self._created_at}',
|
||||
'{self._modified_at}'
|
||||
);
|
||||
@@ -97,7 +101,7 @@ class UserMessageCountPerHour(TableABC):
|
||||
def udpate_string(self) -> str:
|
||||
return str(f"""
|
||||
UPDATE `UserMessageCountPerHour`
|
||||
SET `Count` = '{self._count}',
|
||||
SET `XPCount` = '{self._xp_count}',
|
||||
`LastModifiedAt` = '{self._modified_at}'
|
||||
WHERE `Id` = {self._id};
|
||||
""")
|
||||
|
@@ -1,3 +1,4 @@
|
||||
from datetime import datetime
|
||||
from typing import Optional
|
||||
|
||||
from cpl_core.database.context import DatabaseContextABC
|
||||
@@ -16,14 +17,12 @@ class UserMessageCountPerHourRepositoryService(UserMessageCountPerHourRepository
|
||||
logger: DatabaseLogger,
|
||||
db_context: DatabaseContextABC,
|
||||
users: UserRepositoryABC,
|
||||
umcphs: UserMessageCountPerHourRepositoryABC,
|
||||
):
|
||||
UserMessageCountPerHourRepositoryABC.__init__(self)
|
||||
|
||||
self._logger = logger
|
||||
self._context = db_context
|
||||
self._users = users
|
||||
self._umcphs = umcphs
|
||||
|
||||
@staticmethod
|
||||
def _get_value_from_result(value: any) -> Optional[any]:
|
||||
@@ -53,7 +52,7 @@ class UserMessageCountPerHourRepositoryService(UserMessageCountPerHourRepository
|
||||
|
||||
return umcphs
|
||||
|
||||
def find_user_message_count_per_hours_by_user_id(self, user_id: int) -> List[Optional[UserMessageCountPerHour]]:
|
||||
def find_user_message_count_per_hour_by_user_id(self, user_id: int) -> List[Optional[UserMessageCountPerHour]]:
|
||||
umcphs = List(UserMessageCountPerHour)
|
||||
sql = UserMessageCountPerHour.get_select_by_user_id_string(user_id)
|
||||
self._logger.trace(__name__, f'Send SQL command: {sql}')
|
||||
@@ -67,21 +66,22 @@ class UserMessageCountPerHourRepositoryService(UserMessageCountPerHourRepository
|
||||
|
||||
return umcphs
|
||||
|
||||
def find_user_message_count_per_hours_by_user_id_and_active_hour(self, user_id: int) -> List[
|
||||
Optional[UserMessageCountPerHour]
|
||||
]:
|
||||
umcphs = List(UserMessageCountPerHour)
|
||||
sql = UserMessageCountPerHour.get_select_by_user_id_and_current_hour_string(user_id)
|
||||
def get_user_message_count_per_hour_by_user_id_and_date(self, user_id: int, date: datetime) -> \
|
||||
Optional[UserMessageCountPerHour]:
|
||||
sql = UserMessageCountPerHour.get_select_by_user_id_and_date_string(user_id, date)
|
||||
self._logger.trace(__name__, f'Send SQL command: {sql}')
|
||||
results = self._context.select(sql)
|
||||
if results is None or len(results) == 0:
|
||||
return umcphs
|
||||
result = self._context.select(sql)[0]
|
||||
return self._from_result(result)
|
||||
|
||||
for result in results:
|
||||
self._logger.trace(__name__, f'Get user message count per hour with id {result[0]}')
|
||||
umcphs.append(self._from_result(result))
|
||||
def find_user_message_count_per_hour_by_user_id_and_date(self, user_id: int, date: datetime) -> \
|
||||
Optional[UserMessageCountPerHour]:
|
||||
sql = UserMessageCountPerHour.get_select_by_user_id_and_date_string(user_id, date)
|
||||
self._logger.trace(__name__, f'Send SQL command: {sql}')
|
||||
result = self._context.select(sql)
|
||||
if result is None or len(result) == 0:
|
||||
return None
|
||||
|
||||
return umcphs
|
||||
return self._from_result(result[0])
|
||||
|
||||
def add_user_message_count_per_hour(self, umcph: UserMessageCountPerHour):
|
||||
self._logger.trace(__name__, f'Send SQL command: {umcph.insert_string}')
|
||||
|
Reference in New Issue
Block a user