public async Task <BillViewModel> StoreBillAsync(BillViewModel model, string userId) { //驗證表單 int planId = model.PlanId; var selectedPlan = await _plansService.GetByIdAsync(planId); if (selectedPlan == null) { throw new EntityNotFoundException(new Plan { Id = planId }); } int payWayId = model.PayWayId; var selectedPayWay = _paysService.GetPayWayById(payWayId); if (selectedPayWay == null || !selectedPayWay.Active) { throw new EntityNotFoundException(new PayWay { Id = payWayId }); } //取得訂閱紀錄 var indexModel = await GetSubscribesIndexViewAsync(userId); var selectedPlanView = selectedPlan.MapViewModel(_mapper); //核對方案與金額 var activePlanView = await CheckForExceptionsAsync(userId, indexModel, selectedPlanView); //進行到這裡表示通過驗證. 開始建立Bill var bill = new Bill { UserId = userId, PlanId = activePlanView.Id, Amount = activePlanView.Price, HasDiscount = activePlanView.HasDiscount, PayWayId = payWayId, DeadLine = DateTime.Today.AddDays(_subscribesSettings.BillDaysToExpire).ToEndDate() }; bill = await _billsService.CreateAsync(bill); return(bill.MapViewModel(_mapper)); }