Added description to achievements #268_achievements

This commit is contained in:
2023-07-16 13:30:57 +02:00
parent f7297ddf78
commit 23d6216029
17 changed files with 123 additions and 20 deletions

View File

@@ -27,6 +27,10 @@ class AchievementRepositoryABC(ABC):
def get_achievements_by_user_id(self, user_id: int) -> List[Achievement]:
pass
@abstractmethod
def get_user_got_achievements_by_achievement_id(self, achievement_id: int) -> List[Achievement]:
pass
@abstractmethod
def add_achievement(self, achievement: Achievement):
pass

View File

@@ -21,6 +21,7 @@ class AchievementsMigration(MigrationABC):
CREATE TABLE IF NOT EXISTS `Achievements` (
`Id` BIGINT NOT NULL AUTO_INCREMENT,
`Name` VARCHAR(255) NOT NULL,
`Description` VARCHAR(255) NOT NULL,
`Attribute` VARCHAR(255) NOT NULL,
`Operator` VARCHAR(255) NOT NULL,
`Value` VARCHAR(255) NOT NULL,
@@ -41,6 +42,7 @@ class AchievementsMigration(MigrationABC):
(
`Id` BIGINT(20) NOT NULL,
`Name` VARCHAR(255) NOT NULL,
`Description` VARCHAR(255) NOT NULL,
`Attribute` VARCHAR(255) NOT NULL,
`Operator` VARCHAR(255) NOT NULL,
`Value` VARCHAR(255) NOT NULL,
@@ -77,41 +79,45 @@ class AchievementsMigration(MigrationABC):
self._cursor.execute(str(f"""ALTER TABLE UsersHistory ADD MessageCount BIGINT NOT NULL DEFAULT 0 AFTER XP;"""))
self._cursor.execute(str(f"""ALTER TABLE UsersHistory ADD ReactionCount BIGINT NOT NULL DEFAULT 0 AFTER XP;"""))
self._cursor.execute(str(f"""DROP TRIGGER IF EXISTS `TR_AchievementsUpdate`;"""))
self._cursor.execute(
str(
f"""
DROP TRIGGER IF EXISTS `TR_AchievementsUpdate`;
CREATE TRIGGER `TR_AchievementsUpdate`
AFTER UPDATE
ON `Achievements`
FOR EACH ROW
BEGIN
INSERT INTO `AchievementsHistory` (
`Id`, `Name`, `Attribute`, `Operator`, `Value`, `ServerId`, `DateFrom`, `DateTo`
`Id`, `Name`, `Description`, `Attribute`, `Operator`, `Value`, `ServerId`, `DateFrom`, `DateTo`
)
VALUES (
OLD.Id, OLD.Name, OLD.Attribute, OLD.Operator, OLD.Value, OLD.ServerId, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)
OLD.Id, OLD.Name, OLD.Description, OLD.Attribute, OLD.Operator, OLD.Value, OLD.ServerId, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)
);
END;
DROP TRIGGER IF EXISTS `TR_AchievementsDelete`;
"""
)
)
self._cursor.execute(str(f"""DROP TRIGGER IF EXISTS `TR_AchievementsDelete`;"""))
self._cursor.execute(
str(
f"""
CREATE TRIGGER `TR_AchievementsDelete`
AFTER DELETE
ON `Achievements`
FOR EACH ROW
BEGIN
INSERT INTO `AchievementsHistory` (
`Id`, `Name`, `Attribute`, `Operator`, `Value`, `ServerId`, `Deleted`, `DateFrom`, `DateTo`
`Id`, `Name`, `Description`, `Attribute`, `Operator`, `Value`, `ServerId`, `Deleted`, `DateFrom`, `DateTo`
)
VALUES (
OLD.Id, OLD.Name, OLD.Attribute, OLD.Operator, OLD.Value, OLD.ServerId, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)
OLD.Id, OLD.Name, OLD.Description, OLD.Attribute, OLD.Operator, OLD.Value, OLD.ServerId, TRUE, OLD.LastModifiedAt, CURRENT_TIMESTAMP(6)
);
END;
"""
),
multi=True,
)
)
def downgrade(self):

View File

@@ -11,6 +11,7 @@ class Achievement(TableABC):
def __init__(
self,
name: str,
description: str,
attribute: str,
operator: str,
value: str,
@@ -21,6 +22,7 @@ class Achievement(TableABC):
):
self._id = id
self._name = name
self._description = description
self._attribute = attribute
if self._is_operator_valid(operator):
@@ -53,6 +55,14 @@ class Achievement(TableABC):
def name(self, value: str):
self._name = value
@property
def description(self) -> str:
return self._description
@description.setter
def description(self, value: str):
self._description = value
@property
def attribute(self) -> str:
return self._attribute
@@ -103,9 +113,10 @@ class Achievement(TableABC):
return str(
f"""
INSERT INTO `Achievements` (
`Name`, `Attribute`, `Operator`, `Value`, `ServerId`
`Name`, `Description`, `Attribute`, `Operator`, `Value`, `ServerId`
) VALUES (
'{self._name}',
'{self._description}',
'{self._attribute}',
'{self._operator}',
'{self._value}',
@@ -120,6 +131,7 @@ class Achievement(TableABC):
f"""
UPDATE `Achievements`
SET `Name` = '{self._name}',
`Description` = '{self._description}',
`Attribute` = '{self._attribute}',
`Operator` = '{self._operator}',
`Value` = '{self._value}'

View File

@@ -5,6 +5,7 @@ class AchievementHistory(HistoryTableABC):
def __init__(
self,
name: str,
description: str,
attribute: str,
operator: str,
value: str,
@@ -18,6 +19,7 @@ class AchievementHistory(HistoryTableABC):
self._id = id
self._name = name
self._description = description
self._attribute = attribute
self._operator = operator
self._value = value
@@ -35,6 +37,10 @@ class AchievementHistory(HistoryTableABC):
def name(self) -> str:
return self._name
@property
def description(self) -> str:
return self._description
@property
def attribute(self) -> str:
return self._attribute

View File

@@ -62,6 +62,15 @@ class UserGotAchievement(TableABC):
"""
)
@staticmethod
def get_select_by_achievement_id_string(id: int) -> str:
return str(
f"""
SELECT * FROM `UserGotAchievements`
WHERE `AchievementId` = {id};
"""
)
@property
def insert_string(self) -> str:
return str(

View File

@@ -31,9 +31,10 @@ class AchievementRepositoryService(AchievementRepositoryABC):
result[2],
result[3],
result[4],
self._servers.get_server_by_id(result[5]),
result[6],
result[5],
self._servers.get_server_by_id(result[6]),
result[7],
result[8],
id=result[0],
)
@@ -89,6 +90,18 @@ class AchievementRepositoryService(AchievementRepositoryABC):
return achievements
def get_user_got_achievements_by_achievement_id(self, achievement_id: int) -> List[Achievement]:
achievements_joins = List(UserGotAchievement)
self._logger.trace(
__name__, f"Send SQL command: {UserGotAchievement.get_select_by_achievement_id_string(achievement_id)}"
)
results = self._context.select(UserGotAchievement.get_select_by_achievement_id_string(achievement_id))
for result in results:
self._logger.trace(__name__, f"Got UserGotAchievement with id {result[0]}")
achievements_joins.append(self._join_from_result(result))
return achievements_joins
def add_achievement(self, achievement: Achievement):
self._logger.trace(__name__, f"Send SQL command: {achievement.insert_string}")
self._context.cursor.execute(achievement.insert_string)