Пример #1
0
        public async Task <IActionResult> UpdateEmployeeForCompany(Guid companyId,
                                                                   Guid employeeId,
                                                                   EmployeeUpdateDto employeeUpdateDto)
        {
            if (!await _companyRepository.CompanyExistsAsync(companyId))
            {
                return(NotFound());
            }

            var employeeEntity = await _companyRepository.GetEmployeeAsync(companyId, employeeId);

            if (employeeEntity == null)
            {
                //不允许客户端生成 Guid
                //return NotFound();

                //允许客户端生成 Guid
                var employeeToAddEntity = _mapper.Map <Employee>(employeeUpdateDto);
                employeeToAddEntity.Id = employeeId;
                _companyRepository.AddEmployee(companyId, employeeToAddEntity);
                await _companyRepository.SaveAsync();

                var returnDto = _mapper.Map <EmployeeDto>(employeeToAddEntity);
                return(CreatedAtAction(nameof(GetEmployeeForCompany),
                                       new { companyId = companyId, employeeId = employeeId },
                                       returnDto));
            }

            //把 updateDto 映射到 entity
            _mapper.Map(employeeUpdateDto, employeeEntity);
            _companyRepository.UpdateEmployee(employeeEntity);
            await _companyRepository.SaveAsync();

            return(NoContent()); //返回状态码204
        }
Пример #2
0
        public async Task <ActionResult> Put([FromQuery] Guid id, [FromBody] EmployeeUpdateDto value)
        {
            if (id == Guid.Empty)
            {
                return(BadRequest($"Invalid {nameof(Employee)} Id"));
            }
            var obj = await _ctx.Employees
                      .Include(t => t.EmployeeCertifications)
                      .Include(t => t.EmployeeCompetencies)
                      .Include(t => t.EmployeeHealthItems)
                      .FirstOrDefaultAsync(t => t.Id == id);

            if (null == obj)
            {
                return(NotFound($"{nameof(Employee)} Not Found"));
            }
            obj.UpdateFromDto(value);
            ContextCollectionSyncer.SyncCollections(_ctx, value.EmployeeCompetencies, obj.EmployeeCompetencies);
            ContextCollectionSyncer.SyncCollections(_ctx, value.EmployeeCertifications, obj.EmployeeCertifications);
            ContextCollectionSyncer.SyncCollections(_ctx, value.EmployeeHealthItems, obj.EmployeeHealthItems);
            if (0 < await _ctx.SaveChangesAsync())
            {
                await _updatedPublisher.PublishAsync(obj);
            }
            return(Ok(obj));
        }
Пример #3
0
        public ActionResult UpdateEmployee(int id, EmployeeUpdateDto employeeUpdateDto)
        {
            // Call GET-employee by ID to return the requested resource from the repository
            var employeeModelFromRepo = _repository.GetEmployeeById(id);

            if (employeeModelFromRepo == null)
            {
                return(NotFound());
            }

            // Take data from employee update DTO, that has been supplied by a client then apply it on top of the employee model
            // USES: EmployeeProfile.cs

            // Uses existing sources, EmployeeUpdateDto (which we map data from) and we want to map to our employee model from the repository
            _mapper.Map(employeeUpdateDto, employeeModelFromRepo);


            // Not necessary, but good practice
            _repository.UpdateEmployee(employeeModelFromRepo);

            // Flushes the changes that has been done back to the database
            _repository.SaveChanges();

            return(NoContent());
        }
Пример #4
0
        public async Task <ActionResult <EmployeeDto> > UpdateEmployeeForCompany(
            Guid companyId,
            Guid employeeId,
            EmployeeUpdateDto employee)
        {
            if (!await companyRepository.Where(t => t.Id.Equals(companyId)).AnyAsync())
            {
                return(NotFound());
            }

            var entity = await employeeRepository.Where(t => t.Id.Equals(employeeId)).ToOneAsync();

            // 若不存在,则创建
            if (entity is null)
            {
                entity    = mapper.Map <Employee>(employee);
                entity.Id = employeeId;
                var result = await employeeRepository.AddEmployeeAsync(companyId, entity);

                var resultDto = mapper.Map <EmployeeDto>(result);

                return(CreatedAtRoute(nameof(GetEmployeeForCompany),
                                      new { companyId, employeeId = resultDto.Id },
                                      resultDto));
            }

            mapper.Map(employee, entity);

            await employeeRepository.UpdateAsync(entity);

            return(NoContent());
        }
