1
0
forked from Hay1tsme/artemis
artemis/titles/pokken/schema/item.py

51 lines
1.5 KiB
Python
Raw Normal View History

2023-04-10 07:35:14 +00:00
from typing import Optional, Dict, List
from sqlalchemy import Table, Column, UniqueConstraint, PrimaryKeyConstraint, and_, case
from sqlalchemy.types import Integer, String, TIMESTAMP, Boolean, JSON
from sqlalchemy.schema import ForeignKey
from sqlalchemy.sql import func, select, update, delete
from sqlalchemy.engine import Row
from sqlalchemy.dialects.mysql import insert
from core.data.schema import BaseData, metadata
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
"""
2023-06-14 07:00:52 +00:00
def add_reward(self, user_id: int, category: int, content: int, item_type: int) -> Optional[int]:
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,
)
result = self.execute(conflict)
2023-06-14 07:00:52 +00:00
if result is None:
self.logger.warn(f"Failed to insert reward for user {user_id}: {category}-{content}-{item_type}")
return None
return result.lastrowid