public async Task <CreateEmployeeOperationResponse> Execute(CreateEmployeeOperationRequest request) { var identity = new IdentityUser { Email = request.Email, PasswordHash = Sha256Hash.Calculate(request.Password) }; if (request.ManagerEmail == null) { var topLevelManager = await _employeeRepository.GetTopLevelManagerAsync(); if (topLevelManager != null) { return(new CreateEmployeeOperationResponse()); } } return(await(request.ManagerEmail == null ? CreateTopLevelManager(identity, request) : CreateEmployee(identity, request))); }
public async Task <IActionResult> CreateAdmin() { var request = new CreateEmployeeOperationRequest { Email = "*****@*****.**", Password = "******", ManagerEmail = null, FirstName = "Alan", LastName = "Turing", ImageData = "" }; try { await _createEmployeeOperation.Execute(request); } catch { return(Conflict(new { Error = "Admin already created" })); } return(Ok()); }
private async Task <CreateEmployeeOperationResponse> CreateTopLevelManager(IdentityUser identityUser, CreateEmployeeOperationRequest request) { try { var employee = new Domain.Entity.LearningCalendar.Employee { Identity = identityUser, Limit = new Domain.Entity.LearningCalendar.Limit(), FirstName = request.FirstName, LastName = request.LastName, Image = new Image { Value = request.ImageData }, Role = new Role { Title = Constants.Employee.TopLevelManagerRole } }; await _employeeRepository.CreateAsync(employee); } catch (DbUpdateException) { throw new EmailAlreadyUseException(); } return(new CreateEmployeeOperationResponse()); }
private async Task <CreateEmployeeOperationResponse> CreateEmployee(IdentityUser identityUser, CreateEmployeeOperationRequest request) { var roleTask = _roleRepository .QuerySingleOrDefaultAsync(role => role.Title == request.Role); var managerId = (await _employeeRepository.GetByEmailAsync(request.ManagerEmail)).Id; var getTeamResponse = await _ensureManagerHasTeamOperation.Execute(new EnsureManagerHasTeamRequest { ManagerId = managerId }); Role role = await roleTask; var employee = new Domain.Entity.LearningCalendar.Employee { Identity = identityUser, Team = new Domain.Entity.LearningCalendar.Team { Id = getTeamResponse.TeamId }, FirstName = request.FirstName, LastName = request.LastName, Image = new Image { Value = request.ImageData }, Role = role ?? new Role { Title = request.Role } }; var limit = await _limitRepository.GetGlobalAsync(); limit.Employees.Add(employee); try { await _limitRepository.UpdateAsync(limit); } catch (DbUpdateException) { throw new EmailAlreadyUseException(); } return(new CreateEmployeeOperationResponse()); }