Пример #5
0
        public async Task <ActionResult <EmployeeDto> > UpdateEmployeeForCompany(Guid companyId, Guid employeeId,
                                                                                 EmployeeUpdateDto employee)
        {
            if (!await _companyRepository.CompanyExistsAsync(companyId))
            {
                return(NotFound());
            }

            var employeeEntity = await _companyRepository.GetEmployeeAsync(companyId, employeeId);

            if (employeeEntity == null)
            {
                //如果没有查找到直接创建
                var employeeToAddEntity = _mapper.Map <Employee>(employee);
                employeeToAddEntity.Id = employeeId;
                _companyRepository.AddEmployee(companyId, employeeToAddEntity);
                await _companyRepository.SaveAsync();

                var returnDto = _mapper.Map <EmployeeDto>(employeeToAddEntity);
                return(CreatedAtRoute(nameof(GetEmployeeForCompany), new { companyId = companyId, employeeId = returnDto.Id },
                                      returnDto));
            }

            //entity转化为updateDto
            //把传过来employee的值更新到updatedto
            //吧updateDto影射回entity

            _mapper.Map(employee, employeeEntity);

            _companyRepository.UpdateEmployee(employeeEntity);

            await _companyRepository.SaveAsync();

            return(NoContent());
        }
        public async Task <ActionResult <EmployeeDto> > UpdateEmployee(Guid companyId, Guid employeeId
                                                                       , EmployeeUpdateDto employeeUpdate)
        {
            if (!await _service.CompanyExistsAsync(companyId))
            {
                return(NotFound());
            }

            var employee = await _service.GetEmployeeAsync(companyId, employeeId);

            if (employee == null)
            {
                var res = EmployeeProfile.InitializeAutoMapper().Map <Employee>(employeeUpdate);

                res.Id = employeeId;

                _service.AddEmployee(companyId, res);

                await _service.SaveAsync();

                var employeeDto = EmployeeProfile.InitializeAutoMapper().Map <EmployeeDto>(res);

                return(CreatedAtRoute(nameof(GetEmployeeForCompany),
                                      new { companyId, employeeId = res.Id }, employeeDto));
            }

            EmployeeProfile.InitializeAutoMapper().Map(employeeUpdate, employee);

            await _service.SaveAsync();

            return(NoContent());
        }
Пример #7
0
        public async Task <ActionResult> UpdatedUserInfo(string username, EmployeeUpdateDto employeeUpdateDto)
        {
            var user = await _userManager.FindByNameAsync(username);

            if (user == null)
            {
                return(NotFound("Could not find user"));
            }

            if (User.GetUsername() != username.ToLower())
            {
                var userRoles = await _userManager.GetRolesAsync(user);

                if (userRoles.Contains("Admin"))
                {
                    return(StatusCode((int)HttpStatusCode.Forbidden, "You cannot update another admin's profile"));
                }
                if (userRoles.Contains("Manager") && !(User.IsInRole("Admin")))
                {
                    return(StatusCode((int)HttpStatusCode.Forbidden, "You cannot update another manager's profile"));
                }
            }

            _mapper.Map(employeeUpdateDto, user);

            var result = await _userManager.UpdateAsync(user);

            if (result.Succeeded)
            {
                return(NoContent());
            }

            return(BadRequest("Failed to update user"));
        }
        public async Task <ActionResult <CompanyDto> > UpdateEmployeeForCompany(
            [FromRoute] Guid companyId,
            [FromRoute] Guid employeeId,
            [FromBody] EmployeeUpdateDto employeeUpdateDto
            )
        {
            if (!await _companyRepository.CompanyExistAsync(companyId))
            {
                return(NotFound());
            }

            var employeeEtity = await _companyRepository.GetEmployeeAsync(employeeId, companyId);

            if (employeeEtity == null)
            {
                var employee = _mapper.Map <Employee>(employeeUpdateDto);
                employee.Id = employeeId;
                _companyRepository.AddEmployee(companyId, employee);
                await _companyRepository.SaveAsync();

                var dtoToReturn = _mapper.Map <EmployeeDto>(employee);
                return(CreatedAtRoute(nameof(GetEmployee), new { companyId = companyId, employeeId = employeeId }, dtoToReturn));
            }

            _mapper.Map(employeeUpdateDto, employeeEtity);
            _companyRepository.UpdateEmployee(employeeEtity);
            await _companyRepository.SaveAsync();

            return(NoContent());
        }
