Exemplo n.º 1
0
        private async Task UpdateMembers(Command request, GroupClassAggregate groupClassAggregate, CancellationToken cancellationToken)
        {
            List <string> currentIds    = groupClassAggregate.GetCurrentParticipants().Select(x => x.UserId).ToList();
            var           updateMembers = request.Participants.Select(x => x.Id).ToList();

            RemoveMembers(groupClassAggregate, currentIds, updateMembers);
            await AddNewMembers(request, groupClassAggregate, currentIds, updateMembers, cancellationToken);

            groupClassAggregate.ChangeParticipantRole(request);
        }
Exemplo n.º 2
0
        private async Task AddAnchors(Command request, GroupClassAggregate groupClassAggregate, CancellationToken cancellationToken)
        {
            if (request.Anchors.Any())
            {
                List <User> anchors =
                    await _context.Users.Where(x => request.Anchors.Contains(x.Id)).ToListAsync(cancellationToken);

                groupClassAggregate.AddAnchor(anchors);
            }
        }
Exemplo n.º 3
0
        private async Task AddRoom(Command request, GroupClassAggregate groupClassAggregate, CancellationToken cancellationToken)
        {
            if (request.RoomId != default)
            {
                Room room = await _context.Rooms.Where(x => x.Id == request.RoomId.Value)
                            .FirstOrDefaultAsync(cancellationToken);

                groupClassAggregate.WithRoom(room);
            }
        }
Exemplo n.º 4
0
        private async Task AddGroupLevel(Command request, GroupClassAggregate groupClass, CancellationToken cancellationToken)
        {
            if (request.GroupLevelId != default)
            {
                GroupLevel groupLevel = await _context.GroupLevel.Where(x => x.Id == request.GroupLevelId.Value)
                                        .FirstOrDefaultAsync(cancellationToken);

                groupClass.WithGroupLevel(groupLevel);
            }
        }
Exemplo n.º 5
0
        private async Task AddNewMembers(Command request, GroupClassAggregate groupClassAggregate, List <string> currentIds, List <string> updateMembers,
                                         CancellationToken cancellationToken)
        {
            List <string> newParticipantIds = GetNewIds(currentIds, updateMembers);
            List <User>   newMembers        =
                await _context.Users.Where(x => newParticipantIds.Contains(x.Id)).ToListAsync(cancellationToken);

            newMembers.ForEach(member =>
            {
                PassAggregate passAggregate = PassAggregate.New()
                                              .UpdateByCommand(request)
                                              .WithParticipant(member);
                ParticipantDto participantDto = request.Participants.First(p => p.Id == member.Id);
                groupClassAggregate.AddParticipant(member, participantDto.Role, passAggregate);
            });
        }
Exemplo n.º 6
0
        private async Task AddParticipants(Command request, GroupClassAggregate groupClass,
                                           CancellationToken cancellationToken)
        {
            if (request.Participants.Any())
            {
                List <string> membersIds = request.Participants.Select(x => x.Id).ToList();
                List <User>   members    = await _context.Users.Where(x => membersIds.Contains(x.Id)).ToListAsync(cancellationToken);

                members.ForEach(x =>
                {
                    PassAggregate passAggregate = PassAggregate.New()
                                                  .UpdateByCommand(request)
                                                  .WithParticipant(x);

                    ParticipantDto participantDto = request.Participants.First(p => p.Id == x.Id);
                    groupClass.AddParticipant(x, participantDto.Role, passAggregate);
                });
            }
        }
Exemplo n.º 7
0
        public async Task <DataResult> Handle(Command request, CancellationToken cancellationToken)
        {
            GroupClassAggregate groupClassAggregate = GroupClassAggregate.New();

            groupClassAggregate.UpdateAll(request);

            await AddAnchors(request, groupClassAggregate, cancellationToken);

            await AddRoom(request, groupClassAggregate, cancellationToken);

            await AddGroupLevel(request, groupClassAggregate, cancellationToken);

            await AddParticipants(request, groupClassAggregate, cancellationToken);

            groupClassAggregate.UpdateDaysOfWeek(request, _context).CreateSchedule(request);

            await _context.GroupClass.AddAsync(groupClassAggregate.State, cancellationToken);

            await _context.SaveChangesAsync(cancellationToken);

            return(DataResult.Success());
        }
Exemplo n.º 8
0
        private void RemoveAnchors(Command request, GroupClassAggregate groupClassAggregate, List <string> currentIds)
        {
            List <string> removedIds = GetRemovedIds(currentIds, request.Anchors);

            removedIds.ForEach(x => groupClassAggregate.RemoveAnchor(x));
        }
Exemplo n.º 9
0
        private void RemoveMembers(GroupClassAggregate groupClassAggregate, List <string> currentIds, List <string> updateMembers)
        {
            List <string> removedIds = GetRemovedIds(currentIds, updateMembers);

            removedIds.ForEach(x => groupClassAggregate.RemoveParticipant(x));
        }
Exemplo n.º 10
0
        private async Task UpdateRoom(Command request, Model.Domain.GroupClass groupClass, GroupClassAggregate groupClassAggregate,
                                      CancellationToken cancellationToken)
        {
            if (request.RoomId != default && request.RoomId != groupClass.Room?.Id)
            {
                Room room = await _context.Rooms.Where(x => x.Id == request.RoomId.Value)
                            .FirstOrDefaultAsync(cancellationToken);

                groupClassAggregate.WithRoom(room);
            }
        }
Exemplo n.º 11
0
        private async Task UpdateGroupLevel(Command request, Model.Domain.GroupClass groupClass, GroupClassAggregate groupClassAggregate,
                                            CancellationToken cancellationToken)
        {
            if (request.GroupLevelId != default && request.GroupLevelId != groupClass.GroupLevel?.Id)
            {
                GroupLevel groupLevel = await _context.GroupLevel.Where(x => x.Id == request.GroupLevelId.Value)
                                        .FirstOrDefaultAsync(cancellationToken);

                groupClassAggregate.WithGroupLevel(groupLevel);
            }
        }