예제 #1
0
        public async Task <ProjectShortDto> UpdateProject(ProjectUpdateDto update)
        {
            try
            {
                await database.Connect().ConfigureAwait(false);

                var     getFilter = new EqualityFilter <ObjectId>("_id", update.ProjectID);
                Project project   = (await database.Get(getFilter).ConfigureAwait(false)).FirstOrDefault();
                if (project is null)
                {
                    throw new ArgumentException("No project was found for given ID");
                }

                UpdateProject(project, update);

                await database.Update(project).ConfigureAwait(false);

                return(new ProjectShortDto(project));
            }
            catch (Exception ex) when(ex.GetType() != typeof(ArgumentException))
            {
                exceptionLogger.Log(new ApplicationError(ex), LogLevel.Error, logConfiguration);
                throw new DatabaseException("Error ocurred while updating project");
            }
        }
        public async void UpdateProjectTest(Status expectedStatus)
        {
            var projectDto = new ProjectUpdateDto
            {
                Id          = Guid.NewGuid(),
                Title       = RandomHelper.RandomString(),
                Description = RandomHelper.RandomString(350)
            };
            var project = EntitiesFactory.NewProject(id: projectDto.Id).Get();
            var projects = new[] { project }.AsQueryable().BuildMock();

            _projectRepository.Setup(d => d.ExistAsync(projectDto.Id))
            .ReturnsAsync(expectedStatus != Status.NotFund);
            _projectRepository.Setup(d => d.Query())
            .Returns(projects.Object);
            _projectRepository.Setup(d => d.ExistByTitleAsync(projectDto.Title, projectDto.Id))
            .ReturnsAsync(expectedStatus == Status.Conflict);

            var service = new ProjectService(_projectRepository.Object, _workRepository.Object);
            var result  = await service.UpdateProjectAsync(projectDto);

            Assert.Equal(expectedStatus, result.Status);
            if (expectedStatus == Status.Success)
            {
                _projectRepository.Verify(d => d.UpdateAsync(project), Times.Once);
                Assert.Equal(projectDto.Title, project.Title);
                Assert.Equal(projectDto.Description, project.Description);
            }
            else
            {
                _projectRepository.Verify(d => d.UpdateAsync(project), Times.Never);
            }
        }
예제 #3
0
        public async Task <Result> UpdateProjectAsync(ProjectUpdateDto projectDto)
        {
            var existProject = await _projectRepository.ExistAsync(projectDto.Id);

            if (!existProject)
            {
                return(new Result(Status.NotFund, $"Project with {nameof(projectDto.Id)} does not exist"));
            }
            var existTitle = await _projectRepository.ExistByTitleAsync(projectDto.Title, projectDto.Id);

            if (existTitle)
            {
                return(new Result(Status.Conflict, $"Project with {nameof(projectDto.Title)} already exist"));
            }

            var project = await _projectRepository.Query()
                          .Include(p => p.DeveloperProjects)
                          .FirstOrDefaultAsync(p => p.Id == projectDto.Id);

            project.SetData(
                title: projectDto.Title,
                description: projectDto.Description,
                developerProjects: GetDeveloperProjects(projectDto.DeveloperIds, project.Id)
                );

            await _projectRepository.UpdateAsync(project);

            return(new Result());
        }
예제 #4
0
        public async Task <IActionResult> UpdateProject()
        {
            try
            {
                string requestBody = await requestService.GetRequestBody(Request).ConfigureAwait(false);

                ProjectUpdateDto update         = JsonConvert.DeserializeObject <ProjectUpdateDto>(requestBody);
                ProjectShortDto  updatedProject = await projectService.UpdateProject(update).ConfigureAwait(false);

                return(new OkJson <ProjectShortDto>(updatedProject));
            }
            catch (FormatException ex)
            {
                exceptionLogger.Log(new ApplicationError(ex), LogLevel.Error, logConfiguration);
                return(new BadSentRequest <string>("One of query params was not in correct format"));
            }
            catch (ArgumentException ex)
            {
                exceptionLogger.Log(new ApplicationError(ex), LogLevel.Error, logConfiguration);
                return(new BadSentRequest <string>(ex.Message));
            }
            catch (DatabaseException ex)
            {
                return(new InternalServerError(ex.Message));
            }
            catch (Exception ex)
            {
                exceptionLogger.Log(new ApplicationError(ex), LogLevel.Error, logConfiguration);
                return(new InternalServerError());
            }
        }
