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." })); } }