old_01
This commit is contained in:
0
doners/bot-market/app/database/__init__.py
Normal file
0
doners/bot-market/app/database/__init__.py
Normal file
@@ -1,62 +1,62 @@
|
||||
from sqlalchemy import BigInteger, ForeignKey, String
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship, DeclarativeBase
|
||||
from sqlalchemy.ext.asyncio import AsyncAttrs, async_sessionmaker, create_async_engine
|
||||
|
||||
from typing import List
|
||||
from config import ENGINE, ECHO
|
||||
|
||||
engine = create_async_engine(url=ENGINE)#, echo=ECHO)
|
||||
|
||||
async_session = async_sessionmaker(engine)
|
||||
|
||||
|
||||
class Base(AsyncAttrs, DeclarativeBase):
|
||||
pass
|
||||
|
||||
|
||||
class User(Base):
|
||||
__tablename__ = 'users'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
tg_id = mapped_column(BigInteger)
|
||||
|
||||
basket_rel: Mapped[List['Basket']] = relationship(back_populates='user_rel')
|
||||
|
||||
|
||||
class Category(Base):
|
||||
__tablename__ = 'categories'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
name: Mapped[str] = mapped_column(String(50))
|
||||
|
||||
item_rel: Mapped[List['Item']] = relationship(back_populates='category_rel')
|
||||
|
||||
|
||||
class Item(Base):
|
||||
__tablename__ = 'items'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
name: Mapped[str] = mapped_column(String(50))
|
||||
description: Mapped[str] = mapped_column(String(200))
|
||||
photo: Mapped[str] = mapped_column(String(200))
|
||||
price: Mapped[int] = mapped_column()
|
||||
category: Mapped[int] = mapped_column(ForeignKey('categories.id'))
|
||||
|
||||
category_rel: Mapped['Category'] = relationship(back_populates='item_rel')
|
||||
basket_rel: Mapped[List['Basket']] = relationship(back_populates='item_rel')
|
||||
|
||||
|
||||
class Basket(Base):
|
||||
__tablename__ = 'basket'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
user: Mapped[int] = mapped_column(ForeignKey('users.id'))
|
||||
item: Mapped[int] = mapped_column(ForeignKey('items.id'))
|
||||
|
||||
user_rel: Mapped['User'] = relationship(back_populates='basket_rel')
|
||||
item_rel: Mapped['Item'] = relationship(back_populates='basket_rel')
|
||||
|
||||
|
||||
async def async_main():
|
||||
async with engine.begin() as conn:
|
||||
from sqlalchemy import BigInteger, ForeignKey, String
|
||||
from sqlalchemy.orm import Mapped, mapped_column, relationship, DeclarativeBase
|
||||
from sqlalchemy.ext.asyncio import AsyncAttrs, async_sessionmaker, create_async_engine
|
||||
|
||||
from typing import List
|
||||
from config import ENGINE, ECHO
|
||||
|
||||
engine = create_async_engine(url=ENGINE)#, echo=ECHO)
|
||||
|
||||
async_session = async_sessionmaker(engine)
|
||||
|
||||
|
||||
class Base(AsyncAttrs, DeclarativeBase):
|
||||
pass
|
||||
|
||||
|
||||
class User(Base):
|
||||
__tablename__ = 'users'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
tg_id = mapped_column(BigInteger)
|
||||
|
||||
basket_rel: Mapped[List['Basket']] = relationship(back_populates='user_rel')
|
||||
|
||||
|
||||
class Category(Base):
|
||||
__tablename__ = 'categories'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
name: Mapped[str] = mapped_column(String(50))
|
||||
|
||||
item_rel: Mapped[List['Item']] = relationship(back_populates='category_rel')
|
||||
|
||||
|
||||
class Item(Base):
|
||||
__tablename__ = 'items'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
name: Mapped[str] = mapped_column(String(50))
|
||||
description: Mapped[str] = mapped_column(String(200))
|
||||
photo: Mapped[str] = mapped_column(String(200))
|
||||
price: Mapped[int] = mapped_column()
|
||||
category: Mapped[int] = mapped_column(ForeignKey('categories.id'))
|
||||
|
||||
category_rel: Mapped['Category'] = relationship(back_populates='item_rel')
|
||||
basket_rel: Mapped[List['Basket']] = relationship(back_populates='item_rel')
|
||||
|
||||
|
||||
class Basket(Base):
|
||||
__tablename__ = 'basket'
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
user: Mapped[int] = mapped_column(ForeignKey('users.id'))
|
||||
item: Mapped[int] = mapped_column(ForeignKey('items.id'))
|
||||
|
||||
user_rel: Mapped['User'] = relationship(back_populates='basket_rel')
|
||||
item_rel: Mapped['Item'] = relationship(back_populates='basket_rel')
|
||||
|
||||
|
||||
async def async_main():
|
||||
async with engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
@@ -1,64 +1,64 @@
|
||||
from app.database.models import User, Category, Item, Basket
|
||||
from app.database.models import async_session
|
||||
|
||||
from sqlalchemy import select, update, delete
|
||||
|
||||
|
||||
async def set_user(tg_id):
|
||||
async with async_session() as session:
|
||||
user = await session.scalar(select(User).where(User.tg_id == tg_id))
|
||||
|
||||
if not user:
|
||||
session.add(User(tg_id=tg_id))
|
||||
await session.commit()
|
||||
|
||||
|
||||
async def set_item(data):
|
||||
async with async_session() as session:
|
||||
session.add(Item(**data))
|
||||
await session.commit()
|
||||
|
||||
|
||||
async def set_basket(tg_id, item_id):
|
||||
async with async_session() as session:
|
||||
user = await session.scalar(select(User).where(User.tg_id == tg_id))
|
||||
session.add(Basket(user=user.id, item=item_id))
|
||||
await session.commit()
|
||||
|
||||
|
||||
async def get_basket(tg_id):
|
||||
async with async_session() as session:
|
||||
user = await session.scalar(select(User).where(User.tg_id == tg_id))
|
||||
basket = await session.scalars(select(Basket).where(Basket.user == user.id))
|
||||
return basket
|
||||
|
||||
|
||||
async def get_users():
|
||||
async with async_session() as session:
|
||||
users = await session.scalars(select(User))
|
||||
return users
|
||||
|
||||
|
||||
async def get_categories():
|
||||
async with async_session() as session:
|
||||
categories = await session.scalars(select(Category))
|
||||
return categories
|
||||
|
||||
|
||||
async def get_items_by_category(category_id: int):
|
||||
async with async_session() as session:
|
||||
items = await session.scalars(select(Item).where(Item.category == category_id))
|
||||
return items
|
||||
|
||||
|
||||
async def get_item_by_id(item_id: int):
|
||||
async with async_session() as session:
|
||||
item = await session.scalar(select(Item).where(Item.id == item_id))
|
||||
return item
|
||||
|
||||
|
||||
async def delete_basket(tg_id, item_id):
|
||||
async with async_session() as session:
|
||||
user = await session.scalar(select(User).where(User.tg_id == tg_id))
|
||||
await session.execute(delete(Basket).where(Basket.user == user.id, Basket.item == item_id))
|
||||
from app.database.models import User, Category, Item, Basket
|
||||
from app.database.models import async_session
|
||||
|
||||
from sqlalchemy import select, update, delete
|
||||
|
||||
|
||||
async def set_user(tg_id):
|
||||
async with async_session() as session:
|
||||
user = await session.scalar(select(User).where(User.tg_id == tg_id))
|
||||
|
||||
if not user:
|
||||
session.add(User(tg_id=tg_id))
|
||||
await session.commit()
|
||||
|
||||
|
||||
async def set_item(data):
|
||||
async with async_session() as session:
|
||||
session.add(Item(**data))
|
||||
await session.commit()
|
||||
|
||||
|
||||
async def set_basket(tg_id, item_id):
|
||||
async with async_session() as session:
|
||||
user = await session.scalar(select(User).where(User.tg_id == tg_id))
|
||||
session.add(Basket(user=user.id, item=item_id))
|
||||
await session.commit()
|
||||
|
||||
|
||||
async def get_basket(tg_id):
|
||||
async with async_session() as session:
|
||||
user = await session.scalar(select(User).where(User.tg_id == tg_id))
|
||||
basket = await session.scalars(select(Basket).where(Basket.user == user.id))
|
||||
return basket
|
||||
|
||||
|
||||
async def get_users():
|
||||
async with async_session() as session:
|
||||
users = await session.scalars(select(User))
|
||||
return users
|
||||
|
||||
|
||||
async def get_categories():
|
||||
async with async_session() as session:
|
||||
categories = await session.scalars(select(Category))
|
||||
return categories
|
||||
|
||||
|
||||
async def get_items_by_category(category_id: int):
|
||||
async with async_session() as session:
|
||||
items = await session.scalars(select(Item).where(Item.category == category_id))
|
||||
return items
|
||||
|
||||
|
||||
async def get_item_by_id(item_id: int):
|
||||
async with async_session() as session:
|
||||
item = await session.scalar(select(Item).where(Item.id == item_id))
|
||||
return item
|
||||
|
||||
|
||||
async def delete_basket(tg_id, item_id):
|
||||
async with async_session() as session:
|
||||
user = await session.scalar(select(User).where(User.tg_id == tg_id))
|
||||
await session.execute(delete(Basket).where(Basket.user == user.id, Basket.item == item_id))
|
||||
await session.commit()
|
||||
Reference in New Issue
Block a user