Exemplo n.º 1
0
        private async Task <EmployeeCreateResult> Create(EmployeeCreateParameters parameters)
        {
            var validationResult = await Validate(0, parameters);

            var department = await _dbContext.Departments.Include(e => e.Manager)
                             .FirstOrDefaultAsync(d => d.Id == parameters.DepartmentId);

            if (validationResult != EmployeeValidationStatus.Success)
            {
                return(new EmployeeCreateResult
                {
                    Status = validationResult
                });
            }
            var result = await _dbContext.Employees.AddAsync(new Employee()
            {
                Name        = parameters.Name,
                PhoneNumber = parameters.PhoneNumber,
                Email       = parameters.Email,
                Password    = parameters.Password,
                JobTitle    = parameters.JobTitle,
                Department  = department,
            });

            await _dbContext.SaveChangesAsync();

            var employee = result.Entity;

            if (department == null)
            {
                return(new EmployeeCreateResult(EmployeeValidationStatus.Success)
                {
                    Data = new EmployeeViewResult
                    {
                        Id = employee.Id,
                        Name = employee.Name,
                        PhoneNumber = parameters.PhoneNumber,
                        Email = parameters.Email,
                        JobTitle = parameters.JobTitle,
                    }
                });
            }
            else
            {
                return(new EmployeeCreateResult(EmployeeValidationStatus.Success)
                {
                    Data = new EmployeeViewResult
                    {
                        Id = employee.Id,
                        Name = employee.Name,
                        PhoneNumber = parameters.PhoneNumber,
                        Email = parameters.Email,
                        JobTitle = parameters.JobTitle,
                        DepartmentName = department?.Name,
                        ManagerName = department.Manager?.Name
                    }
                });
            }
        }
Exemplo n.º 2
0
        private async Task <EmployeeValidationStatus> Validate(int id, EmployeeCreateParameters parameters)
        {
            var findEmail = await _dbContext.Employees.AnyAsync(e => (id == 0 || e.Id != id) && e.Email.ToLower().Equals(parameters.Email.ToLower()));

            if (findEmail)
            {
                return(EmployeeValidationStatus.EmailAlreadyExists);
            }
            else
            {
                return(EmployeeValidationStatus.Success);
            }
        }
Exemplo n.º 3
0
 public async Task <EmployeeUpdateResult> Put(int id, EmployeeCreateParameters parameters)//change parameters type
 {
     return(await _employeeService.Update(id, parameters));
 }
Exemplo n.º 4
0
 public async Task <EmployeeCreateResult> Post(EmployeeCreateParameters parameters)
 {
     return(await _employeeService.Register(parameters));
 }
Exemplo n.º 5
0
 public async Task <EmployeeCreateResult> Register(EmployeeCreateParameters parameters)
 {
     parameters.Password = _protectionService.ComputeHash(parameters.Password);
     return(await Create(parameters));
 }
Exemplo n.º 6
0
        public async Task <EmployeeUpdateResult> Update(int id, EmployeeCreateParameters parameters)
        {
            var validationResult = await Validate(id, parameters);

            if (validationResult != EmployeeValidationStatus.Success)
            {
                return(new EmployeeUpdateResult
                {
                    Status = validationResult
                });
            }
            var employee = await _dbContext.Employees
                           .Include(d => d.Department)
                           .Include(d => d.Department.Manager)
                           .FirstOrDefaultAsync(e => e.Id == id);

            var department = await _dbContext.Departments.Include(d => d.Manager).FirstOrDefaultAsync(d => d.Id == parameters.DepartmentId);

            if (department == null)
            {
                employee.Name        = parameters.Name;
                employee.PhoneNumber = parameters.PhoneNumber;
                employee.Email       = parameters.Email;
                employee.Password    = parameters.Password;
                employee.JobTitle    = parameters.JobTitle;

                await _dbContext.SaveChangesAsync();

                return(new EmployeeUpdateResult
                {
                    Status = EmployeeValidationStatus.Success,
                    Data = new EmployeeViewResult
                    {
                        Id = employee.Id,
                        Name = employee.Name,
                        PhoneNumber = employee.PhoneNumber,
                        Email = employee.Email,
                        JobTitle = employee.JobTitle,
                        DepartmentName = employee.Department?.Name,
                        ManagerName = employee.Department?.Manager?.Name
                    }
                });
            }
            else
            {
                employee.Name        = parameters.Name;
                employee.PhoneNumber = parameters.PhoneNumber;
                employee.Email       = parameters.Email;
                employee.Password    = parameters.Password;
                employee.JobTitle    = parameters.JobTitle;
                employee.Department  = department;

                await _dbContext.SaveChangesAsync();

                return(new EmployeeUpdateResult
                {
                    Status = EmployeeValidationStatus.Success,
                    Data = new EmployeeViewResult
                    {
                        Id = employee.Id,
                        Name = employee.Name,
                        PhoneNumber = employee.PhoneNumber,
                        Email = employee.Email,
                        JobTitle = employee.JobTitle,
                        DepartmentName = department.Name,
                        ManagerName = department.Manager?.Name
                    }
                });
            }
        }