diff --git a/ERD.drawio b/ERD.drawio index 1842124..eefd92c 100644 --- a/ERD.drawio +++ b/ERD.drawio @@ -1,6 +1,6 @@ - + @@ -498,6 +498,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/infrastructure/database/models/accessories.py b/app/infrastructure/database/models/accessories.py new file mode 100644 index 0000000..5f867ef --- /dev/null +++ b/app/infrastructure/database/models/accessories.py @@ -0,0 +1,18 @@ +from sqlalchemy import Column, Integer, VARCHAR, Float +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +base = declarative_base() + + +class Accessories(base): + __tablename__ = 'accessories' + + id = Column(Integer, primary_key=True, autoincrement=True) + name = Column(VARCHAR(100), nullable=False) + width = Column(Float) + height = Column(Float) + length = Column(Float) + weight = Column(Float) + + storage_accessories = relationship('StorageAccessories', back_populates='accessories') diff --git a/app/infrastructure/database/models/deliveries.py b/app/infrastructure/database/models/deliveries.py new file mode 100644 index 0000000..5d3ede2 --- /dev/null +++ b/app/infrastructure/database/models/deliveries.py @@ -0,0 +1,18 @@ +from sqlalchemy import Column, Integer, DateTime, ForeignKey +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +base = declarative_base() + + +class Delivery(base): + __tablename__ = 'deliveries' + + id = Column(Integer, primary_key=True, autoincrement=True) + count = Column(Integer, nullable=False) + + storage_accessories_id = Column(Integer, ForeignKey('storage_accessories.id')) + step_id = Column(Integer, ForeignKey('steps.id')) + + storage_accessories = relationship('StorageAccessories', back_populates='delivery') + step = relationship('Step', back_populates='delivery') \ No newline at end of file diff --git a/app/infrastructure/database/models/orders.py b/app/infrastructure/database/models/orders.py new file mode 100644 index 0000000..39f36fc --- /dev/null +++ b/app/infrastructure/database/models/orders.py @@ -0,0 +1,18 @@ +from sqlalchemy import Column, Integer, DateTime, ForeignKey +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +base = declarative_base() + + +class Order(base): + __tablename__ = 'orders' + + id = Column(Integer, primary_key=True, autoincrement=True) + order_datetime = Column(DateTime, nullable=False) + + user_id = Column(Integer, ForeignKey('users.id')) + status_id = Column(Integer, ForeignKey('statuses.id')) + + user = relationship('User', back_populates='orders') + status = relationship('Status', back_populates='orders') \ No newline at end of file diff --git a/app/infrastructure/database/models/roles.py b/app/infrastructure/database/models/roles.py new file mode 100644 index 0000000..7cf1e3c --- /dev/null +++ b/app/infrastructure/database/models/roles.py @@ -0,0 +1,14 @@ +from sqlalchemy import Column, Integer, VARCHAR +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +base = declarative_base() + + +class Role(base): + __tablename__ = 'roles' + + id = Column(Integer, primary_key=True, autoincrement=True) + name = Column(VARCHAR(100), nullable=False) + + users = relationship('User', back_populates='role') diff --git a/app/infrastructure/database/models/statuses.py b/app/infrastructure/database/models/statuses.py new file mode 100644 index 0000000..42806b5 --- /dev/null +++ b/app/infrastructure/database/models/statuses.py @@ -0,0 +1,15 @@ +from sqlalchemy import Column, Integer, VARCHAR +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +base = declarative_base() + + +class Status(base): + __tablename__ = 'statuses' + + id = Column(Integer, primary_key=True, autoincrement=True) + name = Column(VARCHAR(100), nullable=False) + + orders = relationship('Order', back_populates='status') + steps = relationship('Step', back_populates='status') \ No newline at end of file diff --git a/app/infrastructure/database/models/steps.py b/app/infrastructure/database/models/steps.py new file mode 100644 index 0000000..ef9d2ec --- /dev/null +++ b/app/infrastructure/database/models/steps.py @@ -0,0 +1,21 @@ +from sqlalchemy import Column, Integer, DateTime, ForeignKey +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +base = declarative_base() + + +class Step(base): + __tablename__ = 'steps' + + id = Column(Integer, primary_key=True, autoincrement=True) + start_deadline = Column(DateTime, nullable=False) + finish_deadline = Column(DateTime, nullable=False) + + order_id = Column(Integer, ForeignKey('orders.id')) + status_id = Column(Integer, ForeignKey('statuses.id')) + + order = relationship('Order', back_populates='steps') + status = relationship('Status', back_populates='steps') + + deliveries = relationship('Delivery', back_populates='step') diff --git a/app/infrastructure/database/models/storage_accessories.py b/app/infrastructure/database/models/storage_accessories.py new file mode 100644 index 0000000..a5c2c52 --- /dev/null +++ b/app/infrastructure/database/models/storage_accessories.py @@ -0,0 +1,22 @@ +from sqlalchemy import Column, Integer, DateTime, ForeignKey +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +base = declarative_base() + + +class StorageAccessories(base): + __tablename__ = 'storage_accessories' + + id = Column(Integer, primary_key=True, autoincrement=True) + current_count = Column(Integer, nullable=False) + change_datetime = Column(DateTime) + + storage_id = Column(Integer, ForeignKey('storages.id')) + accessories_id = Column(Integer, ForeignKey('accessories')) + + storage = relationship('Storage', back_populates='storage_accessories') + accessories = relationship('Accessories', back_populates='storage_accessories') + + deliveries = relationship('Delivery', back_populates='storage_accessories') + diff --git a/app/infrastructure/database/models/storages.py b/app/infrastructure/database/models/storages.py new file mode 100644 index 0000000..7c8cef8 --- /dev/null +++ b/app/infrastructure/database/models/storages.py @@ -0,0 +1,16 @@ +from sqlalchemy import Column, Integer, DateTime, ForeignKey, VARCHAR, Float +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +base = declarative_base() + + +class Storage(base): + __tablename__ = 'storages' + + id = Column(Integer, primary_key=True, autoincrement=True) + name = Column(VARCHAR(100), nullable=False) + x_coordinate = Column(Float, nullable=False) + y_coordinate = Column(Float, nullable=False) + + storage_accessories = relationship('StorageAccessories', back_populates='storage') \ No newline at end of file diff --git a/app/infrastructure/database/models/users.py b/app/infrastructure/database/models/users.py new file mode 100644 index 0000000..a9e1d16 --- /dev/null +++ b/app/infrastructure/database/models/users.py @@ -0,0 +1,22 @@ +from sqlalchemy import Column, Integer, VARCHAR, ForeignKey +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy.orm import relationship + +base = declarative_base() + + + +class User(base): + __tablename__ = 'users' + + id = Column(Integer, primary_key=True, autoincrement=True) + first_name = Column(VARCHAR(100), nullable=False) + last_name = Column(VARCHAR(100), nullable=False) + login = Column(VARCHAR(150), nullable=False) + password = Column(VARCHAR(500), nullable=False) + + role_id = Column(Integer, ForeignKey('roles.id')) + + role = relationship('Role', back_populates='users') + + orders = relationship('Order', back_populates='user') \ No newline at end of file