Пример #9
0
        public async Task <ActionResult <EmployeeDto> > UpdateEmployeeForCompany(Guid companyId, Guid employeeId,
                                                                                 EmployeeUpdateDto employee)
        {
            if (!await _companyRepository.CompanyExistsAsync(companyId))
            {
                return(NotFound());
            }

            var employeeEntity = await _companyRepository.GetEmployeeAsync(companyId, employeeId);

            if (employeeEntity == null)
            {
                var employeeToAddEntity = _mapper.Map <Employee>(employee);
                employeeToAddEntity.Id = employeeId;
                _companyRepository.AddEmployee(companyId, employeeToAddEntity);
                await _companyRepository.SaveAsync();

                var dtoToReturn = _mapper.Map <EmployeeDto>(employeeToAddEntity);
                return(CreatedAtRoute(nameof(GetEmployeeForCompany),
                                      new { companyId, employeeId = dtoToReturn.Id }, dtoToReturn));
            }
            //需要整体更新的是资源,不是Entity
            //1.entity 转化为updateDto
            //2.把传进来的employee的值更新到updateDto
            //3.把updateDto映射回entity

            _mapper.Map(employee, employeeEntity);
            _companyRepository.UpdateEmployee(employeeEntity); //值都是跟踪的
            await _companyRepository.SaveAsync();

            return(NoContent());//需要更新后的资源返回Ok,不需要就204
        }
        public HttpResponseMessage UpdateEmployee([FromBody] EmployeeUpdateDto employeeUpdateDto)
        {
            try
            {
                // check the valdation of the date
                if (employeeUpdateDto.EmployeeBirthdate >= DateTime.Today)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest, "Birthday less than today"));
                }
                // check the model state
                if (!ModelState.IsValid)
                {
                    return(Request.CreateResponse(HttpStatusCode.BadRequest));
                }

                using (var ctx = new ClientContext(webUrl))
                {
                    //get user from token
                    var claims = (ClaimsIdentity)ClaimsPrincipal.Current.Identity;
                    //check user permission on the Item
                    ClientResult <BasePermissions> permissions = ctx.Web.Lists.GetByTitle(listTitle).GetItemById(employeeUpdateDto.ID).GetUserEffectivePermissions(claims.Name);
                    ctx.ExecuteQuery();
                    Boolean hasPermission = permissions.Value.Has(PermissionKind.AddListItems);
                    if (!hasPermission)
                    {
                        return(Request.CreateResponse(HttpStatusCode.Unauthorized, "you're not allow to update employee"));
                    }

                    //Get Item
                    ListItem oListItem = ctx.Web.Lists.GetByTitle(listTitle).GetItemById(employeeUpdateDto.ID);

                    foreach (var property in typeof(EmployeeUpdateDto).GetProperties())
                    {
                        if (property.Name != "ID" & property.Name != "ProfileURL" & property.Name != "Description" & property.GetValue(employeeUpdateDto) != null)
                        {
                            oListItem[property.Name] = property.GetValue(employeeUpdateDto);
                        }
                    }
                    if (!String.IsNullOrWhiteSpace(employeeUpdateDto.ProfileURL))
                    {
                        FieldUrlValue fieldUrl = new FieldUrlValue();
                        fieldUrl.Url = employeeUpdateDto.ProfileURL;
                        if (!String.IsNullOrWhiteSpace(employeeUpdateDto.Description))
                        {
                            fieldUrl.Description = employeeUpdateDto.Description;
                        }
                        oListItem["ProfileURL"] = fieldUrl;
                    }
                    oListItem.Update();
                    ctx.ExecuteQuery();
                    return(Request.CreateResponse(HttpStatusCode.OK));
                }
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex.Message));
            }
        }
