public CurrenciesController( IGetCurrencies getCurrencies, IGetCurrencyByCode getCurrencyByCode, IUpsertCurrency upsertCurrency, IDeleteCurrency deleteCurrency, Func <Try <Email>, string, CreateCurrencyModel, Task <ValidationResult> > validate) { this.getCurrencies = getCurrencies; this.getCurrencyByCode = getCurrencyByCode; this.upsertCurrency = upsertCurrency; this.deleteCurrency = deleteCurrency; this.validate = validate; }
internal MoneyModelValidator( Email email, IGetCurrencyByCode getCurrencyByCode) { this.RuleFor(model => model.Value) .GreaterThan(0) .WithMessage("Money value is required."); this.RuleFor(model => model.Currency) .NotNull() .WithMessage("Currency is required.") .SetValidator(new CurrencyModelValidator(email, getCurrencyByCode)); }
internal CreateBudgetModelValidator( Email email, string?id, IGetBudgets getBudgets, IGetCategoryByName getCategoryByName, IGetCurrencyByCode getCurrencyByCode) { this.RuleFor(model => model) .MustAsync(async(budget, _) => { if (budget?.Recurrence == null) { return(true); } var entities = await getBudgets.GetResult(NewGetByAllParam( email, NewFilterBuilder() .Where("year".Equal(budget.Recurrence.Start.Year) .And("month".Equal(budget.Recurrence.Start.Month)) .And("day".Equal(budget.Recurrence.Start.Day)) .And("category".Equal(budget.Category))) .Build())); return(entities .Fold(true)(page => page.Data.All(@try => @try .Fold(true)(item => id != default && item.Id.Equals(new Guid(id)))))); }) .WithMessage("Budget already exists."); this.RuleFor(model => model.Description) .NotEmpty() .WithMessage("Description is required."); this.RuleFor(model => model.Limit) .NotNull() .WithMessage("Limit is required.") .SetValidator(new MoneyModelValidator(email, getCurrencyByCode)); this.RuleFor(model => model.Recurrence) .NotNull() .WithMessage("Recurrence is required.") .SetValidator(new RecurrenceModelValidator()); this.RuleFor(model => model.Category) .NotEmpty() .WithMessage("Category is required.") .MustAsync(async(category, _) => await getCategoryByName.GetResult(NewGetByIdParam(email, category.Name))) .WithMessage("Category not found."); }
internal CreateCurrencyModelValidator( Email email, string currency, IGetCurrencyByCode getCurrencyByCode) { this.RuleFor(model => model.Code) .NotEmpty() .WithMessage("Currency code is required.") .MustAsync(async(code, _) => await getCurrencyByCode.GetResult(NewGetByIdParam(email, currency)) || currency.Equals(code)) .WithMessage("Path currency must be equal to body currency."); this.RuleFor(model => model.Symbol) .NotEmpty() .WithMessage("Currency symbol is required."); }
internal PaymentModelValidator( Email email, IGetCurrencyByCode getCurrencyByCode, IGetPaymentMethodByName getPaymentMethodByName) { this.RuleFor(model => model.Cost) .NotNull() .WithMessage("Cost is required.") .SetValidator(new MoneyModelValidator(email, getCurrencyByCode)); this.RuleFor(model => model.Date) .NotEqual(default(DateTime)) .WithMessage("Payment date is required."); this.RuleFor(model => model.Method) .NotEmpty() .WithMessage("Payment method is required.") .MustAsync(async(method, _) => await getPaymentMethodByName.GetResult(NewGetByIdParam(email, method))) .WithMessage("Payment method not found."); }
internal CreateConfigurationModelValidator( Email email, IGetCategoryByName getCategoryByName, IGetCurrencyByCode getCurrencyByCode, IGetPayeeByName getPayeeByName, IGetPaymentMethodByName getPaymentMethodByName) { this.RuleFor(model => model.Type) .NotEmpty() .WithMessage("Type is required."); this.RuleFor(model => model.PaymentMethod) .NotEmpty() .WithMessage("Payment method is required.") .MustAsync(async(method, _) => await getPaymentMethodByName.GetResult(NewGetByIdParam(email, method))) .WithMessage("Payment method not found."); this.RuleFor(model => model.Currency) .NotNull() .WithMessage("Currency is required.") .SetValidator(new CurrencyModelValidator(email, getCurrencyByCode)); this.RuleFor(model => model.Payee) .NotEmpty() .WithMessage("Payee is required.") .MustAsync(async(payee, _) => await getPayeeByName.GetResult(NewGetByIdParam(email, payee.Name))) .WithMessage("Payee not found."); this.RuleFor(model => model.Category) .NotEmpty() .WithMessage("Category is required.") .MustAsync(async(category, _) => await getCategoryByName.GetResult(NewGetByIdParam(email, category.Name))) .WithMessage("Category not found."); this.RuleFor(model => model.Tags) .NotNull() .NotEmpty() .WithMessage("Must be at least one tag for configuration."); }
internal CreateTransactionModelValidator( Email email, string?id, IGetCategoryByName getCategoryByName, IGetCurrencyByCode getCurrencyByCode, IGetPayeeByName getPayeeByName, IGetPaymentMethodByName getPaymentMethodByName, IGetTransactions getTransactions) { this.RuleFor(model => model) .MustAsync(async(transaction, _) => { if (transaction?.Payment?.Cost == null) { return(true); } var entities = await getTransactions.GetResult(NewGetByAllParam( email, NewFilterBuilder() .Where("year".Equal(transaction.Payment.Date.Year) .And("month".Equal(transaction.Payment.Date.Month)) .And("day".Equal(transaction.Payment.Date.Day)) .And("value".Equal(transaction.Payment.Cost.Value.ToString(GetCultureInfo("en-US")))) .And("category".Equal(transaction.Category)) .And("currency".Equal(transaction.Payment.Cost.Currency.Code)) .And("payee".Equal(transaction.Payee.Name)) .And("paymentMethod".Equal(transaction.Payment.Method))) .Build())); return(entities .Fold(true)(page => page.Data.All(@try => @try .Fold(true)(item => id != default && item.Id.Equals(new Guid(id)))))); }) .WithMessage("Transaction already exists."); this.RuleFor(model => model.Type) .NotEmpty() .WithMessage("Type is required."); this.RuleFor(model => model.Payment) .NotNull() .WithMessage("Payment is required.") .SetValidator(new PaymentModelValidator(email, getCurrencyByCode, getPaymentMethodByName)); this.RuleFor(model => model.Installment) .SetValidator(new CreateInstallmentModelValidator()); this.RuleFor(model => model.Payee) .NotEmpty() .WithMessage("Payee is required.") .MustAsync(async(payee, _) => await getPayeeByName.GetResult(NewGetByIdParam(email, payee.Name))) .WithMessage("Payee not found."); this.RuleFor(model => model.Category) .NotEmpty() .WithMessage("Category is required.") .MustAsync(async(category, _) => await getCategoryByName.GetResult(NewGetByIdParam(email, category.Name))) .WithMessage("Category not found."); this.RuleFor(model => model.Tags) .NotNull() .NotEmpty() .WithMessage("Must be at least one tag for transaction."); }
internal CurrencyModelValidator( Email email, IGetCurrencyByCode getCurrencyByCode) => this.RuleFor(model => model.Code)