private void AddUsersToTeam(UpdateApplicationUserCommand request, List <Guid> teamsToAdd) { foreach (var item in teamsToAdd) { var addInTeam = new UserDepartmentTeam { DeparmentTeamId = item, UserId = request.Id }; _context.UserDepartmentTeams.Add(addInTeam); } }
public async Task <Unit> Handle(AssignUserCommand request, CancellationToken cancellationToken) { var user = _userAccessor.GetUser(); var userId = Guid.Parse(user.FindFirst(ClaimTypes.NameIdentifier).Value); var entity = await _context.DepartmentTeams.FindAsync(request.DepartmentTeamId); if (entity == null) { throw new NotFoundException("Not exist an entity with this id", nameof(DepartmentTeam)); } // Update many to many UserDepartmentTeams var currentUsers = await _context.UserDepartmentTeams.Where(x => x.DeparmentTeamId == request.DepartmentTeamId) .Select(x => x.UserId).ToListAsync(cancellationToken); // If list of users is null, will remove all users form team. if (request.ApplicationUserIds == null || request.ApplicationUserIds.Count == 0) { foreach (var item in currentUsers) { var removeUser = await _context.UserDepartmentTeams.FirstAsync(x => x.DeparmentTeamId == request.DepartmentTeamId && x.UserId == item, cancellationToken); _context.UserDepartmentTeams.Remove(removeUser); } await _context.SaveChangesAsync(cancellationToken); return(Unit.Value); } // Sort users for adding in team and users for remove from team. var addUsers = request.ApplicationUserIds.Except(currentUsers).ToList(); var removeUsers = currentUsers.Except(request.ApplicationUserIds).ToList(); if (addUsers.Count != 0) { foreach (var item in addUsers) { var teamUser = new UserDepartmentTeam { DeparmentTeamId = request.DepartmentTeamId, UserId = item }; _context.UserDepartmentTeams.Add(teamUser); } } if (removeUsers.Count != 0) { foreach (var item in removeUsers) { var teamUser = _context.UserDepartmentTeams .First(x => x.DeparmentTeamId == request.DepartmentTeamId && x.UserId == item); if (teamUser != null) { _context.UserDepartmentTeams.Remove(teamUser); } } } _context.DepartmentTeams.Update(entity); await _context.SaveChangesAsync(cancellationToken); return(Unit.Value); }
public async Task <Unit> Handle(UpdateDepartmentTeamCommand request, CancellationToken cancellationToken) { var user = _userAccessor.GetUser(); var userId = Guid.Parse(user.FindFirst(ClaimTypes.NameIdentifier).Value); var departmentTeam = _context.DepartmentTeams.Find(request.Id); departmentTeam.Name = request.Name; departmentTeam.Abbreviation = request.Abbreviation; departmentTeam.Description = request.Description; departmentTeam.DepartmentId = request.DepartmentId; departmentTeam.DepartmentTeamLeadId = request.DepartmentTeamLeadId; departmentTeam.Department = await _context.Departments.FindAsync(departmentTeam.DepartmentId); if (request.Active) { departmentTeam.Activate(); } else { departmentTeam.Deactivate(); } _context.DepartmentTeams.Update(departmentTeam); List <Guid?> usersToAdd, usersToRemove; // Update members if (request.MembersIds != null) { var existingUsers = _context.UserDepartmentTeams.Where(x => x.DeparmentTeamId == request.Id).ToList(); usersToAdd = request.MembersIds.Except(existingUsers.Select(x => (Guid?)x.UserId)).ToList(); usersToRemove = existingUsers.Select(x => (Guid?)x.UserId).Except(request.MembersIds).ToList(); // Remove Users from team if (usersToRemove.Count != 0) { foreach (var item in usersToRemove) { var removeFromTeam = _context.UserDepartmentTeams.First(d => d.DeparmentTeamId == request.Id && d.UserId == item.Value); if (removeFromTeam != null) { _context.UserDepartmentTeams.Remove(removeFromTeam); } } } // Add Users in team if (usersToAdd.Count != 0) { foreach (var item in usersToAdd) { var addInTeam = new UserDepartmentTeam() { DeparmentTeamId = departmentTeam.Id, UserId = item.Value }; _context.UserDepartmentTeams.Add(addInTeam); } } } if (request.JobPositionIds != null) { // Remove jobs var oldJobsList = _context.JobDepartmentTeams.Where(x => x.DepartmentTeamId == request.Id).ToList(); _context.JobDepartmentTeams.RemoveRange(oldJobsList); // Insert users foreach (var item in request.JobPositionIds) { var jobs = new JobDepartmentTeam { DepartmentTeamId = departmentTeam.Id, JobPositionId = item.Value }; _context.JobDepartmentTeams.Add(jobs); } } await _context.SaveChangesAsync(cancellationToken); // Notifications // ------------- var members = _context.UserDepartmentTeams.Where(x => x.DeparmentTeamId == request.Id) .Select(x => x.User.Email).ToList(); var notification = new DepartmentTeamUpdated() { PrimaryEntityName = departmentTeam.Name, PrimaryEntityId = departmentTeam.Id, GroupEntityName = departmentTeam.Department.Name, GroupEntityId = departmentTeam.Department.Id, UserName = user.Identity.Name }; if (members.Any()) { notification.Recipients = members; } await _mediator.Publish(notification, cancellationToken); return(Unit.Value); }
public async Task <Unit> Handle(CreateApplicationUserCommand request, CancellationToken cancellationToken) { var user = new ApplicationUser { Id = Guid.NewGuid(), FirstName = request.FirstName, LastName = request.LastName, Email = request.Email, UserName = request.Email, EmploymentType = request.EmploymentType, JobPositionId = request.JobPositionId, PhoneNumber = request.PhoneNumber, CreatedTime = DateTime.Now, ModifiedTime = DateTime.Now }; IdentityResult result = await _userManager.CreateAsync(user, "@userPass1"); if (result.Succeeded) { try { if (request.DepartmentTeamId != Guid.Empty) { var userTeam = new UserDepartmentTeam { DeparmentTeamId = request.DepartmentTeamId, UserId = user.Id }; _context.UserDepartmentTeams.Add(userTeam); await _context.SaveChangesAsync(cancellationToken); } if (request.RoleNames != null) { await _userManager.AddToRolesAsync(user, request.RoleNames); } if (request.Projects != null && request.Projects.Any()) { var projectMembers = request.Projects.Select(projectId => new ProjectMember { ProjectId = projectId, UserId = user.Id }); await _context.ProjectMembers.AddRangeAsync(projectMembers, cancellationToken); await _context.SaveChangesAsync(cancellationToken); } } catch (Exception e) { throw new Exception($"SaveChanges threw {e.GetType().Name}: {(e is DbUpdateException ? e.InnerException?.Message : e.Message)}"); } } else { foreach (IdentityError e in result.Errors) { throw new Exception($"IdentityError threw {e.GetType().Name}: {e.Description}"); } } return(Unit.Value); }
public async Task <Unit> Handle(CreateDepartmentTeamCommand request, CancellationToken cancellationToken) { var user = _userAccessor.GetUser(); var userId = Guid.Parse(user.FindFirst(ClaimTypes.NameIdentifier).Value); var departmentTeam = new DepartmentTeam { Name = request.Name, Abbreviation = request.Abbreviation, DepartmentId = request.DepartmentId, DepartmentTeamLeadId = request.DepartmentTeamLeadId, Description = request.Description }; departmentTeam.CreateEnd(Guid.NewGuid(), request.Name, userId); if (departmentTeam.DepartmentId != null) { departmentTeam.Department = await _context.Departments.FindAsync(departmentTeam.DepartmentId); } if (request.Active) { departmentTeam.Activate(); } else { departmentTeam.Deactivate(); } await _context.DepartmentTeams.AddAsync(departmentTeam, cancellationToken); await _context.SaveChangesAsync(cancellationToken); if (request.JobPositions != null) { var jobsList = new List <JobDepartmentTeam>(); foreach (var item in request.JobPositions) { var jobs = new JobDepartmentTeam { DepartmentTeamId = departmentTeam.Id, JobPositionId = item.Value }; jobsList.Add(jobs); } await _context.JobDepartmentTeams.AddRangeAsync(jobsList, cancellationToken); } var userList = new List <UserDepartmentTeam>(); if (request.Members != null) { foreach (var item in request.Members) { if (item == null) { continue; } var members = new UserDepartmentTeam { DeparmentTeamId = departmentTeam.Id, UserId = item.Value }; userList.Add(members); } } if (request.DepartmentTeamLeadId != null) { var checkLead = userList.FirstOrDefault(x => x.UserId == request.DepartmentTeamLeadId); if (checkLead == null) { var memberTeam = new UserDepartmentTeam { UserId = request.DepartmentTeamLeadId.Value, DeparmentTeamId = departmentTeam.Id }; userList.Add(memberTeam); } } _context.UserDepartmentTeams.AddRange(userList); await _context.SaveChangesAsync(cancellationToken); // Notifications // -------------- var notification = new DepartmentTeamCreated() { PrimaryEntityName = departmentTeam.Name, PrimaryEntityId = departmentTeam.Id, GroupEntityName = departmentTeam.Department != null ? departmentTeam.Department.Name : "No Department", GroupEntityId = departmentTeam.DepartmentId ?? Guid.NewGuid(), UserName = user.Identity.Name }; if (userList.Any()) { notification.Recipients = userList.Select(x => x.User.Email).ToList(); } await _mediator.Publish(notification, cancellationToken); return(Unit.Value); }