изменил архитектуру API
This commit is contained in:
parent
61f1509ae5
commit
1d8b569d3e
0
API/app/application/__init__.py
Normal file
0
API/app/application/__init__.py
Normal file
0
API/app/controllers/__init__.py
Normal file
0
API/app/controllers/__init__.py
Normal file
0
API/app/database/__init__.py
Normal file
0
API/app/database/__init__.py
Normal file
12
API/app/database/database.py
Normal file
12
API/app/database/database.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
from sqlalchemy import create_engine
|
||||||
|
from sqlalchemy.orm import sessionmaker
|
||||||
|
|
||||||
|
from app.domain.models import Base
|
||||||
|
from app.settings import settings
|
||||||
|
|
||||||
|
engine = create_engine(settings.DATABASE_URL)
|
||||||
|
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
|
||||||
|
|
||||||
|
|
||||||
|
def init_db():
|
||||||
|
Base.metadata.create_all(bind=engine)
|
||||||
@ -1,5 +1,5 @@
|
|||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
from app.infrastructure.database.database import SessionLocal
|
from app.database.database import SessionLocal
|
||||||
|
|
||||||
|
|
||||||
def get_db() -> Session:
|
def get_db() -> Session:
|
||||||
0
API/app/domain/__init__.py
Normal file
0
API/app/domain/__init__.py
Normal file
0
API/app/domain/entities/__init__.py
Normal file
0
API/app/domain/entities/__init__.py
Normal file
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, String, ForeignKey
|
from sqlalchemy import Column, Integer, String, ForeignKey
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class AnswerFile(Base):
|
class AnswerFile(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
|
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class AnswerOption(Base):
|
class AnswerOption(Base):
|
||||||
@ -4,7 +4,7 @@ from sqlalchemy import Column, Integer, String, DateTime, Enum, ForeignKey
|
|||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
from sqlalchemy.sql import func
|
from sqlalchemy.sql import func
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class AppealStatusEnum(PyEnum):
|
class AppealStatusEnum(PyEnum):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, VARCHAR
|
from sqlalchemy import Column, Integer, VARCHAR
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class AppealsTopic(Base):
|
class AppealsTopic(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, VARCHAR, String
|
from sqlalchemy import Column, Integer, VARCHAR, String
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class Category(Base):
|
class Category(Base):
|
||||||
@ -2,7 +2,7 @@ from sqlalchemy import Column, Integer, ForeignKey, Date, Boolean
|
|||||||
from sqlalchemy.sql import func
|
from sqlalchemy.sql import func
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class CourseStudent(Base):
|
class CourseStudent(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, VARCHAR, String, ForeignKey
|
from sqlalchemy import Column, Integer, VARCHAR, String, ForeignKey
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class Course(Base):
|
class Course(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, String, ForeignKey
|
from sqlalchemy import Column, Integer, String, ForeignKey
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class Lectures(Base):
|
class Lectures(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, String, ForeignKey, VARCHAR
|
from sqlalchemy import Column, Integer, String, ForeignKey, VARCHAR
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class Lesson(Base):
|
class Lesson(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, VARCHAR, String
|
from sqlalchemy import Column, Integer, VARCHAR, String
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class NotificationType(Base):
|
class NotificationType(Base):
|
||||||
@ -2,7 +2,7 @@ from sqlalchemy import Column, Integer, Boolean, String, DateTime, ForeignKey
|
|||||||
from sqlalchemy.sql import func
|
from sqlalchemy.sql import func
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class Notification(Base):
|
class Notification(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, VARCHAR
|
from sqlalchemy import Column, Integer, VARCHAR
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class Role(Base):
|
class Role(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, String, ForeignKey
|
from sqlalchemy import Column, Integer, String, ForeignKey
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class StepTask(Base):
|
class StepTask(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, String, VARCHAR
|
from sqlalchemy import Column, Integer, String, VARCHAR
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class StepType(Base):
|
class StepType(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, ForeignKey, VARCHAR
|
from sqlalchemy import Column, Integer, ForeignKey, VARCHAR
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class Step(Base):
|
class Step(Base):
|
||||||
@ -2,7 +2,7 @@ from sqlalchemy import Column, Integer, ForeignKey, DateTime, String, Boolean
|
|||||||
from sqlalchemy.sql import func
|
from sqlalchemy.sql import func
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class TaskAnswer(Base):
|
class TaskAnswer(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, String, ForeignKey
|
from sqlalchemy import Column, Integer, String, ForeignKey
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class TaskFile(Base):
|
class TaskFile(Base):
|
||||||
@ -1,7 +1,7 @@
|
|||||||
from sqlalchemy import Column, Integer, String, VARCHAR
|
from sqlalchemy import Column, Integer, String, VARCHAR
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class TaskType(Base):
|
class TaskType(Base):
|
||||||
@ -2,7 +2,7 @@ from sqlalchemy import Column, Integer, ForeignKey, DateTime
|
|||||||
from sqlalchemy.sql import func
|
from sqlalchemy.sql import func
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class TestAnswer(Base):
|
class TestAnswer(Base):
|
||||||
@ -5,7 +5,7 @@ from sqlalchemy.orm import relationship
|
|||||||
from sqlalchemy.sql import func
|
from sqlalchemy.sql import func
|
||||||
from werkzeug.security import check_password_hash, generate_password_hash
|
from werkzeug.security import check_password_hash, generate_password_hash
|
||||||
|
|
||||||
from app.infrastructure.database.models import Base
|
from app.domain.models import Base
|
||||||
|
|
||||||
|
|
||||||
class UserGenderEnum(PyEnum):
|
class UserGenderEnum(PyEnum):
|
||||||
0
API/app/infrastructure/__init__.py
Normal file
0
API/app/infrastructure/__init__.py
Normal file
@ -1,39 +0,0 @@
|
|||||||
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():
|
|
||||||
import app.infrastructure.database.models.answer_files
|
|
||||||
import app.infrastructure.database.models.answer_options
|
|
||||||
import app.infrastructure.database.models.appeals
|
|
||||||
import app.infrastructure.database.models.appeals_topics
|
|
||||||
import app.infrastructure.database.models.categories
|
|
||||||
import app.infrastructure.database.models.course_students
|
|
||||||
import app.infrastructure.database.models.courses
|
|
||||||
import app.infrastructure.database.models.lectures
|
|
||||||
import app.infrastructure.database.models.lessons
|
|
||||||
import app.infrastructure.database.models.notification_types
|
|
||||||
import app.infrastructure.database.models.notifications
|
|
||||||
import app.infrastructure.database.models.roles
|
|
||||||
import app.infrastructure.database.models.step_tasks
|
|
||||||
import app.infrastructure.database.models.step_types
|
|
||||||
import app.infrastructure.database.models.steps
|
|
||||||
import app.infrastructure.database.models.task_answers
|
|
||||||
import app.infrastructure.database.models.task_files
|
|
||||||
import app.infrastructure.database.models.task_types
|
|
||||||
import app.infrastructure.database.models.test_answers
|
|
||||||
import app.infrastructure.database.models.users
|
|
||||||
|
|
||||||
Base.metadata.create_all(bind=engine)
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from app.infrastructure.database.database import init_db
|
from app.database.database import init_db
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
from starlette.middleware.cors import CORSMiddleware
|
from starlette.middleware.cors import CORSMiddleware
|
||||||
|
|
||||||
|
|||||||
19
API/app/settings.py
Normal file
19
API/app/settings.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
from pydantic_settings import BaseSettings
|
||||||
|
|
||||||
|
|
||||||
|
class Settings(BaseSettings):
|
||||||
|
DATABASE_URL: str
|
||||||
|
SECRET_KEY: str
|
||||||
|
ALGORITHM: str
|
||||||
|
APP_PREFIX: str = '/api/v1'
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
env_file = '.env'
|
||||||
|
env_file_encoding = 'utf-8'
|
||||||
|
|
||||||
|
|
||||||
|
settings = Settings()
|
||||||
|
|
||||||
|
|
||||||
|
def get_auth_data():
|
||||||
|
return {'secret_key': settings.SECRET_KEY, 'algorithm': settings.ALGORITHM}
|
||||||
13
API/req.txt
Normal file
13
API/req.txt
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
annotated-types==0.7.0
|
||||||
|
asn1crypto==1.5.1
|
||||||
|
greenlet==3.1.1
|
||||||
|
pg8000==1.31.2
|
||||||
|
pydantic==2.10.6
|
||||||
|
pydantic-settings==2.7.1
|
||||||
|
pydantic_core==2.27.2
|
||||||
|
python-dateutil==2.9.0.post0
|
||||||
|
python-dotenv==1.0.1
|
||||||
|
scramp==1.4.5
|
||||||
|
six==1.17.0
|
||||||
|
SQLAlchemy==2.0.38
|
||||||
|
typing_extensions==4.12.2
|
||||||
Loading…
x
Reference in New Issue
Block a user