예제 #5
0
        public async void UpdateProjectTest()
        {
            var developer  = EntitiesFactory.NewDeveloper().Save();
            var project    = EntitiesFactory.NewProject().Save();
            var projectDto = new ProjectUpdateDto
            {
                Id           = project.Id,
                Title        = RandomHelper.RandomString(),
                Description  = RandomHelper.RandomString(490),
                DeveloperIds = new[] { developer.Id }
            };

            var(status, result) = await Request.PutAsync <ResultTest>(new Uri($"{Uri}/{project.Id}"), projectDto);

            var projectDb = await DbContext.Projects
                            .Include(p => p.DeveloperProjects)
                            .SingleAsync(p => p.Id == projectDto.Id);

            await DbContext.Entry(projectDb).ReloadAsync();

            Assert.Equal(Status.Success, status);
            Assert.True(result.Success);
            Assert.Equal(projectDto.Title, projectDb.Title);
            Assert.Equal(projectDto.Description, projectDb.Description);
            Assert.Single(projectDb.DeveloperProjects);
            Assert.Contains(projectDb.DeveloperProjects, d => d.DeveloperId == developer.Id);
        }
예제 #6
0
        public async Task <bool> UpdateAsync(ProjectUpdateDto dto)
        {
            var dbSet  = _context.Projects;
            var entity = dbSet.FirstOrDefault(r => r.Id == dto.Id);

            _mapper.Map(dto, entity);
            return(await _context.SaveChangesAsync() > 0);
        }
예제 #7
0
        /// <inheritdoc/>
        public Project UpdateProject(ProjectUpdateDto dto)
        {
            var now    = DateUtil.Now;
            var entity = _projectRepository.Read(new ProjectTableEntity {
                ProjectId = dto.ProjectId
            });

            if (dto.ProjectCode != null)
            {
                entity.ProjectCode = dto.ProjectCode;
            }

            if (dto.Name != null)
            {
                entity.Name = dto.Name;
            }

            if (dto.Description != null)
            {
                entity.Description = dto.Description;
            }

            if (dto.Status != null)
            {
                entity.Status = dto.Status;
            }

            if (dto.SortNo != null)
            {
                entity.SortNo = dto.SortNo.Value;
            }

            entity.UpdateTime = now;

            using (var tran = new TransactionScope())
            {
                _projectRepository.Update(entity);

                if (dto.Tags != null)
                {
                    _tagRepository.DeleteByTargetId(dto.ProjectId);
                    foreach (var tag in dto.Tags)
                    {
                        _tagRepository.Create(new TagTableEntity
                        {
                            TagId       = Guid.NewGuid(),
                            TargetId    = entity.ProjectId,
                            Value       = tag,
                            TargetTable = "Project",
                            CreateTime  = now,
                        });
                    }
                }

                tran.Complete();
            }
            return(_projectQueryService.GetProject(entity.ProjectId));
        }
예제 #8
0
        public ProjectDto UpdateProject(ProjectUpdateDto project, Guid id)
        {
            var projectEntity = Mapper.Map <Project>(project);

            projectEntity.Id = id;
            var updatedProject = ProjectRepository.UpdateProject(projectEntity);

            ProjectRepository.SaveChanges();
            return(Mapper.Map <ProjectDto>(updatedProject));
        }
예제 #9
0
        public async Task UpdateProject(ProjectUpdateDto projectUpdate)
        {
            //@TO-DO refactor with mapper
            var res = await _projectRepository.GetById(projectUpdate.Id);

            if (res == null)
            {
                throw new EntityNotFoundException("", "No such project exist");
            }

            await _projectRepository.UpdateProject(new Project { Id = projectUpdate.Id, Name = projectUpdate.Name });
        }
예제 #10
0
 public ActionResult <ProjectDto> UpdateClient(ProjectUpdateDto project, Guid id)
 {
     try
     {
         ProjectServices.UpdateProject(project, id);
         return(NoContent());
     }
     catch (KeyNotFoundException)
     {
         return(NotFound());
     }
 }
        public ActionResult Update(int id, ProjectUpdateDto projectUpdateDto)
        {
            var project = _projectRepo.GetProject(id);

            if (project == null)
            {
                return(NotFound());
            }
            _mapper.Map(projectUpdateDto, project);
            _projectRepo.UpdateProject(project);
            _projectRepo.SaveChanges();
            return(NoContent());
        }
        public async Task <ActionResult> UpdateProject(int projectId, [FromBody] ProjectUpdateDto projectUpdateDto)
        {
            var findProject = await _projectRepo.GetProjectByIdAsync(projectId);

            if (findProject == null)
            {
                return(NotFound("Project doesn't exist"));
            }

            findProject.UpdateDate = DateTime.Now;

            var project = _mapper.Map(projectUpdateDto, findProject);

            _projectRepo.Update(project);
            await _projectRepo.SaveAllAsync();

            return(Ok());
        }
