public async Task <ApiResponse <CaseCreatedModel> > GetOrCreateTransactionCase(CasePostModel model) { try { var transactionCase = caseRepository .Query() .Where(e => e.Transaction.ID == model.TransactionId) .SingleOrDefault(e => e.Status != CaseStatus.Closed); if (transactionCase == null) { var transaction = transactionRepository.Get(model.TransactionId); var summary = $"{(model.CaseType == CaseType.Dispute ? "Disputing" : "Question about")} {transaction.Description}"; transactionCase = new Case { Customer = transaction.Account.Owner, Account = transaction.Account, Transaction = transaction, Summary = summary, Status = CaseStatus.New, CreatedDate = DateTime.Now, ModifiedDate = DateTime.Now }; caseRepository.Add(transactionCase); await caseRepository.SaveChanges(); await taskRouter.GetOrCreateCaseChannel(transactionCase.ID); var caseEvent = new Event { Account = transactionCase.Account, Summary = "Spoke with an Agent", CreatedDate = DateTime.Now }; transactionCase.Events.Add(caseEvent); await caseRepository.SaveChanges(); var agentSid = agentRepository .Query(a => a.PairedCustomer.ID == transaction.Account.Owner.ID) .Select(a => a.SID) .Single(); await taskRouter.CreateTask(transactionCase.ID, agentSid, model.AgentSkill); } var responseModel = new CaseCreatedModel { Id = transactionCase.ID, IsCreated = true }; var response = new ApiResponse <CaseCreatedModel>(responseModel); return(response); } catch (Exception e) { return(HandleErrorAndReturnStatus <ApiResponse <CaseCreatedModel> >(e)); } }
public async Task <HttpResponseMessage> CreateCase(CasePostModel model) { var response = await service.GetOrCreateTransactionCase(model); return(SendHttpResponse(response)); }