public async Task <int> Create(RequestItemRequest request, int userId)
        {
            var newItem = new Request
            {
                Status       = RequestStatus.New,
                ExpectedDate = request.ExpectedDate,
                UserId       = userId,
                CreatedAt    = DateTime.Now
            };

            using (var transaction = _dbContext.Database.BeginTransaction())
            {
                try
                {
                    _dbContext.Request.Add(newItem);
                    await _dbContext.SaveChangesAsync();

                    MessageItemRequest item = new MessageItemRequest()
                    {
                        Text      = request.Message,
                        RequestId = newItem.Id,
                    };

                    await this._messagesRepository.Create(item, userId);

                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
            }
            return(newItem.Id);
        }
        public async Task <IActionResult> Create([FromBody] RequestItemRequest request)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            try
            {
                var userIdClaim = ((ClaimsIdentity)User.Identity).FindFirst(ClaimTypes.NameIdentifier);
                var userId      = int.Parse(userIdClaim.Value);

                var itemId = await _requestsRepository.Create(request, userId);

                return(CreatedAtAction(nameof(GetById), new { id = itemId }, itemId));
            }
            catch (DuplicateOfficeException) // TODO
            {
                return(StatusCode(StatusCodes.Status409Conflict, new { Message = "An office with those details already exists." }));
            }
        }