Files
AutoShop-Djimbo-Simple/tgbot/database/db_item.py
T
2026-07-15 07:17:25 +05:00

73 lines
2.4 KiB
Python

# - *- coding: utf- 8 - *-
from typing import Any, Dict, List, Optional, Union
from sqlalchemy import BigInteger, Integer, Text
from sqlalchemy.orm import Mapped, mapped_column
from tgbot.database.core import Base, session_scope
from tgbot.database.entities import Item
from tgbot.database.repository import BaseRepository
from tgbot.utils.const_functions import clear_list, gen_id, get_unix
class ItemModel(Base):
__tablename__ = "storage_item"
increment: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True)
user_id: Mapped[int] = mapped_column(BigInteger, nullable=False, index=True)
category_id: Mapped[int] = mapped_column(BigInteger, nullable=False, index=True)
position_id: Mapped[int] = mapped_column(BigInteger, nullable=False, index=True)
item_id: Mapped[int] = mapped_column(BigInteger, nullable=False, index=True)
item_unix: Mapped[int] = mapped_column(Integer, nullable=False, default=get_unix)
item_data: Mapped[str] = mapped_column(Text, nullable=False)
ModelBase = Item
BaseModel = Item
class Itemx(BaseRepository[ItemModel, Item]):
# Подключение модели товаров
def __init__(self):
super().__init__()
self.table_model = ItemModel
self.entity_model = Item
self.storage_name = ItemModel.__tablename__
# Добавление товаров пачкой
async def add(
self,
user_id: int,
category_id: int,
position_id: int,
item_datas: List[str],
) -> Optional[List[Item]]:
item_unix = get_unix()
item_datas = clear_list(item_datas)
if len(item_datas) == 0:
return None
rows = [
ItemModel(
user_id=user_id,
category_id=category_id,
position_id=position_id,
item_id=gen_id(17),
item_unix=item_unix,
item_data=item_data.strip(),
)
for item_data in item_datas
]
async with session_scope() as session:
session.add_all(rows)
return [self._to_entity(row) for row in rows]
# Обновление товара по ID или фильтру
async def update(self, where: Optional[Union[Dict[str, Any], int]] = None, **kwargs) -> int:
if isinstance(where, int):
where = {"item_id": where}
return await self._update(where=where, **kwargs)