Пример #11
0
        public async Task <IActionResult> PartiallyUpdateEmployeeForCompany(
            Guid companyId,
            Guid employeeId,
            JsonPatchDocument <EmployeeUpdateDto> patchDocument)
        {
            //判断该公司是否存在
            if (!await _companyRepository.CompanyExistsAsync(companyId))
            {
                return(NotFound());
            }

            var employeeEntity = await _companyRepository.GetEmployeeAsync(companyId, employeeId);

            //该公司没有这个员工
            if (employeeEntity == null)
            {
                var employeeDto = new EmployeeUpdateDto();
                patchDocument.ApplyTo(employeeDto, ModelState);

                if (!TryValidateModel(employeeDto))
                {
                    return(ValidationProblem(ModelState));
                }

                var employeeToAdd = _mapper.Map <Employee>(employeeDto);
                employeeToAdd.Id = employeeId;

                _companyRepository.AddEmployee(companyId, employeeToAdd);
                await _companyRepository.SaveAsync();

                var dtoToReturn = _mapper.Map <EmployeeDto>(employeeToAdd);

                return(CreatedAtRoute(nameof(GetEmployeeForCompany), new
                {
                    companyId,
                    employeeId = dtoToReturn.Id
                }, dtoToReturn));
            }

            var dtoToPatch = _mapper.Map <EmployeeUpdateDto>(employeeEntity);

            //需要处理验证错误
            patchDocument.ApplyTo(dtoToPatch);

            if (!TryValidateModel(dtoToPatch))
            {
                return(UnprocessableEntity(ModelState));
            }

            _mapper.Map(dtoToPatch, employeeEntity);

            _companyRepository.UpdateEmployee(employeeEntity);

            await _companyRepository.SaveAsync();

            return(NoContent());
        }
Пример #12
0
        public async Task <IActionResult> PartiallyUpdateEmployeeForCompany(
            Guid companyId,
            Guid employeeId,
            JsonPatchDocument <EmployeeUpdateDto> patchDocument)
        {
            if (!await _companyRepository.CompanyExistsAsync(companyId))
            {
                return(NotFound());
            }

            var employeeEntity = await _companyRepository.GetEmployeeAsync(companyId, employeeId);

            //patch新增
            if (employeeEntity == null)
            {
                //不允许客户端生成 Guid
                //return NotFound();

                //允许客户端生成 Guid
                var employeeDto = new EmployeeUpdateDto();
                //传入 ModelState 进行验证
                patchDocument.ApplyTo(employeeDto, ModelState);
                if (!TryValidateModel(employeeDto))
                {
                    return(ValidationProblem(ModelState));
                }

                var employeeToAdd = _mapper.Map <Employee>(employeeDto);
                employeeToAdd.Id = employeeId;
                _companyRepository.AddEmployee(companyId, employeeToAdd);
                await _companyRepository.SaveAsync();

                var dtoToReturn = _mapper.Map <Employee>(employeeToAdd);

                return(CreatedAtAction(nameof(GetEmployeeForCompany),
                                       new { companyId = companyId, employeeId = employeeId },
                                       dtoToReturn));
            }

            var dtoToPatch = _mapper.Map <EmployeeUpdateDto>(employeeEntity);

            //将 Patch 应用到 dtoToPatch(EmployeeUpdateDto)
            patchDocument.ApplyTo(dtoToPatch);
            //验证模型
            if (!TryValidateModel(dtoToPatch))
            {
                return(ValidationProblem(ModelState)); //返回状态码与错误信息
                //return new UnprocessableEntityObjectResult(ModelState);
            }
            _mapper.Map(dtoToPatch, employeeEntity);
            _companyRepository.UpdateEmployee(employeeEntity);
            await _companyRepository.SaveAsync();

            return(NoContent()); //返回状态码204
        }
