96 lines
3.4 KiB
C#
96 lines
3.4 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Linq.Expressions;
|
|
using System.Threading.Tasks;
|
|
using BlueWest.Data;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace BlueWest.WebApi.EF
|
|
{
|
|
/// <summary>
|
|
/// Currency table data extensions
|
|
/// </summary>
|
|
public static partial class CurrencyExtensions
|
|
{
|
|
|
|
/// <summary>
|
|
/// Add new Currency
|
|
/// </summary>
|
|
/// <param name="dbContext"></param>
|
|
/// <param name="currencyToCreate"></param>
|
|
/// <returns></returns>
|
|
public static (bool, Currency) AddCurrency(this CountryDbContext dbContext, CurrencyCreate currencyToCreate)
|
|
{
|
|
var newCurrency = new Currency(currencyToCreate);
|
|
dbContext.Add(newCurrency);
|
|
var resultOperation = dbContext.SaveChanges() >= 0;
|
|
return (resultOperation, newCurrency);
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// Updates currency
|
|
/// </summary>
|
|
/// <param name="dbContext"></param>
|
|
/// <param name="currencyId"></param>
|
|
/// <param name="currencyToUpdate"></param>
|
|
/// <returns></returns>
|
|
public static (bool, Currency) UpdateCurrency(this CountryDbContext dbContext, int currencyId, CurrencyUpdate currencyToUpdate)
|
|
{
|
|
var currency = dbContext.Currencies.SingleOrDefault(x => x.Id == currencyId);
|
|
if (currency == null) return (false, null);
|
|
currency.Update(currencyToUpdate);
|
|
dbContext.Update(currency);
|
|
var resultOperation = dbContext.SaveChanges() >= 0;
|
|
return (resultOperation, currency);
|
|
|
|
}
|
|
|
|
/// <summary>
|
|
/// Add Country associated with specified Currency.
|
|
/// </summary>
|
|
/// <param name="dbContext"></param>
|
|
/// <param name="currencyId"></param>
|
|
/// <param name="countryCreate"></param>
|
|
/// <param name="duplicationValidations"></param>
|
|
/// <returns></returns>
|
|
public static (bool, string, CountryUnique) AddCountry(
|
|
this CountryDbContext dbContext,
|
|
int currencyId, CountryCreate countryCreate,
|
|
Expression<Func<Country,bool>>[] duplicationValidations)
|
|
{
|
|
|
|
var queryable = from aCurrency in dbContext.Currencies
|
|
where aCurrency.Id == currencyId
|
|
select aCurrency;
|
|
|
|
queryable.Include(x => x.Countries);
|
|
|
|
var currency = queryable.SingleOrDefault();
|
|
|
|
// Check if currency exists
|
|
if (currency == null) return (false, $"{nameof(Currency)}: {currencyId} - Not found.", null);
|
|
|
|
// Check if there's currency with the same code
|
|
foreach (var duplicationValidation in duplicationValidations)
|
|
{
|
|
var countryToCheck = dbContext.Countries.FirstOrDefault(duplicationValidation);
|
|
|
|
if (countryToCheck != null)
|
|
{
|
|
return (false, $"Duplication Validation failed: {duplicationValidation.Body}", null);
|
|
}
|
|
}
|
|
|
|
// Creates new currency
|
|
var newCountry = new Country(countryCreate);
|
|
currency.Countries.Add(newCountry);
|
|
var success = dbContext.SaveChanges() >= 0;
|
|
return (success, string.Empty, new CountryUnique(newCountry));
|
|
}
|
|
|
|
}
|
|
}
|
|
|