using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using BlueWest.Data;
using Microsoft.EntityFrameworkCore;
namespace BlueWest.WebApi.EF
{
///
/// Currency table data extensions
///
public static class CurrencyExtensions
{
///
/// Not found projection
///
///
public static (bool, Currency) NotFound() => (false, null);
///
/// Add new Currency
///
///
///
///
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);
}
///
/// Updates currency
///
///
///
///
///
public static (bool, Currency) UpdateCurrency(this CountryDbContext dbContext, int currencyId, CurrencyUpdate currencyToUpdate)
{
var currency = dbContext.Currencies.FirstOrDefault(x => x.Id == currencyId);
if (currency == null) return NotFound();
currency.Update(currencyToUpdate);
dbContext.Update(currency);
var resultOperation = dbContext.SaveChanges() >= 0;
return (resultOperation, currency);
}
public static (bool, string, CountryUnique) AddCountry(
this CountryDbContext dbContext,
int currencyId, CountryCreate countryCreate,
Expression>[] duplicationValidations)
{
var currency = dbContext
.Currencies
.Where(data => data.Id == currencyId)
.Include(o => o.Countries)
.FirstOrDefault();
// 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 currencyToGet = dbContext.Countries.FirstOrDefault(duplicationValidation);
if (currencyToGet != null) return Projection.ErrorMessage($"Duplication Validation failed: {duplicationValidation.Body}");
}
// Creates new currency
var newCountry = new Country(countryCreate);
currency.Countries.Add(newCountry);
var success = dbContext.SaveChanges() >= 0;
return Projection.Success(success, new CountryUnique(newCountry));
}
}
}