sqlalchemy is a good orm

This commit is contained in:
2023-06-06 17:55:46 +03:00
parent e37e3db701
commit 6962420e28
5 changed files with 75 additions and 29 deletions

View File

@ -25,9 +25,7 @@ import keyboards
# DB # DB
from db.base import Session, engine, Base from db.base import Session, engine, Base
from db.models import User from db.models import User, Queue, QueueUser
# from db.engine import Database
# from sqlalchemy import select
bot = AsyncTeleBot(token, state_storage=StatePickleStorage()) bot = AsyncTeleBot(token, state_storage=StatePickleStorage())
@ -47,12 +45,44 @@ async def start(msg: Message):
session.add(new_user) session.add(new_user)
session.commit() session.commit()
await bot.send_message(chat_id=msg.chat.id, text="Регистрация прошла успешно, добро пожаловать!") await bot.send_message(chat_id=msg.chat.id, text="Регистрация прошла успешно, добро пожаловать!")
print(session.query(User).all(), flush=True)
# if msg.chat.type in ("group", "supergroup"): # if msg.chat.type in ("group", "supergroup"):
# await bot.send_message(chat_id=msg.chat.id, text=textbook.start_group) # await bot.send_message(chat_id=msg.chat.id, text=textbook.start_group)
# else: # else:
# await bot.send_message(chat_id=msg.chat.id, text=textbook.start) # await bot.send_message(chat_id=msg.chat.id, text=textbook.start)
@bot.message_handler(commands=["new_queue"])
async def nq(msg: Message):
user = session.query(User).filter_by(id=msg.from_user.id).first()
queue = Queue(owner_id=user.id)
session.add(queue)
session.commit()
await bot.send_message(chat_id=msg.chat.id, text=f"Создана новая очередь: {queue.id}")
@bot.message_handler(commands=["take_part"])
async def tp(msg: Message):
try:
command, queue_id = msg.text.split()
except:
await bot.send_message(chat_id=msg.chat.id, text="Вы забыли указать очередь")
return
qu = QueueUser(user_id=msg.from_user.id, queue_id=queue_id)
session.add(qu)
session.commit()
await bot.send_message(chat_id=msg.chat.id, text="Вы приняли участие в очереди!")
@bot.message_handler(commands=["queue"])
async def q(msg: Message):
try:
command, queue_id = msg.text.split()
except:
await bot.send_message(chat_id=msg.chat.id, text="Вы забыли указать очередь")
return
queue = session.query(Queue).filter_by(id=queue_id).first()
if queue:
users = [q.user.name for q in queue.users]
await bot.send_message(chat_id=msg.chat.id, text=f"Пользователи этой очереди: {', '.join(users)}")
else:
await bot.send_message(chat_id=msg.chat.id, text="Очередь не найдена!")
async def main(): async def main():
a = asyncio.create_task(bot.polling(non_stop=True)) a = asyncio.create_task(bot.polling(non_stop=True))
@ -61,7 +91,6 @@ async def main():
if __name__ == "__main__": if __name__ == "__main__":
print("Bot started", flush=True) print("Bot started", flush=True)
# db = Database()
Base.metadata.create_all(engine) Base.metadata.create_all(engine)
session = Session() session = Session()
bot.add_custom_filter(StateFilter(bot)) bot.add_custom_filter(StateFilter(bot))

View File

@ -1,9 +1,11 @@
from sqlalchemy import create_engine from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.exc import OperationalError
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
from db.settings import Settings from db.settings import Settings
engine = create_engine(Settings().uri) engine = create_engine(Settings().uri)
Session = sessionmaker(bind=engine) Session = sessionmaker(bind=engine)
Base = declarative_base() Base = declarative_base()

View File

@ -1,5 +1,6 @@
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String, BigInteger, Uuid from sqlalchemy import Column, Integer, String, BigInteger, ForeignKey
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship from sqlalchemy.orm import relationship
import uuid import uuid
@ -13,16 +14,22 @@ class User(Base):
name = Column(String) name = Column(String)
username = Column(String) username = Column(String)
# owns_queues = relationship("Queue", backref="owner")
# class Queue(Base): takes_part_in_queues = relationship("QueueUser", backref="user")
# __tablename__ = "queue"
#
# id = Column(Uuid, primary_key=True, default=uuid.uuid4()) class Queue(Base):
# owner = relationship(User) __tablename__ = "queue"
#
# id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
# class QueueUser(Base): owner_id = Column(BigInteger, ForeignKey("user.id"))
# __tablename__ = "queueuser"
# users = relationship("QueueUser", backref="queue")
# id = Column(Uuid, primary_key=True, default=uuid.uuid4())
# user_id =
class QueueUser(Base):
__tablename__ = "queueuser"
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
user_id = Column(BigInteger, ForeignKey("user.id"))
queue_id = Column(UUID(as_uuid=True), ForeignKey("queue.id"))

View File

@ -1,3 +1,3 @@
start = "Привет! Я помогу тебе вести очередность людей! Это бывает очень полезно для сдачи работ, к примеру, когда люди договариваются в разных чатах, а ближе к сдаче получается путаница. Ты можешь создавать очереди, отправлять ссылки на вступление, менять очередноcть, создавать очереди в групповых чатах и т.д.!" start = "Привет! Я помогу тебе вести очередность людей! Это бывает очень полезно для сдачи работ, к примеру, когда люди договариваются в разных чатах, а ближе к сдаче получается путаница. Ты можешь создавать очереди, отправлять ссылки на вступление, менять очередноcть, создавать очереди в групповых чатах и т.д.!"
start_group = "Привет, я QUEUEBOT 2.0, помогаю создавать очереди в твоих групповых чатах без регистрации и смс!\n\nЧтобы пользоваться мной в этом чате, пользователь с правами админа должен настроить меня, комманда /settings, также не забудь выдать мне права администратора, чтобы я мог видеть список участников этой группы!" start_group = "Привет, я QUEUEBOT 2.0, помогаю создавать очереди в твоих групповых чатах!\n\nЧтобы пользоваться мной в этом чате, пользователь с правами админа должен настроить меня, комманда /settings, также не забудь выдать мне права администратора, чтобы я мог видеть список участников этой группы!"
menu = "Главное меню" menu = "Главное меню"

View File

@ -1,4 +1,18 @@
services: services:
postgres:
image: postgres:15.1
restart: always
volumes:
- ./postgres_data:/var/lib/postgresql/data/:rw
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: db
healthcheck:
test: ["CMD-SHELL", "pg_isready -d db --user user"]
interval: 2s
timeout: 2s
retries: 5
bot: bot:
build: build:
context: bot context: bot
@ -11,12 +25,6 @@ services:
HOST: postgres HOST: postgres
PORT: 5432 PORT: 5432
restart: always restart: always
depends_on:
postgres: postgres:
image: postgres:15.1 condition: service_healthy
restart: always
volumes:
- ./postgres_data:/var/lib/postgresql/data/:Z
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: db