psb_hack/api/app/infrastructure/enrollments_service.py

68 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import datetime
from typing import Optional, List
from fastapi import HTTPException, status
from sqlalchemy.ext.asyncio import AsyncSession
from app.application.enrollments_repository import EnrollmentsRepository
from app.application.courses_repository import CoursesRepository
from app.application.users_repository import UsersRepository
from app.domain.entities.enrollments import EnrollmentRead, EnrollmentCreate
from app.domain.models import Enrollment
class EnrollmentsService:
def __init__(self, db: AsyncSession):
self.enrollments_repository = EnrollmentsRepository(db)
self.courses_repository = CoursesRepository(db)
self.users_repository = UsersRepository(db)
async def get_course_students_by_course_id(self, course_id: int) -> Optional[List[EnrollmentRead]]:
course = await self.courses_repository.get_by_id(course_id)
if course is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail='Курс с таким ID не найден')
enrollments = await self.enrollments_repository.get_by_course_id(course.id)
response = []
for enrollment in enrollments:
response.append(
EnrollmentRead.model_validate(enrollment)
)
return response
async def replace_course_students_list(
self, enrollments: List[EnrollmentCreate], course_id: int
) -> Optional[List[EnrollmentRead]]:
course = await self.courses_repository.get_by_id(course_id)
if course is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail='Курс с таким ID не найден')
old_enrollments = await self.enrollments_repository.get_by_course_id(course.id)
await self.enrollments_repository.delete_list(old_enrollments)
enrollments_models = []
for enrollment in enrollments:
student = await self.users_repository.get_by_id(enrollment.student_id)
if student is None:
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail='Пользователь с таким ID не найден')
enrollments_models.append(Enrollment(
course_id=course_id,
student_id=enrollment.student_id,
enrollment_date=datetime.datetime.now(),
))
enrollments_models = await self.enrollments_repository.create_list(enrollments_models)
response = []
for enrollment in enrollments_models:
response.append(
EnrollmentRead.model_validate(enrollment)
)
return response