示例#1
0
        //operations:
        //Add:{"op","add","path":"/biscuits/1", "value":{"name":"Ginger nut"}}
        //Remove:{"op":"remove","path":"/biscuits"}
        //Move:{"op":"move","from":"/biscuits","path":"/cookies"}
        //Replace:{"op":"replace","path":"/biscuits/0/name","value":"Chocolate digestive"}
        //Copy:{"op":"copy","from":"/biscuits/0","path":"/best_biscuit"}
        //Test:{"op":"test","path":"/best_biscuit/name","value":"Choco Leibniz"}
        #endregion

        public async Task <IActionResult> PartiallyUpdateEmployeeForCompany(
            Guid companyId,
            Guid employeeId,
            JsonPatchDocument <EmployeeUpdatedDto> patchDocument)
        {
            if (!await _companyRepository.CompanyExistsAsync(companyId))
            {
                return(NotFound());
            }

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

            if (employeeEntity == null)
            {
                var employeeDto = new EmployeeUpdatedDto();
                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(CreatedAtAction(nameof(GetEmployeeForCompany), new
                {
                    companyId,
                    employeeId = dtoToReturn.Id
                }, dtoToReturn));
            }

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

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

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

            _mapper.Map(dtoToPatch, employeeEntity);

            _companyRepository.UpdateEmployee(employeeEntity);

            await _companyRepository.SaveAsync();

            return(Ok(dtoToPatch));
        }
示例#2
0
        [HttpPut("{employeeId}")] //put整体替换,patch局部更新
        //如果employeeId存在,做更新操作;不存在,则添加新的employee记录
        public async Task <ActionResult <EmployeeDto> > UpdateEmployeeForCompany(Guid companyId,
                                                                                 Guid employeeId, EmployeeUpdatedDto 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 dtoReturn = _mapper.Map <EmployeeDto>(employeeToAddEntity);

                return(CreatedAtAction(nameof(GetEmployeeForCompany), new
                {
                    companyId = companyId,
                    employeeId = dtoReturn.Id
                }, dtoReturn));
            }

            //entity转换为updateDto
            //把传进来的employee的值更新到updateDto
            //把updateDto映射回entity
            _mapper.Map(employee, employeeEntity);

            _companyRepository.UpdateEmployee(employeeEntity);

            await _companyRepository.SaveAsync();

            return(Ok(employeeEntity));  //or return NoContent() -status code:204
        }