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)); } } }