public async Task <OperationResultResponse <bool> > ExecuteAsync(Guid workspaceId, JsonPatchDocument <EditWorkspaceRequest> request) { DbWorkspace dbWorkspace = await _repository.GetAsync(workspaceId); Guid editorId = _httpContextAccessor.HttpContext.GetUserId(); if (dbWorkspace.CreatedBy != editorId && (await _userRepository.GetAdminsAsync(workspaceId)).FirstOrDefault(wa => wa.UserId == editorId) == null && !await _accessValidator.IsAdminAsync()) { return(_responseCreator.CreateFailureResponse <bool>(HttpStatusCode.Forbidden)); } if (!_validator.ValidateCustom(request, out List <string> errors)) { return(_responseCreator.CreateFailureResponse <bool>(HttpStatusCode.BadRequest, errors)); } OperationResultResponse <bool> response = new(); response.Body = await _repository.EditAsync(dbWorkspace, await _mapper.MapAsync(request)); response.Status = OperationResultStatusType.FullSuccess; if (!response.Body) { response = _responseCreator.CreateFailureResponse <bool>(HttpStatusCode.BadRequest); } return(response); }
public async Task <OperationResultResponse <WorkspaceInfo> > ExecuteAsync(GetWorkspaceFilter filter) { DbWorkspace dbWorkspace = await _repository.GetAsync(filter); if (dbWorkspace is null) { return(_responseCreator.CreateFailureResponse <WorkspaceInfo>(HttpStatusCode.NotFound)); } if (!dbWorkspace.Users.Select(u => u.UserId).Contains(_httpContextAccessor.HttpContext.GetUserId())) { return(_responseCreator.CreateFailureResponse <WorkspaceInfo>(HttpStatusCode.Forbidden)); } OperationResultResponse <WorkspaceInfo> response = new(); List <UserData> usersData = await GetUsersAsync(dbWorkspace.Users?.Select(u => u.UserId).ToList(), response.Errors); List <ImageInfo> imagesInfo = (await GetImagesAsync( usersData?.Where(u => u.ImageId.HasValue).Select(u => u.ImageId.Value).ToList(), response.Errors)) ?.Select(_imageMapper.Map).ToList(); response.Status = response.Errors.Any() ? OperationResultStatusType.PartialSuccess : OperationResultStatusType.FullSuccess; response.Body = _workspaceInfoMapper.Map( dbWorkspace, usersData?.Select(u => _userMapper.Map(u, imagesInfo?.FirstOrDefault(i => i.Id == u.ImageId))).ToList()); return(response); }