/// <inheritdoc /> public Budget CreateBudget(int categoryId, decimal amount, string startDate, string endDate) { var periodStart = this.validator.DateString(startDate, nameof(startDate)); var periodEnd = this.validator.DateString(endDate, nameof(endDate)); this.validator.Period(periodStart, periodEnd); this.validator.Amount(amount); return(this.ConcurrentInvoke(() => { var category = this.Context.Categories.GetEntity(categoryId, false); var entity = new BudgetEntity { CategoryId = categoryId, Amount = amount, Spent = Math.Abs(this.Context.Transactions.GetTransactions(categoryId, periodStart, periodEnd).Sum(t => t.Amount)), StartDate = periodStart, EndDate = periodEnd, Category = category, }; this.Context.Budgets.Add(entity); this.Context.SaveChanges(); return entity.AsBudget(); })); }