public async Task <MessageResponse> CreateMessageAsync(CreateMessageRequest request)
        {
            var channel = await UnitOfWork.ChannelRepository.GetChannelByIdAsync(request.ChannelId);

            Ensure.That(channel).WithException(x => new NotFoundException(new ErrorDto(ErrorCode.NotFound, "Channel does not exist."))).IsNotNull();
            var member = await UnitOfWork.MemberRepository.GetMemberBySaasUserIdAsync(request.SaasUserId);

            Ensure.That(member).WithException(x => new NotFoundException(new ErrorDto(ErrorCode.NotFound, "Member does not exist."))).IsNotNull();
            var message = new Domain.Message.Message
            {
                Id        = Guid.NewGuid(),
                ChannelId = request.ChannelId,
                OwnerId   = member.Id,
                Owner     = member,
                Body      = request.Body,
                Created   = DateTimeOffset.UtcNow,
                Type      = request.Type,
                ImageUrl  = request.ImageUrl
            };

            using (var transactionScope = new TransactionScope(TransactionScopeAsyncFlowOption.Enabled))
            {
                await UnitOfWork.MessageRepository.AddMessageAsync(message);

                await AddLastReadMessageAsync(new AddLastReadMessageRequest(request.ChannelId, message.Id, request.SaasUserId));

                transactionScope.Complete();
            }

            return(message.ToMessageResponse(null, _cloudStorageConfiguration));
        }