public async Task <Project> UpdateProjectData(Guid projectId, ProjectUpdateFieldsModel updatedFields, Guid designerId) { Project project = await _projectRepository.GetProjectById(projectId); if (project == null) { _logger.LogError("Project with Id {0} not found", projectId.ToString()); throw new ApiException(404, "Project with Id " + projectId.ToString() + " not found"); } if (project.Designer.Id != designerId) { _logger.LogError("User with id {0} is unauthorized to modify project with id {1}", designerId.ToString(), project.Id); throw new ApiException(401, $"Unauthorized to modify the project with id {project.Id}"); } Project updatedProject = null; User client; if (updatedFields.ClientUsername != null) { client = await _userRepository.GetUserByUsername(updatedFields.ClientUsername); if (client == null) { _logger.LogError("User with Username {0} not found", updatedFields.ClientUsername); throw new ApiException(404, "User with Username " + updatedFields.ClientUsername + " not found"); } try { updatedProject = await _projectRepository.UpdateProjectClient(projectId, client); } catch (Exception e) { throw new ApiException(500, e.Message); } } if (updatedFields.Name != null) { try { updatedProject = await _projectRepository.UpdateProjectData(projectId, updatedFields); } catch (Exception e) { throw new ApiException(500, e.Message); } } if (updatedProject == null) { throw new ApiException(400, "Client username and project fields are both null"); } return(updatedProject); }
public async Task <IActionResult> UpdateProjectData(Guid id, [FromBody] ProjectUpdateFieldsModel updatedFields) { _logger.LogInformation("Update project data request for project with id {0}\n\n", id.ToString()); IDictionary <string, object> payload; try { var accessToken = Request.Headers["Bearer"]; payload = Authorize(accessToken); } catch (ApiException e) { return(Unauthorized(new UnauthorizedError(e.Message))); } try { Guid designerId = Guid.Parse(payload["userId"].ToString()); Project project = await _projectService.UpdateProjectData(id, updatedFields, designerId); return(Ok(project)); } catch (ApiException e) { if (e.StatusCode == 404) { return(NotFound(new NotFoundError(e.Message))); } if (e.StatusCode == 401) { return(Unauthorized(new UnauthorizedError(e.Message))); } if (e.StatusCode == 400) { return(BadRequest(new BadRequestError(e.Message))); } return(StatusCode(StatusCodes.Status500InternalServerError, new InternalServerError(e.Message))); } }
public virtual async Task <Project> UpdateProjectData(Guid projectId, ProjectUpdateFieldsModel updatedFields) { Project projectToBeUpdated = await _context.Projects.FirstOrDefaultAsync(p => p.Id == projectId); if (projectToBeUpdated == null) { _logger.LogError("Project with Id {0} could not be found in the database", projectId); throw new Exception($"Project with Id {projectId} could not be found in the database"); } projectToBeUpdated.Name = updatedFields.Name; projectToBeUpdated.UpdatedAt = DateTime.UtcNow; var result = await _context.SaveChangesAsync(); if (result == 0) { _logger.LogError("Server error! Project with Id {0} could not be updated\n\n", projectToBeUpdated.Id); throw new Exception($"Server error! Project {projectToBeUpdated.Id} could not be updated"); } _logger.LogInformation("Project with Id {0} updated into database\n\n", projectToBeUpdated.Id); return(projectToBeUpdated); }