diff --git a/API/app/__init__.py b/API/app/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/API/app/__init__.py @@ -0,0 +1 @@ + diff --git a/API/app/infrastructure/database/database.py b/API/app/infrastructure/database/database.py index e69de29..c5f82bc 100644 --- a/API/app/infrastructure/database/database.py +++ b/API/app/infrastructure/database/database.py @@ -0,0 +1,18 @@ +import os + +from dotenv import load_dotenv +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +from app.infrastructure.database.models import Base + +load_dotenv() + +SQLALCHEMY_DATABASE_URL = os.getenv("DATABASE_URL") + +engine = create_engine(SQLALCHEMY_DATABASE_URL) +SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) + + +def init_db(): + Base.metadata.create_all(bind=engine) diff --git a/API/app/infrastructure/database/dependencies.py b/API/app/infrastructure/database/dependencies.py new file mode 100644 index 0000000..4cf28dc --- /dev/null +++ b/API/app/infrastructure/database/dependencies.py @@ -0,0 +1,10 @@ +from sqlalchemy.orm import Session +from app.infrastructure.database.database import SessionLocal + + +def get_db() -> Session: + db = SessionLocal() + try: + yield db + finally: + db.close() diff --git a/API/app/infrastructure/database/models/__init__.py b/API/app/infrastructure/database/models/__init__.py new file mode 100644 index 0000000..7c2377a --- /dev/null +++ b/API/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/API/app/infrastructure/database/models/roles.py b/API/app/infrastructure/database/models/roles.py new file mode 100644 index 0000000..fa9787b --- /dev/null +++ b/API/app/infrastructure/database/models/roles.py @@ -0,0 +1,11 @@ +from sqlalchemy import Column, Integer, VARCHAR +from sqlalchemy.orm import relationship + +from app.infrastructure.database.models import Base + + +class Role(Base): + __tablename__ = 'roles' + + id = Column(Integer, primary_key=True, autoincrement=True) + title = Column(VARCHAR(100), nullable=False) diff --git a/API/app/infrastructure/database/models/users.py b/API/app/infrastructure/database/models/users.py new file mode 100644 index 0000000..1d128b1 --- /dev/null +++ b/API/app/infrastructure/database/models/users.py @@ -0,0 +1,36 @@ +import datetime + +from sqlalchemy import Column, Integer, VARCHAR, Enum, DateTime, Date, String +from sqlalchemy.sql import func + +from enum import Enum as PyEnum + +from app.infrastructure.database.models import Base +from werkzeug.security import check_password_hash, generate_password_hash + + +class UserGenderEnum(PyEnum): + MALE = 'мужской' + FEMALE = 'женский' + NOTHING = 'не указан' + + +class User(Base): + __tablename__ = 'users' + + id = Column(Integer, primary_key=True, autoincrement=True) + first_name = Column(VARCHAR(150), nullable=False) + last_name = Column(VARCHAR(150), nullable=False) + patronymic = Column(VARCHAR(150)) + gender = Column(Enum(UserGenderEnum), nullable=False) + birthday = Column(Date, nullable=False) + registration_date = Column(DateTime, nullable=False, default=func.utcnow) + login = Column(VARCHAR(150), nullable=False, unique=True) + password = Column(String, nullable=False) + email = Column(VARCHAR(200), nullable=False) + + def check_password(self, password): + return check_password_hash(self.password, password) + + def set_password(self, password): + self.password = generate_password_hash(password) diff --git a/API/app/main.py b/API/app/main.py index e69de29..78c63d7 100644 --- a/API/app/main.py +++ b/API/app/main.py @@ -0,0 +1,3 @@ +import datetime + +print(datetime.UTC.) \ No newline at end of file