artemis/titles/pokken/schema/item.py

53 lines
1.4 KiB
Python
Raw Normal View History

2024-03-22 16:22:07 +00:00
from typing import Optional
2023-04-10 07:35:14 +00:00
from core.data.schema import BaseData, metadata
2024-03-22 16:22:07 +00:00
from sqlalchemy import Column, Table, UniqueConstraint
from sqlalchemy.dialects.mysql import insert
from sqlalchemy.schema import ForeignKey
from sqlalchemy.types import Integer
2023-04-10 07:35:14 +00:00
item = Table(
"pokken_item",
2023-04-10 07:35:14 +00:00
metadata,
Column("id", Integer, primary_key=True, nullable=False),
Column(
"user",
ForeignKey("aime_user.id", ondelete="cascade", onupdate="cascade"),
nullable=False,
unique=True,
),
Column("category", Integer),
Column("content", Integer),
Column("type", Integer),
UniqueConstraint("user", "category", "content", "type", name="pokken_item_uk"),
2023-04-10 07:35:14 +00:00
mysql_charset="utf8mb4",
)
2023-04-10 07:35:14 +00:00
class PokkenItemData(BaseData):
"""
Items obtained as rewards
"""
2024-03-22 16:22:07 +00:00
async def add_reward(
self, user_id: int, category: int, content: int, item_type: int
) -> Optional[int]:
2023-06-14 07:00:52 +00:00
sql = insert(item).values(
user=user_id,
category=category,
content=content,
type=item_type,
)
2023-07-23 16:47:37 +00:00
conflict = sql.on_duplicate_key_update(
content=content,
)
2024-03-22 16:22:07 +00:00
result = await self.execute(conflict)
2023-06-14 07:00:52 +00:00
if result is None:
2024-03-22 16:22:07 +00:00
self.logger.warning(
f"Failed to insert reward for user {user_id}: {category}-{content}-{item_type}"
)
2023-06-14 07:00:52 +00:00
return None
return result.lastrowid