Пример #13
0
        public ActionResult UpdateCommand(int id, EmployeeUpdateDto employeeUpdateDto)
        {
            var employeeModelFromRepo = _repository.GetEmployeeById(id);

            if (employeeModelFromRepo == null)
            {
                return(NotFound());
            }
            _mapper.Map(employeeUpdateDto, employeeModelFromRepo);
            _repository.UpdateEmployee(employeeModelFromRepo);
            _repository.SaveChanges();
            return(NoContent());
        }
        public async Task <ActionResult> PartiallyUpdateEmployee(Guid companyId, Guid employeeId,
                                                                 JsonPatchDocument <EmployeeUpdateDto> patchDocument)
        {
            if (!await _service.CompanyExistsAsync(companyId))
            {
                return(NotFound());
            }

            var employee = await _service.GetEmployeeAsync(companyId, employeeId);

            if (employee == null)
            {
                var emp = new EmployeeUpdateDto();
                patchDocument.ApplyTo(emp, ModelState);

                if (!TryValidateModel(emp))
                {
                    return(ValidationProblem(ModelState));
                }

                var tem = EmployeeProfile.InitializeAutoMapper().Map <Employee>(emp);

                tem.Id = employeeId;

                _service.AddEmployee(companyId, tem);

                await _service.SaveAsync();

                var returnDto = EmployeeProfile.InitializeAutoMapper().Map <EmployeeDto>(tem);

                return(CreatedAtRoute(nameof(GetEmployeeForCompany)
                                      , new { companyId, employeeId }, returnDto));
            }

            var employeeDto = EmployeeProfile.InitializeAutoMapper().Map <EmployeeUpdateDto>(employee);

            //patch数据映射
            patchDocument.ApplyTo(employeeDto, ModelState);

            //如果不符合数据约束
            if (!TryValidateModel(employeeDto))
            {
                return(ValidationProblem(ModelState));//返回422数据错误
            }

            EmployeeProfile.InitializeAutoMapper().Map(employeeDto, employee);

            await _service.SaveAsync();

            return(NoContent());
        }
        public ActionResult UpdateEmployee(int id, EmployeeUpdateDto employeeUpdateDto)
        {
            var employeeModelFromRepo = _repository.GetEmployeeById(id);

            if (employeeModelFromRepo == null)
            {
                return(NotFound(new { message = "Employee not found!", error = true }));
            }
            _mapper.Map(employeeUpdateDto, employeeModelFromRepo);
            _repository.UpdateEmployee(employeeModelFromRepo);
            _repository.SaveChanges();

            return(NoContent());
        }
Пример #16
0
        public virtual async Task <EmployeeListDto> UpdateAsync(Guid id, EmployeeUpdateDto input)
        {
            if (await _employeeRepository.AnyAsync(e => e.PhoneNumber == input.PhoneNumber && e.Id != id))
            {
                throw new UserFriendlyException(L["Existed", L["Employee"]]);
            }
            Employee entity = await _employeeRepository.GetAsync(id);

            entity     = ObjectMapper.Map(input, entity);
            entity.Age = input.Birthday.GetAgeByBirthday();
            entity     = await _employeeRepository.UpdateAsync(entity);

            return(ObjectMapper.Map <Employee, EmployeeListDto>(entity));
        }
Пример #17
0
        public async Task <ActionResult> UpdateUser(EmployeeUpdateDto memberUpdateDto)
        {
            var user = await _userRepository.GetUserByUsernameAsync(User.GetUsername());

            _mapper.Map(memberUpdateDto, user);
            _userRepository.Update(user);

            if (await _userRepository.SaveAllAsync())
            {
                return(NoContent());
            }

            return(BadRequest("Failed to update user"));
        }
Пример #18
0
        public async Task <ActionResult> UpdateEmployee(int id, EmployeeUpdateDto emp)
        {
            var empl = await _repository.GetEmployeeById(id);

            if (empl == null)
            {
                return(NotFound());
            }

            _mapper.Map(emp, empl);
            _repository.UpdateEmployee(empl);
            _repository.SaveChanges();
            return(NoContent());
        }
