diff --git a/.gitignore b/.gitignore index 7224328..ac70ac6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea -.idea/ \ No newline at end of file +.idea/ +.env \ No newline at end of file diff --git a/app/__init__.py b/app/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/app/infrastructure/database/database.py b/app/infrastructure/database/database.py new file mode 100644 index 0000000..3a94f6d --- /dev/null +++ b/app/infrastructure/database/database.py @@ -0,0 +1,32 @@ +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker, Session + +from app.infrastructure.database.models import Base + +SQLALCHEMY_DATABASE_URL = "postgresql+pg8000://user:password@localhost/dbname" + +__factory = None + + +def init_db(): + import app.infrastructure.database.models.accessories + import app.infrastructure.database.models.deliveries + import app.infrastructure.database.models.orders + import app.infrastructure.database.models.roles + import app.infrastructure.database.models.statuses + import app.infrastructure.database.models.steps + import app.infrastructure.database.models.storage_accessories + import app.infrastructure.database.models.storages + import app.infrastructure.database.models.users + + global __factory + + engine = create_engine(SQLALCHEMY_DATABASE_URL) + __factory = sessionmaker(autocommit=False, autoflush=False, bind=engine) + + Base.metadata.create_all(bind=engine) + + +def connect() -> Session: + global __factory + return __factory() diff --git a/app/infrastructure/database/models/__init__.py b/app/infrastructure/database/models/__init__.py new file mode 100644 index 0000000..7c2377a --- /dev/null +++ b/app/infrastructure/database/models/__init__.py @@ -0,0 +1,3 @@ +from sqlalchemy.ext.declarative import declarative_base + +Base = declarative_base() \ No newline at end of file diff --git a/app/infrastructure/database/models/accessories.py b/app/infrastructure/database/models/accessories.py index 5f867ef..ba7bde5 100644 --- a/app/infrastructure/database/models/accessories.py +++ b/app/infrastructure/database/models/accessories.py @@ -1,11 +1,10 @@ from sqlalchemy import Column, Integer, VARCHAR, Float -from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship -base = declarative_base() +from app.infrastructure.database.models import Base -class Accessories(base): +class Accessories(Base): __tablename__ = 'accessories' id = Column(Integer, primary_key=True, autoincrement=True) diff --git a/app/infrastructure/database/models/deliveries.py b/app/infrastructure/database/models/deliveries.py index 5d3ede2..fefcf27 100644 --- a/app/infrastructure/database/models/deliveries.py +++ b/app/infrastructure/database/models/deliveries.py @@ -1,11 +1,10 @@ -from sqlalchemy import Column, Integer, DateTime, ForeignKey -from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy import Column, Integer, ForeignKey from sqlalchemy.orm import relationship -base = declarative_base() +from app.infrastructure.database.models import Base -class Delivery(base): +class Delivery(Base): __tablename__ = 'deliveries' id = Column(Integer, primary_key=True, autoincrement=True) diff --git a/app/infrastructure/database/models/orders.py b/app/infrastructure/database/models/orders.py index 39f36fc..c06c119 100644 --- a/app/infrastructure/database/models/orders.py +++ b/app/infrastructure/database/models/orders.py @@ -1,11 +1,10 @@ from sqlalchemy import Column, Integer, DateTime, ForeignKey -from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship -base = declarative_base() +from app.infrastructure.database.models import Base -class Order(base): +class Order(Base): __tablename__ = 'orders' id = Column(Integer, primary_key=True, autoincrement=True) diff --git a/app/infrastructure/database/models/roles.py b/app/infrastructure/database/models/roles.py index 7cf1e3c..a9a793d 100644 --- a/app/infrastructure/database/models/roles.py +++ b/app/infrastructure/database/models/roles.py @@ -1,11 +1,10 @@ from sqlalchemy import Column, Integer, VARCHAR -from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship -base = declarative_base() +from app.infrastructure.database.models import Base -class Role(base): +class Role(Base): __tablename__ = 'roles' id = Column(Integer, primary_key=True, autoincrement=True) diff --git a/app/infrastructure/database/models/statuses.py b/app/infrastructure/database/models/statuses.py index 42806b5..9505688 100644 --- a/app/infrastructure/database/models/statuses.py +++ b/app/infrastructure/database/models/statuses.py @@ -1,11 +1,10 @@ from sqlalchemy import Column, Integer, VARCHAR -from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship -base = declarative_base() +from app.infrastructure.database.models import Base -class Status(base): +class Status(Base): __tablename__ = 'statuses' id = Column(Integer, primary_key=True, autoincrement=True) diff --git a/app/infrastructure/database/models/steps.py b/app/infrastructure/database/models/steps.py index ef9d2ec..36843b0 100644 --- a/app/infrastructure/database/models/steps.py +++ b/app/infrastructure/database/models/steps.py @@ -1,11 +1,10 @@ from sqlalchemy import Column, Integer, DateTime, ForeignKey -from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship -base = declarative_base() +from app.infrastructure.database.models import Base -class Step(base): +class Step(Base): __tablename__ = 'steps' id = Column(Integer, primary_key=True, autoincrement=True) diff --git a/app/infrastructure/database/models/storage_accessories.py b/app/infrastructure/database/models/storage_accessories.py index a5c2c52..98b1816 100644 --- a/app/infrastructure/database/models/storage_accessories.py +++ b/app/infrastructure/database/models/storage_accessories.py @@ -1,11 +1,10 @@ from sqlalchemy import Column, Integer, DateTime, ForeignKey -from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship -base = declarative_base() +from app.infrastructure.database.models import Base -class StorageAccessories(base): +class StorageAccessories(Base): __tablename__ = 'storage_accessories' id = Column(Integer, primary_key=True, autoincrement=True) diff --git a/app/infrastructure/database/models/storages.py b/app/infrastructure/database/models/storages.py index 7c8cef8..ea6fa63 100644 --- a/app/infrastructure/database/models/storages.py +++ b/app/infrastructure/database/models/storages.py @@ -1,11 +1,10 @@ -from sqlalchemy import Column, Integer, DateTime, ForeignKey, VARCHAR, Float -from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy import Column, Integer, VARCHAR, Float from sqlalchemy.orm import relationship -base = declarative_base() +from app.infrastructure.database.models import Base -class Storage(base): +class Storage(Base): __tablename__ = 'storages' id = Column(Integer, primary_key=True, autoincrement=True) diff --git a/app/infrastructure/database/models/users.py b/app/infrastructure/database/models/users.py index a9e1d16..8b029d5 100644 --- a/app/infrastructure/database/models/users.py +++ b/app/infrastructure/database/models/users.py @@ -1,12 +1,10 @@ from sqlalchemy import Column, Integer, VARCHAR, ForeignKey -from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship -base = declarative_base() +from app.infrastructure.database.models import Base - -class User(base): +class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True, autoincrement=True) @@ -19,4 +17,4 @@ class User(base): role = relationship('Role', back_populates='users') - orders = relationship('Order', back_populates='user') \ No newline at end of file + orders = relationship('Order', back_populates='user') diff --git a/app/main.py b/app/main.py index e69de29..5c3618e 100644 --- a/app/main.py +++ b/app/main.py @@ -0,0 +1,9 @@ +from fastapi import FastAPI +from app.infrastructure.fastapi import routes +from app.infrastructure.database.database import init_db + +app = FastAPI() + +init_db() # Инициализация базы данных + +# app.include_router(routes.router) \ No newline at end of file