예제 #13
0
        //只支持变更名称、位置、区域和地域
        public async Task <BaseResponse> UpdateProjectAsync(ProjectUpdateDto req, string account)
        {
            var data = await _pr.FindAsync(req.Id);

            if (data == null)
            {
                return(new BaseResponse {
                    Success = false, Message = "输入的项目或者场站不存在"
                });
            }
            //同一个项目下不能重名
            var ret = await _pr.Find(a => a.ParentId == data.ParentId && a.Name == req.Name && a.Id != req.Id).FirstOrDefaultAsync();

            if (ret != null)
            {
                return(new BaseResponse {
                    Success = false, Message = "已存在相同名称的项目获取场站"
                });
            }
            try
            {
                var entity = _mapper.Map(req, data);
                entity.Modify     = account;
                entity.ModifyTime = DateTime.Now;
                await _pr.SaveAsync(entity);

                _log.LogInformation($"{account}修改标示为{req.Id}的项目或者场站信息成功");
                return(new BaseResponse {
                    Success = true, Message = "修改数据成功"
                });
            }
            catch (Exception ex)
            {
                _log.LogError($"{account}修改标示为{req.Id}的项目或者场站失败,失败原因:{ex.Message}->{ex.StackTrace}->{ex.InnerException}");
                return(new BaseResponse {
                    Success = false, Message = "修改数据失败,请联系管理员"
                });
            }
        }
예제 #14
0
        public async Task <ActionResult <BaseResponse> > UpdateProjectInfo(string GroupId, ProjectUpdateDto req)
        {
            var    GId     = User.Claims.FirstOrDefault(a => a.Type == "GroupId").Value;
            string Account = User.Claims.FirstOrDefault(a => a.Type == "Account").Value;
            string Code    = User.Claims.FirstOrDefault(a => a.Type == "Code").Value;
            var    isAdmin = User.Claims.FirstOrDefault(a => a.Type == "IsAdmin").Value.ToLower() == "true" ? true : false;
            string Roles   = User.Claims.FirstOrDefault(a => a.Type == "Role").Value;
            var    pathId  = await _ps.GetPathId(req.Id);

            if (pathId == null)
            {
                return(new NotFoundResult());
            }
            else
            {
                pathId += "/" + req.Id;
            }
            if (GroupId != GId)
            {
                if (!(isAdmin && Code == _config["Group"]))
                {
                    return(new ContentResult {
                        Content = "用户没有权限", ContentType = "text/plain", StatusCode = 401
                    });
                }
            }
            else
            {
                if (!isAdmin)
                {
                    var bAccess = await _rp.IsAuth(Roles, pathId, 2);

                    if (!bAccess)
                    {
                        return(new ContentResult {
                            Content = "用户没有权限", ContentType = "text/plain", StatusCode = 401
                        });
                    }
                }
            }
            var rm = await _ps.UpdateProjectAsync(req, Account);

            return(rm);
        }
예제 #15
0
        public async Task <IActionResult> Update(long id, [FromBody] ProjectUpdateDto updatedProject)
        {
            if (updatedProject == null)
            {
                return(BadRequest());
            }

            var oldProject = await _unitOfWork.Projects.SingleOrDefaultAsync(p => p.Id == id);

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

            if (!oldProject.Name.Equals(updatedProject.Name))
            {
                if (await _unitOfWork.Projects.Exists(p => p.Name == updatedProject.Name && p.Id != oldProject.Id))
                {
                    ModelState.AddModelError("Name", "The provided name already exists");
                }
            }

            if (!Enum.IsDefined(typeof(ProjectType), Enum.ToObject(typeof(ProjectType), updatedProject.Type)))
            {
                ModelState.AddModelError("Type", "The provided type is not a valid project type.");
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var user = await _unitOfWork.Users.SingleOrDefaultAsync(u => u.Id == updatedProject.UserId);

            if (!_unitOfWork.Users.CanUserEdit(user))
            {
                return(Forbid());
            }

            Mapper.Map(updatedProject, oldProject);
            oldProject.UpdateLastEditedDetails(user);
            try
            {
                var existingUser = oldProject.ProjectUsers;
                oldProject.ProjectUsers.Clear();
                foreach (var userId in updatedProject.Users)
                {
                    var newUser = await _unitOfWork.Users.SingleOrDefaultAsync(u => u.Id == userId);

                    if (newUser != null)     // new user
                    {
                        oldProject.AssignUser(newUser);
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
            if (await _unitOfWork.Complete() <= 0)
            {
                return(StatusCode(304));
            }
            var projectToReturn = Mapper.Map <ProjectReturnDto>(oldProject);

            return(Ok(projectToReturn));
        }
예제 #16
0
 private static void UpdateProject(Project project, ProjectUpdateDto update)
 {
     if (update.Description is {})
예제 #17
0
        public async Task <IActionResult> UpdateProject([FromBody] ProjectUpdateDto userModel)
        {
            await _projectService.UpdateProject(userModel);

            return(Ok());
        }
예제 #18
0
 public async Task <Result> UpdateProjectAsync([FromBody] ProjectUpdateDto projectDto, [FromRoute] Guid id)
 {
     projectDto.Id = id;
     return(GetResult(await _projectService.UpdateProjectAsync(projectDto)));
 }
예제 #19
0
 public UpdateProjectAction(int id, ProjectUpdateDto project) =>
 (Id, Project) = (id, project);