Пример #19
0
        public async Task <IActionResult> PartiallyUpdateEmployeeForCompany(
            Guid companyId,
            Guid employeeId,
            JsonPatchDocument <EmployeeUpdateDto> patchDocument)
        {
            if (!await companyRepository.Where(t => t.Id.Equals(companyId)).AnyAsync())
            {
                return(NotFound());
            }

            var entity = await employeeRepository.Where(t => t.Id.Equals(employeeId)).ToOneAsync();

            // 若不存在,则创建
            if (entity is null)
            {
                var employeeDto = new EmployeeUpdateDto();
                patchDocument.ApplyTo(employeeDto, ModelState);

                if (!TryValidateModel(employeeDto))
                {
                    return(ValidationProblem(ModelState));
                }

                var employeeToAdd = mapper.Map <Employee>(entity);
                employeeToAdd.Id = employeeId;

                var result = await employeeRepository.AddEmployeeAsync(companyId, employeeToAdd);

                var resultDto = mapper.Map <EmployeeDto>(result);

                return(CreatedAtRoute(nameof(GetEmployeeForCompany),
                                      new { companyId, employeeId = resultDto.Id },
                                      resultDto));
            }

            var dtoToPatch = mapper.Map <EmployeeUpdateDto>(entity);

            patchDocument.ApplyTo(dtoToPatch, ModelState);

            if (!TryValidateModel(dtoToPatch))
            {
                return(ValidationProblem(ModelState));
            }

            mapper.Map(dtoToPatch, entity);

            await employeeRepository.UpdateAsync(entity);

            return(NoContent());
        }
        public async Task <ActionResult> UpdateEmployee(int id, EmployeeUpdateDto employeeUpdateDto)
        {
            var employeeModelFromRepo = await _repository.GetByIdAsync(id);

            if (employeeModelFromRepo == null)
            {
                return(NotFound());
            }

            _mapper.Map(employeeUpdateDto, employeeModelFromRepo);

            await _repository.UpdateAsync(employeeModelFromRepo);

            return(NoContent());
        }
Пример #21
0
        public IActionResult UpdateEmployee(int employeeId, [FromBody] EmployeeUpdateDto employeeDto)
        {
            if (employeeDto == null || employeeId != employeeDto.Id)
            {
                return(BadRequest(ModelState));
            }

            var employeeObj = _mapper.Map <Employee>(employeeDto);

            if (!_employeeRepo.UpdateEmployee(employeeObj))
            {
                ModelState.AddModelError("", $"Something went wrong when updating the record {employeeObj.Name}");
                return(StatusCode(500, ModelState));
            }

            return(NoContent());
        }
Пример #22
0
        public async Task <IActionResult> UpdateEmployee(int id, EmployeeUpdateDto employeeUpdateDto)
        {
            var employee = await _unitOfWork.Employees.GetByIdAsync(id);

            if (employee == null)
            {
                return(NotFound());
            }

            _mapper.Map(employeeUpdateDto, employee);

            if (await _unitOfWork.SaveAsync())
            {
                return(NoContent());
            }

            throw new Exception($"Updating user {id} failed on save");
        }
        public async Task CanUpdateEmployee()
        {
            // Get first employee
            /* Create Employee */
            var newEmployee = new EmployeeUpdateDto()
            {
                EmployeeId = 1,
                FirstName  = "Johnny",
                LastName   = "Holt",
                BirthDate  = new DateTime(1995, 8, 7)
            };

            // Update employee
            var updatedEmployee = await _httpClientHelper.PutAsync <EmployeeUpdateDto, EmployeeDto>(_baseUrl + "update", newEmployee).ConfigureAwait(false);

            // First name should be a new one
            Assert.Equal("Johnny", updatedEmployee.FirstName);
        }
Пример #24
0
        public async Task <ActionResult <EmployeeDto> > PartiallyUpdateEmployeeForCompany(Guid companyId, Guid employeeId, JsonPatchDocument <EmployeeUpdateDto> patchDocument)
        {
            if (!await this.companyRespository.CompanyExistsAsync(companyId))
            {
                return(NotFound());
            }
            var employeeEntity = await this.companyRespository.GetEmployeeAsync(companyId, employeeId);

            if (employeeEntity == null)
            {
                var employeeDto = new EmployeeUpdateDto();
                patchDocument.ApplyTo(employeeDto, ModelState);
                if (!TryValidateModel(employeeDto))
                {
                    return(ValidationProblem(ModelState));
                }
                else
                {
                    var employeeToAdd = this.mapper.Map <Employee>(employeeDto);
                    employeeToAdd.Id = employeeId;
                    this.companyRespository.AddEmployee(companyId, employeeToAdd);
                    await this.companyRespository.SaveAsync();

                    var dto = this.mapper.Map <EmployeeDto>(employeeToAdd);
                    return(CreatedAtRoute(nameof(GetEmployeeForCompany),
                                          new { companyId = companyId, employeeId = dto.Id }, dto));
                }
            }
            var dtoToPatch = this.mapper.Map <EmployeeUpdateDto>(employeeEntity);

            patchDocument.ApplyTo(dtoToPatch, ModelState);

            if (!TryValidateModel(dtoToPatch))
            {
                //return UnprocessableEntity(ModelState);
                //return new UnprocessableEntityObjectResult(ModelState);
                return(ValidationProblem(ModelState));
            }
            this.mapper.Map(dtoToPatch, employeeEntity);
            this.companyRespository.UpdateEmployee(employeeEntity);
            await this.companyRespository.SaveAsync();

            return(NoContent());
        }
