从其他有界上下文验证日期

时间:2018-09-14 08:30:19

标签: domain-driven-design cqrs

我有两个边界上下文(学生入学,课程)。 学生注册包括所有学生及其课程ID和作业。 课程具有管理部分,可管理与课程相关的所有信息。 当学生想要获取课程信息时,它会命中一个发送jwt令牌的端点(/ courses / ID)。在课程上下文中,我获得了学生ID,课程ID并创建了在公共汽车上调度的查询。在从课程ID获取课程信息之前,在查询处理程序中,我要验证学生ID是否存在以及该学生是否有此课程。为此,我必须称呼另一种限制学生入学的背景。因此,我一直在寻找如何在互联网上进行处理的过程,结果发现: https://medium.com/@martinezdelariva/authentication-and-authorization-in-ddd-671f7a5596ac

class findByCourseIdAndStudentIdQueryHandler()
    {
        public function handle($findByCourseIdAndStudentIdQuery)
        {
            $courseId = $findByCourseIdAndStudentIdQuery->courseId();
            $studentId = $findByCourseIdAndStudentIdQuery->studentId();

            $student = $this->collaboratorService->studentFrom(
                $courseId,
                $studentId
            );


            $this->courseRepository->findByCourseId($courseId);
        }
    }

    class collaboratorService()
    {
        public function studentFrom($courseId, $studentId)
        {
            $student = $this->studentEnrollmentClient->getStudentFrom($courseId, $studentId);

            if (!$student) {
                throw new InvalidStudentException();
            }

            return $student;
        }
    }

你怎么看?

已更新

namespace App\Context\Course\Module\Course\UI\Controller;

class GetCourseController extends Controller
{
    public function getAction($request) {
        $this->ask(new FindByCourseIdQueryHandler($request->get('course_id'));
    }
}

namespace App\Context\Course\Module\Course\Infrastracture\Query;

class AuthorizedQueryDispatcher extends QueryDispatcher
{
    //In this case $query would be FindByCourseIdQueryHandler
    public function handle($query)
    {
        $authUser = $this->oauthService->getAuthUser();

        //it can be student or teacher
        $role = $authUser->getRole();
        $userId = $authUser->getUserId();

        //it will return FindByCourseIdAndStudentIdAuthorizedQueryHandler
        $authorizedQuery = $this->inflector->getAuthorizedQueryName->from($userId, $role, $query);

        $this->dispatch($authorizedQuery);

        $this->queryDispatch->dispatch($query);
    }
}

namespace App\Context\Course\Module\Course\Application\Query;

class FindByCourseIdAndStudentIdAuthorizedQueryHandler
{
    public function handle($findByCourseIdAndStudentIdQuery)
    {
        $student = $this->studentEnrollmentClient->getStudentFrom($findByCourseIdAndStudentIdQuery->courseId, $findByCourseIdAndStudentIdQuery->studentId);

        if (!$student) {
            throw new InvalidStudentException();
        }
    }
}

namespace App\Context\Course\Module\Course\Application\Query;

class findByCourseIdAndStudentIdQueryHandler()
{
    public function handle($findByCourseIdQueryHandler)
    {
        $courseId = $findByCourseIdQueryHandler->courseId();

        $this->courseRepository->findByCourseId($courseId);
    }
}

0 个答案:

没有答案