изменил архитектуру 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 app.infrastructure.database.database import SessionLocal
from app.database.database import SessionLocal
def get_db() -> Session:

View File

View File

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class AnswerFile(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, String, Boolean, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import 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.sql import func
from app.infrastructure.database.models import Base
from app.domain.models import Base
class AppealStatusEnum(PyEnum):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, VARCHAR
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class AppealsTopic(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, VARCHAR, String
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import 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.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class CourseStudent(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, VARCHAR, String, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class Course(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class Lectures(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, String, ForeignKey, VARCHAR
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class Lesson(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, VARCHAR, String
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import 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.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class Notification(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, VARCHAR
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class Role(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class StepTask(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, String, VARCHAR
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class StepType(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, ForeignKey, VARCHAR
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import 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.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class TaskAnswer(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class TaskFile(Base):

View File

@ -1,7 +1,7 @@
from sqlalchemy import Column, Integer, String, VARCHAR
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class TaskType(Base):

View File

@ -2,7 +2,7 @@ from sqlalchemy import Column, Integer, ForeignKey, DateTime
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from app.infrastructure.database.models import Base
from app.domain.models import Base
class TestAnswer(Base):

View File

@ -5,7 +5,7 @@ from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
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):

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
from app.infrastructure.database.database import init_db
from app.database.database import init_db
from fastapi import FastAPI
from starlette.middleware.cors import CORSMiddleware

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