Пример #25
0
        public async Task <ActionResult <EmployeeDto> > UpdateEmployeeForCompany(
            Guid companyId,
            Guid employeeId,
            EmployeeUpdateDto employee
            )
        {
            //判断该公司是否存在
            if (!await _companyRepository.CompanyExistsAsync(companyId))
            {
                return(NotFound());
            }

            var employeeEntity = await _companyRepository.GetEmployeeAsync(companyId, employeeId);

            //该公司没有这个员工
            if (employeeEntity == null)
            {
                //创建员工
                var employeeToAddEntity = _mapper.Map <Employee>(employee);
                employeeToAddEntity.Id = employeeId;
                _companyRepository.AddEmployee(companyId, employeeToAddEntity);
                await _companyRepository.SaveAsync();

                var dtoToReturn = _mapper.Map <EmployeeDto>(employeeToAddEntity);

                return(CreatedAtRoute(nameof(GetEmployeeForCompany), new
                {
                    companyId,
                    employeeId = dtoToReturn.Id
                }, dtoToReturn));
            }

            //entity 转化为 updateDto
            //把传进来的employee的值更新到updateDto
            //把updateDto映射回entity

            _mapper.Map(employee, employeeEntity);

            _companyRepository.UpdateEmployee(employeeEntity);

            await _companyRepository.SaveAsync();

            return(NoContent());
        }
        public async Task <ActionResult <EmployeeDto> > PartiallyUpdateEmloyeeForCompany(
            [FromRoute] Guid companyId,
            [FromRoute] Guid employeeId,
            JsonPatchDocument <EmployeeUpdateDto> patchDocument
            )
        {
            if (!await _companyRepository.CompanyExistAsync(companyId))
            {
                return(NotFound());
            }

            var employeeEtity = await _companyRepository.GetEmployeeAsync(employeeId, companyId);

            if (employeeEtity == null)
            {
                var employeeDto = new EmployeeUpdateDto();
                patchDocument.ApplyTo(employeeDto, ModelState);
                if (!TryValidateModel(employeeDto))
                {
                    return(ValidationProblem(ModelState));
                }

                var dtoToAdd = _mapper.Map <Employee>(employeeDto);
                dtoToAdd.Id = employeeId;
                _companyRepository.AddEmployee(companyId, dtoToAdd);
                await _companyRepository.SaveAsync();

                var dtoToReturn = _mapper.Map <EmployeeDto>(dtoToAdd);
                return(CreatedAtRoute(nameof(GetEmployee), new { companyId, employeeId }, dtoToReturn));
            }

            var dtoToPatch = _mapper.Map <EmployeeUpdateDto>(employeeEtity);

            patchDocument.ApplyTo(dtoToPatch, ModelState);
            if (!TryValidateModel(dtoToPatch))
            {
                return(ValidationProblem(ModelState));
            }
            _mapper.Map(dtoToPatch, employeeEtity);
            _companyRepository.UpdateEmployee(employeeEtity);
            await _companyRepository.SaveAsync();

            return(NoContent());
        }
