diff --git a/BlueWest.Api/BlueWest.Api.csproj b/BlueWest.Api/BlueWest.Api.csproj
index f85aeec..386a0eb 100644
--- a/BlueWest.Api/BlueWest.Api.csproj
+++ b/BlueWest.Api/BlueWest.Api.csproj
@@ -24,8 +24,4 @@
-
-
-
-
diff --git a/BlueWest.Api/Context/Extensions/CountryDbExtensions.cs b/BlueWest.Api/Context/Extensions/CountryDbExtensions.cs
index 0332a65..a90b3b4 100644
--- a/BlueWest.Api/Context/Extensions/CountryDbExtensions.cs
+++ b/BlueWest.Api/Context/Extensions/CountryDbExtensions.cs
@@ -26,7 +26,7 @@ namespace BlueWest.WebApi.EF
int countryId)
{
var country = dbContext.Countries.FirstOrDefault(x => x.Id == countryId);
- if (country == null) return Projection.NotFound;
+ if (country == null) return (false, null);
country.Update(countryUpdate);
dbContext.Countries.Update(country);
var result = dbContext.SaveChanges() >= 0;
@@ -52,7 +52,8 @@ namespace BlueWest.WebApi.EF
var newCurrency = new Currency(currencyCreate);
country.Currencies.Add(newCurrency);
var success = dbContext.SaveChanges() >= 0;
- return Projection.Success(success, country);
+
+ return !success ? (false, "Error saving the changes in the database.", null) : (true, string.Empty, country);
}
///
@@ -63,7 +64,7 @@ namespace BlueWest.WebApi.EF
/// Data to create currency
/// List of expressions
///
- public static (bool, string, Country) AddCurrency(
+ public static (bool, string, CountryUnique) AddCurrency(
this CountryDbContext dbContext,
int countryId, CurrencyCreate currencyCreate,
Expression>[] duplicationValidations)
@@ -84,19 +85,18 @@ namespace BlueWest.WebApi.EF
foreach (var duplicationValidation in duplicationValidations)
{
var currencyToGet = dbContext.Currencies.FirstOrDefault(duplicationValidation);
- if (currencyToGet != null) return Projection.ErrorMessage($"Duplication Validation failed: {nameof(duplicationValidation.Body.ToString)}");
-
+ if (currencyToGet != null)
+ {
+ return (false, $"Duplication Validation failed: {nameof(duplicationValidation.Body.ToString)}", null);
+ }
}
// Creates new currency
var newCurrency = new Currency(currencyCreate);
country.Currencies.Add(newCurrency);
var success = dbContext.SaveChanges() >= 0;
- return Projection.Success(success, country);
+ return !success ? (false, "Error saving the changes in the database.", null) : (true, string.Empty, new CountryUnique(country));
}
-
-
-
}
}
diff --git a/BlueWest.Api/Context/Extensions/CurrencyExtensions.cs b/BlueWest.Api/Context/Extensions/CurrencyExtensions.cs
index 0dac00a..f7406e4 100644
--- a/BlueWest.Api/Context/Extensions/CurrencyExtensions.cs
+++ b/BlueWest.Api/Context/Extensions/CurrencyExtensions.cs
@@ -2,6 +2,7 @@ using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
+using System.Threading.Tasks;
using BlueWest.Data;
using Microsoft.EntityFrameworkCore;
@@ -13,12 +14,6 @@ namespace BlueWest.WebApi.EF
public static class CurrencyExtensions
{
- ///
- /// Not found projection
- ///
- ///
- public static (bool, Currency) NotFound() => (false, null);
-
///
/// Add new Currency
///
@@ -43,8 +38,8 @@ namespace BlueWest.WebApi.EF
///
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();
+ 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;
@@ -52,18 +47,27 @@ namespace BlueWest.WebApi.EF
}
+ ///
+ /// Add Country associated with specified 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();
+ 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);
@@ -71,17 +75,21 @@ namespace BlueWest.WebApi.EF
// 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}");
+ 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 Projection.Success(success, new CountryUnique(newCountry));
+ return (success, string.Empty, new CountryUnique(newCountry));
}
-
+
}
}
diff --git a/BlueWest.Api/Context/Extensions/Projection.cs b/BlueWest.Api/Context/Extensions/Projection.cs
deleted file mode 100644
index 64ec0c8..0000000
--- a/BlueWest.Api/Context/Extensions/Projection.cs
+++ /dev/null
@@ -1,26 +0,0 @@
-using BlueWest.Data;
-
-namespace BlueWest.WebApi.EF
-{
- public static class Projection
- {
- public static readonly (bool, Country) NotFound = (false, null);
-
- ///
- /// Returns Error Message projection
- ///
- ///
- /// (false, message, null)
- public static (bool, string, T) ErrorMessage(string message) where T : class => (false, message, null);
-
-
- ///
- /// Returns Success intent projection
- ///
- /// Success message
- /// Entity Object
- /// (bool success, Country country)
- public static (bool, string, T) Success(bool success, T dataObject) where T : class => (success, "1", dataObject);
- }
-}
-
diff --git a/BlueWest.Api/Controllers/CountryController.cs b/BlueWest.Api/Controllers/CountryController.cs
index d125de5..794dc74 100644
--- a/BlueWest.Api/Controllers/CountryController.cs
+++ b/BlueWest.Api/Controllers/CountryController.cs
@@ -177,7 +177,7 @@ namespace BlueWest.WebApi.Controllers
return new ConflictObjectResult(message);
}
- return Ok(new CountryUnique(country));
+ return Ok(country);
}
diff --git a/BlueWest.Api/Controllers/CurrencyController.cs b/BlueWest.Api/Controllers/CurrencyController.cs
index ac5acd9..c739418 100644
--- a/BlueWest.Api/Controllers/CurrencyController.cs
+++ b/BlueWest.Api/Controllers/CurrencyController.cs
@@ -1,6 +1,4 @@
using System;
-using System.Collections.Generic;
-using System.Collections.Immutable;
using System.Linq;
using System.Linq.Expressions;
using BlueWest.Data;
@@ -15,10 +13,10 @@ namespace BlueWest.WebApi.Controllers
///
[ApiController]
[Route("[controller]")]
- public class CurrencyController : ControllerBase
+ public partial class CurrencyController : ControllerBase
{
private readonly CountryDbContext _dbContext;
-
+
///
/// Api Controller for Currency data
///
@@ -40,11 +38,11 @@ namespace BlueWest.WebApi.Controllers
var currencies = _dbContext.Currencies
.Select(currency => new CurrencyUnique(currency))
.ToArray();
-
+
return Ok(currencies);
}
-
-
+
+
///
/// Gets a currency by the currency number (id)
///
@@ -55,11 +53,12 @@ namespace BlueWest.WebApi.Controllers
[HttpGet("{currencyId}", Name = nameof(GetCurrencyById))]
public ActionResult GetCurrencyById(int currencyId)
{
- var currency = _dbContext
- .Currencies
- .Where(x => x.Id == currencyId)
- .Select(x => new CurrencyUnique(x))
- .FirstOrDefault();
+ var queryResult =
+ from aCurrency in _dbContext.Currencies
+ where aCurrency.Id == currencyId
+ select new CurrencyUnique(aCurrency);
+
+ var currency = queryResult.SingleOrDefault();
if (currency != null)
{
@@ -78,15 +77,15 @@ namespace BlueWest.WebApi.Controllers
[HttpPost]
public ActionResult AddCurrency(CurrencyCreate currencyToCreate)
{
-
- var (success, newCurrency) = _dbContext.AddCurrency(currencyToCreate);
+ var (success, newCurrency) = _dbContext.AddCurrency(currencyToCreate);
if (!success)
{
return new NotFoundResult();
}
-
- return CreatedAtRoute(nameof(GetCurrencyById), new {CurrencyId = newCurrency.Code}, new CurrencyUnique(newCurrency));
+
+ return CreatedAtRoute(nameof(GetCurrencyById), new {CurrencyId = newCurrency.Code},
+ new CurrencyUnique(newCurrency));
}
///
@@ -110,34 +109,60 @@ namespace BlueWest.WebApi.Controllers
return new NotFoundResult();
}
+ ///
+ /// Gets a currency by the currency number (id)
+ ///
+ /// The id of the currency to get
+ ///
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status404NotFound)]
+ [HttpGet("{currencyId}/countries/{countryId}", Name = nameof(GetCurrencyById))]
+ public ActionResult GetCountry(int currencyId, int countryId)
+ {
+ var countryQuery =
+ from aCurrency in _dbContext.Currencies
+ where aCurrency.Id == currencyId
+ let countries = aCurrency.Countries
+ from country in countries
+ where country.Id == countryId
+ select new CountryUnique(country);
+
+ var queryResult = countryQuery.SingleOrDefault();
+
+ if (queryResult == null)
+ {
+ return new NotFoundResult();
+ }
+
+ return Ok(queryResult);
+
+ }
+
///
/// Add Currency to the table of currencies
///
- /// Currency data to create
+ ///
+ ///
///
[ProducesResponseType(StatusCodes.Status201Created)]
- [HttpPost]
+ [HttpPost("{currencyId}/countries")]
public ActionResult AddCountry(int currencyId, CountryCreate countryToCreate)
{
-
- var (result, message, country) = _dbContext.AddCountry(currencyId, countryToCreate,
+ var (success, message, country) = _dbContext.AddCountry(currencyId, countryToCreate,
new Expression>[]
{
x => x.Code == countryToCreate.Code,
y => y.StateName == countryToCreate.StateName,
z => z.Alpha2Code == countryToCreate.Alpha2Code
-
});
- if (!result)
+ if (!success)
{
return new ConflictObjectResult(message);
}
-
+
return Ok(country);
}
-
-
-
+
}
}
\ No newline at end of file
diff --git a/BlueWest.Api/RepoGeneratorAttribute.cs b/BlueWest.Api/RepoGeneratorAttribute.cs
new file mode 100644
index 0000000..8e9def1
--- /dev/null
+++ b/BlueWest.Api/RepoGeneratorAttribute.cs
@@ -0,0 +1,14 @@
+using System;
+
+namespace BlueWest.WebApi
+{
+ [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
+ public class RepoGeneratorAttribute : Attribute
+ {
+ public RepoGeneratorAttribute()
+ {
+
+ }
+ }
+}
+