Example #1
0
        public async Task <IActionResult> PutContestAsync(int id, [FromBody] TeacherContestViewModel putContest)
        {
            if (!ModelState.IsValid)
            {
                return(new ObjectResult(new ApiDataResult {
                    Error = PutContestResultType.Wrong, Data = new { ModelState }
                })
                {
                    StatusCode = StatusCodes.Status422UnprocessableEntity
                });
            }

            if (id != putContest.Id)
            {
                return(BadRequest(new ApiResult {
                    Error = PutContestResultType.Wrong
                }));
            }

            var userId = _authService.GetUserIdFromRequest(Request.HttpContext.User.Claims);

            var result = await _contestService.PutContestAsync(putContest, userId);

            switch (result.Error)
            {
            case PutContestResultType.Unauthorized:
                return(new ObjectResult(result)
                {
                    StatusCode = StatusCodes.Status401Unauthorized
                });

            case PutContestResultType.ConcurrencyException:
                return(BadRequest(result));

            case PutContestResultType.ContestNotFound:
                return(NotFound(result));

            case PutContestResultType.Wrong:
                return(new ObjectResult(result)
                {
                    StatusCode = StatusCodes.Status422UnprocessableEntity
                });

            case PutContestResultType.Error:
                return(BadRequest(result));

            case PutContestResultType.Ok:
                return(Ok(result));

            default:
                throw new ArgumentOutOfRangeException();
            }
        }