изменил архитектуру API

This commit is contained in:
Андрей Дувакин 2025-02-09 12:35:37 +05:00
parent 61f1509ae5
commit 1d8b569d3e
33 changed files with 67 additions and 62 deletions

View File

View File

View File

View 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)

View File

@ -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:

View File

View File

View 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):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View 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 Lectures(Base): class Lectures(Base):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View 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 StepTask(Base): class StepTask(Base):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View 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 TaskFile(Base): class TaskFile(Base):

View File

@ -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):

View File

@ -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):

View File

@ -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):

View File

View 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)

View File

@ -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
@ -16,4 +16,4 @@ app.add_middleware(
allow_headers=['*'], allow_headers=['*'],
) )
init_db() init_db()

19
API/app/settings.py Normal file
View 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
View 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