예제 #1
0
        public StudentsProjectionActor(EventStoreDispatcher dispatcher, IReadModelRepository repository, ICatchupPositionRepository catchupPositionRepository)
            : base(dispatcher, repository, catchupPositionRepository)
        {
            ReceiveAsync <StudentCreated>(async(s) =>
            {
                await repository.Add(new StudentReadModel
                {
                    Id             = s.Id,
                    LastName       = s.LastName,
                    FirstMidName   = s.FirstMidName,
                    EnrollmentDate = s.EnrollmentDate
                });
            });

            ReceiveAsync <StudentUpdated>(async(s) =>
            {
                var student            = await repository.GetById <StudentReadModel>(s.Id);
                student.FirstMidName   = s.FirstMidName;
                student.LastName       = s.LastName;
                student.EnrollmentDate = s.EnrollmentDate;
                await repository.Update(student);
            });
            ReceiveAsync <StudentDeleted>(async(s) =>
            {
                var student = await repository.GetById <StudentReadModel>(s.Id);
                await repository.Delete(student);
            });
        }
예제 #2
0
        public InstructorsProjectionActor(EventStoreDispatcher dispatcher,
                                          IReadModelRepository readModelRepository,
                                          ICatchupPositionRepository catchupPositionRepository, IRepository <Course> courseRepository)
            : base(dispatcher, readModelRepository, catchupPositionRepository)
        {
            ReceiveAsync <InstructorCreated>(async(i) =>
            {
                var instructorReadModel = new InstructorReadModel
                {
                    Id        = i.Id,
                    LastName  = i.LastName,
                    FirstName = i.FirstName,
                    HireDate  = i.HireDate,
                };
                await readModelRepository.Add(instructorReadModel);
            });
            ReceiveAsync <InstructorDetailsUpdated>(async(i) =>
            {
                var instructorReadModel       = await readModelRepository.GetById <InstructorReadModel>(i.Id);
                instructorReadModel.LastName  = i.LastName;
                instructorReadModel.FirstName = i.FirstName;
                instructorReadModel.HireDate  = i.HireDate;
                await readModelRepository.Update(instructorReadModel);
            });
            ReceiveAsync <InstructorOfficeLocationChanged>(async(o) =>
            {
                var instructor            = await readModelRepository.GetById <InstructorReadModel>(o.Id);
                instructor.OfficeLocation = o.OfficeLocation;
                await readModelRepository.Update(instructor);
            });

            ReceiveAsync <InstructorCourseAssigned>(async(c) =>
            {
                var course = await courseRepository.GetById(c.CourseId);
                var instructorReadModel = await readModelRepository.GetById <InstructorReadModel>(c.Id);
                instructorReadModel.CourseAssignments.Add(new AssignedCourse
                {
                    Id     = c.CourseId,
                    Title  = course.Title,
                    Number = course.Number
                });
                await readModelRepository.Update(instructorReadModel);
            });
            ReceiveAsync <InstructorCourseUnassigned>(async(c) =>
            {
                var instructorReadModel = await readModelRepository.GetById <InstructorReadModel>(c.Id);
                instructorReadModel.CourseAssignments.RemoveAll(x => x.Id == c.CourseId);
                await readModelRepository.Update(instructorReadModel);
            });
            ReceiveAsync <InstructorDeleted>(async(i) =>
            {
                var instructorReadModel = await readModelRepository.GetById <InstructorReadModel>(i.Id);
                await readModelRepository.Delete(instructorReadModel);
            });
        }
예제 #3
0
        public BaseProjectionActor(EventStoreDispatcher dispatcher, IReadModelRepository repository, ICatchupPositionRepository catchupPositionRepository)
        {
            _catchupPositionRepository = catchupPositionRepository;
            _dispatcher = dispatcher;

            ReceiveAsync <SaveEventMessage>(async(s) =>
            {
                var position = new Position(s.CommitPosition, s.PreparePosition);
                await _catchupPositionRepository.SavePosition <T>(position);
                LastProcessedPosition = position;
            });
        }
예제 #4
0
        public CoursesProjectionActor(EventStoreDispatcher dispatcher,
                                      IReadModelRepository readModelRepository,
                                      ICatchupPositionRepository catchupPositionRepository,
                                      IRepository <Department> departmentRepository)
            : base(dispatcher, readModelRepository, catchupPositionRepository)
        {
            _departmentRepository = departmentRepository;

            ReceiveAsync <CourseCreated>(async(c) =>
            {
                var department = await departmentRepository.GetById(c.DepartmentId);
                await readModelRepository.Add(new CourseReadModel
                {
                    Id           = c.Id,
                    Number       = c.Number,
                    Title        = c.Title,
                    Credits      = c.Credits,
                    Department   = department.Name,
                    DepartmentId = c.DepartmentId
                });
            });

            ReceiveAsync <CourseUpdated>(async(c) =>
            {
                var course = await readModelRepository.GetById <CourseReadModel>(c.Id);
                if (course.DepartmentId != c.DepartmentId)
                {
                    var department    = await departmentRepository.GetById(c.DepartmentId);
                    course.Department = department.Name;
                }
                course.Title        = c.Title;
                course.Credits      = c.Credits;
                course.DepartmentId = c.DepartmentId;
                await readModelRepository.Update(course);
            });
            ReceiveAsync <CourseDeleted>(async(s) =>
            {
                var course = await readModelRepository.GetById <CourseReadModel>(s.Id);
                await readModelRepository.Delete <CourseReadModel>(course);
            });
            ReceiveAsync <DepartmentUpdated>(async(d) =>
            {
                var coursesCollection = readModelRepository.GetCollection <CourseReadModel>();
                await coursesCollection.UpdateManyAsync(x => x.DepartmentId == d.Id, Builders <CourseReadModel> .Update.Set(x => x.Department, d.Name));
            });
        }
        public DepartmentsProjectionActor(EventStoreDispatcher dispatcher,
                                          IReadModelRepository readModelRepository,
                                          ICatchupPositionRepository catchupPositionRepository,
                                          IRepository <Instructor> instructorRepository)
            : base(dispatcher, readModelRepository, catchupPositionRepository)
        {
            _instructorRepository = instructorRepository;
            ReceiveAsync <DepartmentCreated>(async(s) =>
            {
                await readModelRepository.Add(new DepartmentReadModel
                {
                    Id        = s.Id,
                    Name      = s.Name,
                    Budget    = s.Budget,
                    StartDate = s.Startdate
                });
            });

            ReceiveAsync <DepartmentUpdated>(async(s) =>
            {
                var department       = await readModelRepository.GetById <DepartmentReadModel>(s.Id);
                department.Name      = s.Name;
                department.Budget    = s.Budget;
                department.StartDate = s.Startdate;
                await readModelRepository.Update(department);
            });
            ReceiveAsync <DepartmentDeleted>(async(s) =>
            {
                var department = await readModelRepository.GetById <DepartmentReadModel>(s.Id);
                await readModelRepository.Delete <DepartmentReadModel>(department);
            });
            ReceiveAsync <DepartmentAdministratorAssigned>(async(@event) =>
            {
                var instructorName       = await GetInstructorName(@event.AdministratorId);
                var department           = await readModelRepository.GetById <DepartmentReadModel>(@event.DepartmentId);
                department.Administrator = instructorName;
                await readModelRepository.Update(department);
            });
            ReceiveAsync <DepartmentAdministratorUnassigned>(async(@event) =>
            {
                var department           = await readModelRepository.GetById <DepartmentReadModel>(@event.DepartmentId);
                department.Administrator = null;
                await readModelRepository.Update(department);
            });
        }