89
app/database/models.py
Normal file
89
app/database/models.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from sqlalchemy import Column, Integer, String, Date, ForeignKey, func, Null
|
||||
from sqlalchemy.dialects.postgresql import ENUM
|
||||
from sqlalchemy.orm import relationship, DeclarativeBase
|
||||
|
||||
status_enum = ENUM('Выполнено', 'В процессе', 'Создано', 'Ожидание комплектующих', name='status')
|
||||
|
||||
|
||||
class Base(DeclarativeBase):
|
||||
pass
|
||||
|
||||
|
||||
class Worker(Base):
|
||||
"""
|
||||
id SERIAL PRIMARY KEY,
|
||||
telegram_id INTEGER UNIQUE NOT NULL,
|
||||
name VARCHAR NOT NULL,
|
||||
email VARCHAR(50),
|
||||
phone_number VARCHAR(20) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP
|
||||
"""
|
||||
__tablename__ = "workers"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
telegram_id = Column(Integer, unique=True, nullable=False)
|
||||
name = Column(String, nullable=False)
|
||||
email = Column(String, nullable=True)
|
||||
phone_number = Column(String, nullable=False)
|
||||
created_at = Column(Date, server_default=func.now())
|
||||
updated_at = Column(Date, onupdate=func.now())
|
||||
|
||||
|
||||
class Order(Base):
|
||||
"""
|
||||
id SERIAL PRIMARY KEY,
|
||||
name VARCHAR,
|
||||
worker_id INTEGER REFERENCES workers (id),
|
||||
status_id status DEFAULT 'Создано',
|
||||
counterparty VARCHAR(50),
|
||||
customer VARCHAR NOT NULL,
|
||||
commencement_work DATE,
|
||||
end_work DATE,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
description VARCHAR DEFAULT NULL
|
||||
"""
|
||||
__tablename__ = "orders"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
name = Column(String)
|
||||
worker_id = Column(Integer, ForeignKey('workers.telegram_id'), nullable=False)
|
||||
status_id = Column(status_enum)
|
||||
counterparty = Column(String)
|
||||
customer = Column(String, nullable=False)
|
||||
commencement_work = Column(Date, nullable=True)
|
||||
end_work = Column(Date, nullable=True)
|
||||
created_at = Column(Date, server_default=func.now())
|
||||
description = Column(String, default=Null)
|
||||
user = relationship("Worker", backref="orders")
|
||||
|
||||
|
||||
class Component(Base):
|
||||
"""
|
||||
id SERIAL PRIMARY KEY,
|
||||
name VARCHAR NOT NULL,
|
||||
description VARCHAR NULL
|
||||
"""
|
||||
__tablename__ = "components"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
name = Column(String, nullable=False)
|
||||
description = Column(String, default=Null)
|
||||
|
||||
|
||||
class OrderComponent(Base):
|
||||
"""
|
||||
id SERIAL PRIMARY KEY,
|
||||
order_id INTEGER REFERENCES orders (id),
|
||||
component_id INTEGER REFERENCES components (id),
|
||||
quantity INTEGER DEFAULT 1
|
||||
"""
|
||||
__tablename__ = "order_components"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
order_id = Column(Integer, ForeignKey('orders.id'))
|
||||
component_id = Column(Integer, ForeignKey('components.id'))
|
||||
quantity = Column(Integer, default=1)
|
||||
|
||||
order = relationship("Order", backref="order_components")
|
||||
component = relationship("Component", backref="order_components")
|
Reference in New Issue
Block a user