Пример #27
0
        public async Task <IActionResult> PartiallyUpdateEmployeeForCompany(
            Guid companyId,
            Guid employeeId,
            JsonPatchDocument <EmployeeUpdateDto> jsonPatchDocument)
        {
            if (!await _companyRepository.CompanyExitsAsync(companyId))
            {
                return(NotFound());
            }
            var employentity = await _companyRepository.GetEmployeeAsync(companyId, employeeId);

            if (employentity == null)
            {
                var employeeedto = new EmployeeUpdateDto();
                jsonPatchDocument.ApplyTo(employeeedto, ModelState);
                if (!TryValidateModel(employeeedto))
                {
                    return(ValidationProblem(ModelState));
                }

                var employeeToadd = _mapper.Map <Emloyee>(employeeedto);
                employeeToadd.Id = employeeId;
                _companyRepository.AddEmployee(employeeToadd, companyId);
                await _companyRepository.SaveAsync();

                var retdto = _mapper.Map <EmployeeDto>(employeeToadd);
                return(CreatedAtRoute(nameof(GetEmployeeForCanpany), new { companyid = companyId, empolyid = retdto.Id }, retdto));//调用getcompany方达,填写路由
            }

            var dtoToPatch = _mapper.Map <EmployeeUpdateDto>(employentity);

            //需要处理验证
            jsonPatchDocument.ApplyTo(dtoToPatch, ModelState); //第二个参数是验证jsonPatchDocument传入的值是否合法使其不报500服务器错误
            if (!TryValidateModel(dtoToPatch))                 //验证数据可以进去我们设置的验证
            {
                return(ValidationProblem(ModelState));
            }
            _mapper.Map(dtoToPatch, employentity);
            _companyRepository.UpdataEmloyee(employentity);
            await _companyRepository.SaveAsync();

            return(NoContent());
        }
Пример #28
0
        public async Task <IActionResult> UpdateEmployeeAsync(
            [FromRoute, SwaggerParameter("Id of the employee to update", Required = true)] Guid employeeId,
            [FromBody, SwaggerParameter("object with the updates", Required = true)]  EmployeeUpdateDto employeeToUpdate,
            [FromHeader(Name = "accept"), SwaggerParameter("Request Hateoas")] string mediaType)
        {
            var employeeFromRepo = await _employeeRepository.GetFirstByConditionAsync(x => x.Id == employeeId);

            //  upserting if doesnt exist
            if (employeeFromRepo == null)
            {
                var employeeEntity = Mapper.Map <Employee>(employeeToUpdate);
                employeeEntity.Id = employeeId;

                _employeeRepository.Create(employeeEntity);

                if (!await _employeeRepository.SaveChangesAsync())
                {
                    throw new Exception("Failed to save on upserting");
                }

                var employeeToReturn = Mapper.Map <EmployeeDto>(await _employeeRepository.GetFirstByConditionAsync(h => h.Id == employeeId));

                if (mediaType == "application/vnd.AO.json+hateoas")
                {
                    var shapedEmployee = _controllerHelper.ShapeAndAddLinkToObject(employeeToReturn, "Employee", null);
                    return(CreatedAtRoute("GetEmployee", new { employeeId = employeeToReturn.Id }, shapedEmployee));
                }


                return(CreatedAtRoute("GetEmployee", new { employeeId = employeeToReturn.Id }, employeeToReturn));
            }

            Mapper.Map(employeeToUpdate, employeeFromRepo);

            _employeeRepository.Update(employeeFromRepo);

            if (!await _employeeRepository.SaveChangesAsync())
            {
                throw new Exception("Failed to save on updating");
            }

            return(NoContent());
        }
Пример #29
0
        public async Task <IActionResult> UpdateEmployee(string employeeId, [FromBody] EmployeeUpdateDto employee)
        {
            if (employee == null)
            {
                throw new ArgumentNullException(nameof(employee));
            }
            var entity = await _employeeRepository.GetSingleAsync(employeeId);

            if (entity == null)
            {
                return(NotFound($"id:{employeeId}没有查到数据"));
            }

            _mapper.Map(employee, entity);

            _employeeRepository.Update(entity);
            _employeeRepository.SaveChanges();
            return(NoContent());
        }
Пример #30
0
        public async Task UpdateEmployeeNotFoundTest()
        {
            var objA = new EmployeeUpdateDto
            {
                FirstName = Guid.NewGuid().ToString(),
                HireDate  = DateTime.UtcNow.AddMonths(-6),
                Id        = Guid.NewGuid(),
            };

            using var srv = new TestServer(TestHostBuilder <Startup, UnigrationWebApiTestStartup>());
            var client = srv.CreateClient();

            GenerateAuthHeader(client, GenerateTestToken());

            var resp = await client.PutAsJsonAsync($"api/v1/Employees.json?id={objA.Id}", objA);

            Assert.AreEqual(HttpStatusCode.NotFound, resp.StatusCode);
            Assert.AreEqual($"\"{nameof(Employee)} Not Found\"", await resp.Content.ReadAsStringAsync());
        }