From d405e74aade067afe07f84e711e5eaf50128546c Mon Sep 17 00:00:00 2001 From: ronis_0505 Date: Wed, 20 Aug 2025 19:35:41 +0300 Subject: [PATCH 1/3] change worker.telegram_id type (INTEGER>>BIGINT) --- app/database/models.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/database/models.py b/app/database/models.py index 340d496..b9e2814 100644 --- a/app/database/models.py +++ b/app/database/models.py @@ -1,4 +1,4 @@ -from sqlalchemy import Column, Integer, String, Date, ForeignKey, func, Null +from sqlalchemy import Column, Integer, String, Date, ForeignKey, func, Null,BIGINT from sqlalchemy.dialects.postgresql import ENUM from sqlalchemy.orm import relationship, DeclarativeBase @@ -22,7 +22,7 @@ class Worker(Base): __tablename__ = "workers" id = Column(Integer, primary_key=True, autoincrement=True) - telegram_id = Column(Integer, unique=True, nullable=False) + telegram_id = Column(BIGINT, unique=True, nullable=False) name = Column(String, nullable=False) email = Column(String, nullable=True) phone_number = Column(String, nullable=False) @@ -47,7 +47,7 @@ class Order(Base): id = Column(Integer, primary_key=True, autoincrement=True) name = Column(String) - worker_id = Column(Integer, ForeignKey('workers.telegram_id'), nullable=False) + worker_id = Column(BIGINT, ForeignKey('workers.telegram_id'), nullable=False) status_id = Column(status_enum) counterparty = Column(String) customer = Column(String, nullable=False) -- 2.49.1 From 173e8959eac85ab31051dba59aa57d4fb704e9e2 Mon Sep 17 00:00:00 2001 From: ronis_0505 Date: Wed, 20 Aug 2025 19:36:48 +0300 Subject: [PATCH 2/3] rearranged db_port to env --- app/database/database_engine.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/database/database_engine.py b/app/database/database_engine.py index 9e8eb88..97d6829 100644 --- a/app/database/database_engine.py +++ b/app/database/database_engine.py @@ -8,7 +8,7 @@ import dotenv dotenv.load_dotenv(".env") DATABASE_URL = (f"postgresql+asyncpg://{os.getenv('DB_USER')}:{os.getenv('DB_PASSWORD')}@" - f"{os.getenv('DB_HOST')}:9432/{os.getenv('DATABASE')}") + f"{os.getenv('DB_HOST')}/{os.getenv('DATABASE')}") print(DATABASE_URL) engine = create_async_engine(DATABASE_URL, echo=True) async_session_ = async_sessionmaker(bind=engine, expire_on_commit=False) -- 2.49.1 From 20aefeb110a1e9f75af90d875bf370e9c355fe12 Mon Sep 17 00:00:00 2001 From: ronis_0505 Date: Tue, 26 Aug 2025 22:04:13 +0300 Subject: [PATCH 3/3] add 'job_title' column to workers table --- app/database/__init__.py | 5 ++--- app/database/models.py | 6 ++++-- app/handlers/orders.py | 5 ++--- init_schemes.sql | 10 ++++++++-- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/app/database/__init__.py b/app/database/__init__.py index 12985fc..2156a30 100644 --- a/app/database/__init__.py +++ b/app/database/__init__.py @@ -1,5 +1,4 @@ from .database_engine import async_session_ -from .models import Worker,Component, Order +from .models import Worker, Component, Order, job_title - -__all__ = ["Worker", "Component", "Order", "async_session_"] \ No newline at end of file +__all__ = ["Worker", "Component", "Order", "async_session_", "job_title"] diff --git a/app/database/models.py b/app/database/models.py index b9e2814..cdae7ed 100644 --- a/app/database/models.py +++ b/app/database/models.py @@ -1,8 +1,9 @@ -from sqlalchemy import Column, Integer, String, Date, ForeignKey, func, Null,BIGINT +from sqlalchemy import Column, Integer, String, Date, ForeignKey, func, Null, BIGINT from sqlalchemy.dialects.postgresql import ENUM from sqlalchemy.orm import relationship, DeclarativeBase status_enum = ENUM('Выполнено', 'В процессе', 'Создано', 'Ожидание комплектующих', name='status') +job_title = ENUM('Начальник цеха', 'Мастер', 'Сборщик', name='job_title') class Base(DeclarativeBase): @@ -25,7 +26,8 @@ class Worker(Base): telegram_id = Column(BIGINT, unique=True, nullable=False) name = Column(String, nullable=False) email = Column(String, nullable=True) - phone_number = Column(String, nullable=False) + phone_number = Column(String, default=None) + job_title = Column(job_title, default='Сборщик'), created_at = Column(Date, server_default=func.now()) updated_at = Column(Date, onupdate=func.now()) diff --git a/app/handlers/orders.py b/app/handlers/orders.py index fb4c89e..ed32ad6 100644 --- a/app/handlers/orders.py +++ b/app/handlers/orders.py @@ -62,9 +62,8 @@ async def orders_menu(message: Message): async def get_order_worker_id(callback: CallbackQuery, state: FSMContext): await state.set_state(OrderForm.worker_id) async with async_session_() as session: - async with session.begin(): - result = await session.execute(select(Worker.name, Worker.telegram_id)) - workers = result.all() + result = await session.execute(select(Worker.name, Worker.telegram_id).where(Worker.job_title == "Сборщик")) + workers = result.all() await callback.message.answer("Введите сборщика ответственного за заказ:", reply_markup=create_inline_kb( **{f"set_worker_in_order_{tg_id}": name for name, tg_id in workers})) diff --git a/init_schemes.sql b/init_schemes.sql index 67b3a35..c5c6681 100644 --- a/init_schemes.sql +++ b/init_schemes.sql @@ -1,15 +1,21 @@ + +CREATE TYPE job_title AS ENUM ('Начальник цеха','Мастер','Сборщик'); +CREATE TYPE status AS ENUM ('Выполнено','В процессе','Создано','Ожидание комплектующих'); + + CREATE TABLE workers ( id SERIAL PRIMARY KEY, telegram_id BIGINT UNIQUE NOT NULL, name VARCHAR NOT NULL, email VARCHAR(50), - phone_number VARCHAR(20) NOT NULL, + phone_number VARCHAR(20), + job_title job_title default 'Сборщик', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP ); -CREATE TYPE status AS ENUM ('Выполнено','В процессе','Создано','Ожидание комплектующих'); + CREATE TABLE orders ( -- 2.49.1