コード例 #1
0
        public async Task <IActionResult> GetTaskAsync([FromRoute] string taskId, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (!Guid.TryParse(taskId, out var modelToDoTaskId))
            {
                var error = ServiceErrorResponses.ToDoTaskNotFound(taskId);
                return(this.NotFound(error));
            }

            ToDoTask modelTask = null;

            try
            {
                modelTask = await this.tasks.GetAsync(modelToDoTaskId, cancellationToken);
            }
            catch (ToDoTaskNotFoundException)
            {
                var error = ServiceErrorResponses.ToDoTaskNotFound(taskId);
                return(NotFound(error));
            }

            var clientTask = ToDoTaskConverter.Convert(modelTask);

            var userIdRequest = this.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier);

            if (userIdRequest.Value != clientTask.UserId)
            {
                var error = ServiceErrorResponses.AccessDenied();
                return(StatusCode(StatusCodes.Status403Forbidden, error));
            }

            return(this.Ok(clientTask));
        }
コード例 #2
0
        public async Task <IActionResult> PatchTaskAsync([FromRoute] string taskId, [FromBody] Client.Models.ToDoTasks.ToDoTaskPatchInfo patchInfo, CancellationToken cancellationToken)
        {
            cancellationToken.ThrowIfCancellationRequested();

            if (!Guid.TryParse(taskId, out var modelToDoTaskId))
            {
                var error = ServiceErrorResponses.ToDoTaskNotFound(taskId);
                return(this.NotFound(error));
            }

            var userLoginRequest = this.HttpContext.User.Claims.FirstOrDefault(x => x.Type == ClaimTypes.Name);

            User user = null;

            try
            {
                user = await users.GetAsync(userLoginRequest.Value, cancellationToken);
            }
            catch
            {
                var error = ServiceErrorResponses.UserNotFound(userLoginRequest.Value);
                return(BadRequest(error));
            }

            ToDoTask modelTask = null;

            try
            {
                modelTask = await this.tasks.GetAsync(modelToDoTaskId, cancellationToken);
            }
            catch (ToDoTaskNotFoundException)
            {
                var error = ServiceErrorResponses.ToDoTaskNotFound(taskId);
                return(NotFound(error));
            }


            if (user.Id != modelTask.UserId)
            {
                var error = ServiceErrorResponses.AccessDenied();
                return(StatusCode(StatusCodes.Status403Forbidden, error));
            }

            var modelPatchInfo = ToDoTaskPatchConverter.Convert(modelToDoTaskId, patchInfo);

            ToDoTask patchTask = null;

            try
            {
                patchTask = await tasks.PatchAsync(modelPatchInfo, cancellationToken);
            }
            catch (ToDoTaskNotFoundException)
            {
                var error = ServiceErrorResponses.ToDoTaskNotFound(taskId);
                return(NotFound(error));
            }

            var clientTask = ToDoTaskConverter.Convert(patchTask);

            return(Ok(clientTask));
        }