Пример #1
0
        public async Task <IUpdateUserResult> Handle(UpdateUser request, CancellationToken cancellationToken)
        {
            var existingUser = await _mediator.Send(new GetUserById(request.UserId), cancellationToken);

            return(existingUser switch
            {
                UserNotFound _ => UserNotFound.Instance,
                UserFound userFound when IsNotMatchingETags(userFound.Etag, request.Etag) => new NewerVersionOfUserRecordFound(userFound.Etag),
                UserFound userFound => await UpdateUser(request, userFound, cancellationToken),
                _ => throw new ArgumentOutOfRangeException(nameof(existingUser))
            });
Пример #2
0
        public async Task <IActionResult> GetUser(Guid userId, [FromHeader(Name = "If-None-Match")] string etag)
        {
            var userResult = await _mediator.Send(new GetUserById(userId, etag));

            var response = userResult switch
            {
                UserFound userFound => GetUserFoundResult(userFound),
                UserNotModified _ => new StatusCodeResult((int)HttpStatusCode.NotModified),
                UserNotFound _ => NotFound(),
                _ => throw new ArgumentOutOfRangeException(nameof(userResult))
            };

            return(response);

            IActionResult GetUserFoundResult(UserFound userFound)
            {
                var(errorMessage, userDto) = _mapper.MapTo <UserDto>(userFound.User);
                if (!string.IsNullOrWhiteSpace(errorMessage))
                {
                    throw new Exception(errorMessage);
                }
                return(new ObjectResult(ForExistingUser(userDto, userFound.Etag)));
            }
        }