add algam
This commit is contained in:
@@ -182,4 +182,153 @@ class ImageRepository:
|
||||
if image:
|
||||
session.delete(image)
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
class TestRepository:
|
||||
"""Репозиторий для работы с тестами"""
|
||||
|
||||
def __init__(self, session: Session):
|
||||
self.session = session
|
||||
|
||||
def create_test(
|
||||
self,
|
||||
title: str,
|
||||
description: str = None,
|
||||
category_id: int = None,
|
||||
is_active: bool = True,
|
||||
time_limit_minutes: int = None
|
||||
) -> 'Test':
|
||||
"""Создание нового теста"""
|
||||
from database.models import Test
|
||||
|
||||
test = Test(
|
||||
title=title,
|
||||
description=description,
|
||||
category_id=category_id,
|
||||
is_active=is_active,
|
||||
time_limit_minutes=time_limit_minutes
|
||||
)
|
||||
self.session.add(test)
|
||||
self.session.commit()
|
||||
self.session.refresh(test)
|
||||
return test
|
||||
|
||||
def get_test_by_id(self, test_id: int) -> Optional['Test']:
|
||||
"""Получение теста по ID"""
|
||||
from database.models import Test
|
||||
return self.session.query(Test).filter(Test.id == test_id).first()
|
||||
|
||||
def get_tests(
|
||||
self,
|
||||
is_active: bool = None,
|
||||
category_id: int = None,
|
||||
limit: int = None
|
||||
) -> List['Test']:
|
||||
"""Получение списка тестов с фильтрацией"""
|
||||
from database.models import Test
|
||||
|
||||
query = self.session.query(Test)
|
||||
|
||||
if is_active is not None:
|
||||
query = query.filter(Test.is_active == is_active)
|
||||
|
||||
if category_id is not None:
|
||||
query = query.filter(Test.category_id == category_id)
|
||||
|
||||
if limit:
|
||||
query = query.limit(limit)
|
||||
|
||||
return query.all()
|
||||
|
||||
def update_test(self, test_id: int, **kwargs) -> Optional['Test']:
|
||||
"""Обновление теста"""
|
||||
from database.models import Test
|
||||
|
||||
test = self.session.query(Test).filter(Test.id == test_id).first()
|
||||
if test:
|
||||
for key, value in kwargs.items():
|
||||
if hasattr(test, key):
|
||||
setattr(test, key, value)
|
||||
self.session.commit()
|
||||
self.session.refresh(test)
|
||||
return test
|
||||
|
||||
def delete_test(self, test_id: int) -> bool:
|
||||
"""Удаление теста"""
|
||||
from database.models import Test
|
||||
|
||||
test = self.session.query(Test).filter(Test.id == test_id).first()
|
||||
if test:
|
||||
self.session.delete(test)
|
||||
self.session.commit()
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
class QuestionRepository:
|
||||
"""Репозиторий для работы с вопросами"""
|
||||
|
||||
def __init__(self, session: Session):
|
||||
self.session = session
|
||||
|
||||
def create_question(
|
||||
self,
|
||||
test_id: int,
|
||||
question_text: str,
|
||||
question_type: str = "single_choice",
|
||||
order_number: int = 1,
|
||||
points: int = 1,
|
||||
image_id: int = None
|
||||
) -> 'Question':
|
||||
"""Создание нового вопроса"""
|
||||
from database.models import Question
|
||||
|
||||
question = Question(
|
||||
test_id=test_id,
|
||||
question_text=question_text,
|
||||
question_type=question_type,
|
||||
order_number=order_number,
|
||||
points=points,
|
||||
image_id=image_id
|
||||
)
|
||||
self.session.add(question)
|
||||
self.session.commit()
|
||||
self.session.refresh(question)
|
||||
return question
|
||||
|
||||
def get_question_by_id(self, question_id: int) -> Optional['Question']:
|
||||
"""Получение вопроса по ID"""
|
||||
from database.models import Question
|
||||
return self.session.query(Question).filter(Question.id == question_id).first()
|
||||
|
||||
def get_questions_by_test_id(self, test_id: int) -> List['Question']:
|
||||
"""Получение всех вопросов для теста"""
|
||||
from database.models import Question
|
||||
return self.session.query(Question).filter(
|
||||
Question.test_id == test_id
|
||||
).order_by(Question.order_number).all()
|
||||
|
||||
def update_question(self, question_id: int, **kwargs) -> Optional['Question']:
|
||||
"""Обновление вопроса"""
|
||||
from database.models import Question
|
||||
|
||||
question = self.session.query(Question).filter(Question.id == question_id).first()
|
||||
if question:
|
||||
for key, value in kwargs.items():
|
||||
if hasattr(question, key):
|
||||
setattr(question, key, value)
|
||||
self.session.commit()
|
||||
self.session.refresh(question)
|
||||
return question
|
||||
|
||||
def delete_question(self, question_id: int) -> bool:
|
||||
"""Удаление вопроса"""
|
||||
from database.models import Question
|
||||
|
||||
question = self.session.query(Question).filter(Question.id == question_id).first()
|
||||
if question:
|
||||
self.session.delete(question)
|
||||
self.session.commit()
|
||||
return True
|
||||
return False
|
||||
Reference in New Issue
Block a user