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); }
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); } }
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); } }
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); } }
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); }); }
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); }); } }
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()); }
private void RemoveAnchors(Command request, GroupClassAggregate groupClassAggregate, List <string> currentIds) { List <string> removedIds = GetRemovedIds(currentIds, request.Anchors); removedIds.ForEach(x => groupClassAggregate.RemoveAnchor(x)); }
private void RemoveMembers(GroupClassAggregate groupClassAggregate, List <string> currentIds, List <string> updateMembers) { List <string> removedIds = GetRemovedIds(currentIds, updateMembers); removedIds.ForEach(x => groupClassAggregate.RemoveParticipant(x)); }
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); } }
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); } }