diff --git a/BlueWest.Api/BlueWest.Api.csproj b/BlueWest.Api/BlueWest.Api.csproj
index 857f5ac..4a620bb 100644
--- a/BlueWest.Api/BlueWest.Api.csproj
+++ b/BlueWest.Api/BlueWest.Api.csproj
@@ -5,16 +5,16 @@
10
BlueWest.WebApi
true
+ true
+ bin\$(Configuration)\$(AssemblyName).xml
+ true
+
-
-
-
-
-
+
diff --git a/BlueWest.Api/Controllers/CountryController.cs b/BlueWest.Api/Controllers/CountryController.cs
index 899506a..5358096 100644
--- a/BlueWest.Api/Controllers/CountryController.cs
+++ b/BlueWest.Api/Controllers/CountryController.cs
@@ -17,6 +17,26 @@ public class CountryController : ControllerBase
}
+ ///
+ /// Add Country
+ ///
+ ///
+ /// The newly created country
+ /// ///
+ /// Creates a Country.
+ ///
+ ///
+ /// Sample request:
+ ///
+ /// POST /Countries
+ /// {
+ /// "code": 1,
+ /// "stateName": "United States of America",
+ /// "tld": "us"
+ /// }
+ ///
+ ///
+ /// Returns the newly created country
[ProducesResponseType(StatusCodes.Status201Created)]
[HttpPost]
public ActionResult AddCountry(Country country)
@@ -26,23 +46,54 @@ public class CountryController : ControllerBase
return CreatedAtRoute(nameof(GetCountryById), new {countryId = country.Code}, country);
}
+ ///
+ /// Updates a Country
+ ///
+ /// Payload with country data to update. Note that the Code is the primary key and can't be changed.
+ ///
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status400BadRequest)]
[HttpPut("countries/{country.Code}")]
- public ActionResult UpdateCountry(Country country)
+ public ActionResult UpdateCountry(Country countryToUpdate)
{
- var array = _dbContext.Countries.FirstOrDefault(x => x.Code == country.Code);
+ var country = _dbContext.Countries.FirstOrDefault(x => x.Code == countryToUpdate.Code);
- if (array != null)
+ if (country != null)
{
- return Ok(array);
+ var updatedCountry = new Country(country.Code, countryToUpdate.StateName, countryToUpdate.TLD);
+ _dbContext.Countries.Update(updatedCountry);
+ return Ok(updatedCountry);
}
return new NotFoundResult();
}
+ ///
+ /// Get countries
+ ///
+ ///
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status404NotFound)]
+ [HttpGet("countries")]
+ public ActionResult GetCountries()
+ {
+ var array = _dbContext.Countries;
+
+ if (array != null)
+ {
+ return Ok(array.ToArray());
+ }
+
+ return new NotFoundResult();
+ }
+
+ ///
+ /// Get Country by Id
+ ///
+ ///
+ ///
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
[HttpGet("countries/{countryId}", Name = nameof(GetCountryById))]
diff --git a/BlueWest.Api/Dockerfile b/BlueWest.Api/Dockerfile
index a965d8e..e4e1a81 100644
--- a/BlueWest.Api/Dockerfile
+++ b/BlueWest.Api/Dockerfile
@@ -19,6 +19,6 @@ RUN dotnet publish "BlueWest.Api/BlueWest.Api.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
-#ENV ASPNETCORE_URLS http://0.0.0.0:80
+ENV ASPNETCORE_URLS http://0.0.0.0:80
WORKDIR /app
ENTRYPOINT ["dotnet", "BlueWest.Api.dll" ]
diff --git a/BlueWest.Api/MySQL/CountriesDbContext.cs b/BlueWest.Api/MySQL/CountriesDbContext.cs
index 256b531..1507999 100644
--- a/BlueWest.Api/MySQL/CountriesDbContext.cs
+++ b/BlueWest.Api/MySQL/CountriesDbContext.cs
@@ -4,6 +4,9 @@ using Microsoft.Extensions.Configuration;
namespace BlueWest.WebApi.MySQL;
+///
+/// Table containing countries
+///
public class CountriesDbContext : DbContext
{
@@ -15,7 +18,11 @@ public class CountriesDbContext : DbContext
public IConfiguration Configuration;
- public CountriesDbContext(DbContextOptions options) : base(options)
+ ///
+ /// Options to be injected in the app
+ ///
+ ///
+ public CountriesDbContext(DbContextOptions options) : base(options)
{
Database.EnsureCreated();
@@ -29,8 +36,23 @@ public class CountriesDbContext : DbContext
);*/
}
+ ///
+ /// The country number is the primary key
+ /// The currency code is the primary key
+ ///
+ ///
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
+ base.OnModelCreating(modelBuilder);
+ modelBuilder.Entity(builder =>
+ {
+ builder.HasKey(x => x.Code);
+ });
+ modelBuilder.Entity(builder =>
+ {
+ builder.HasKey(x => x.Num);
+ });
+
}
diff --git a/BlueWest.Api/Program.cs b/BlueWest.Api/Program.cs
index ad93092..854a391 100644
--- a/BlueWest.Api/Program.cs
+++ b/BlueWest.Api/Program.cs
@@ -4,6 +4,7 @@ using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Threading.Tasks;
using BlueWest.Core;
@@ -35,20 +36,15 @@ namespace BlueWest.WebApi
public static void Main(string[] args)
{
- Host1 = CreateHostBuilder(args).Build();
+ Host1 = CreateHostBuilder(args)
+ .UseContentRoot(Directory.GetCurrentDirectory())
+ .Build();
Host1.RunAsync();
System.Threading.Thread.Sleep(2500);
_threadServer = new ThreadServer(EventManager);
- BlueWestConsoleBanner();
_threadServer.Init();
}
- private static void BlueWestConsoleBanner()
- {
- Console.WriteLine(" |------------------------------«");
- Console.WriteLine(" » Blue West «");
- Console.WriteLine(" |------------------------------«\n");
- }
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
diff --git a/BlueWest.Api/Properties/launchSettings.json b/BlueWest.Api/Properties/launchSettings.json
index 991a3f9..3d937ec 100644
--- a/BlueWest.Api/Properties/launchSettings.json
+++ b/BlueWest.Api/Properties/launchSettings.json
@@ -24,7 +24,7 @@
"launchUrl": "swagger",
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
- "ASPNETCORE_ENVIRONMENT": "Development"
+ "ASPNETCORE_ENVIRONMENT": "Production"
}
}
}
diff --git a/BlueWest.Api/Startup.cs b/BlueWest.Api/Startup.cs
index 0d1769b..dbdade6 100644
--- a/BlueWest.Api/Startup.cs
+++ b/BlueWest.Api/Startup.cs
@@ -8,7 +8,9 @@ using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
+using System.Reflection;
using System.Threading.Tasks;
using BlueWest.WebApi.MySQL;
using BlueWest.WebApi.Tools;
@@ -52,9 +54,26 @@ namespace BlueWest.WebApi
options.SchemaFilter();
options.SwaggerDoc("v1", new OpenApiInfo
{
- Title = "BlueWest.Api",
- Version = "v1"
+ Title = "BlueWest.Api Documentation",
+ Version = "v1",
+ Description = "A simple example ASP.NET Core Web API",
+ TermsOfService = new Uri("https://example.com/terms"),
+ Contact = new OpenApiContact
+ {
+ Name = "Benny",
+ Email = string.Empty,
+ Url = new Uri("https://git.codeliturgy.com"),
+ },
+ License = new OpenApiLicense
+ {
+ Name = "Use under LICX",
+ Url = new Uri("https://git.codeliturgy.com/license"),
+ }
});
+ // Set the comments path for the Swagger JSON and UI.
+ var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";
+ var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
+ options.IncludeXmlComments(xmlPath);
});
services.AddDbContextPool(options =>
options.GetSqlSettings(Configuration));
@@ -72,12 +91,17 @@ namespace BlueWest.WebApi
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
- if (env.IsDevelopment())
+
+ //app.UseStaticFiles();
+
+ app.UseDeveloperExceptionPage();
+ app.UseSwagger();
+ app.UseSwaggerUI(c =>
{
- app.UseDeveloperExceptionPage();
- app.UseSwagger();
- app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "BlueWest.Api v1"));
- }
+ c.RoutePrefix = "swagger";
+ c.SwaggerEndpoint("/swagger/v1/swagger.json", "BlueWest.Api v1");
+
+ });
//app.UseHttpsRedirection();
diff --git a/BlueWest.Data/Finance/Country.cs b/BlueWest.Data/Finance/Country.cs
index c27b8bb..d035ac8 100644
--- a/BlueWest.Data/Finance/Country.cs
+++ b/BlueWest.Data/Finance/Country.cs
@@ -4,7 +4,19 @@ namespace BlueWest.Data;
public class Country
{
- [Key] public int Code { get; }
- public string StateName { get; }
- public string TLD { get; }
+ public int Code { get; set; } // Primary key
+ public string StateName { get; set; }
+ public string TLD { get; set; }
+
+ public Country(int code, string stateName, string tld)
+ {
+ Code = code;
+ StateName = stateName;
+ TLD = tld;
+ }
+
+ public Country()
+ {
+
+ }
}
\ No newline at end of file
diff --git a/BlueWest.Data/Finance/Currency.cs b/BlueWest.Data/Finance/Currency.cs
index ee40a28..1d76115 100644
--- a/BlueWest.Data/Finance/Currency.cs
+++ b/BlueWest.Data/Finance/Currency.cs
@@ -2,7 +2,7 @@ namespace BlueWest.Data;
public class Currency
{
- public string Code { get; }
- public int Num { get; }
- public Country Country { get; }
+ public int Num { get; set; } // Primary key
+ public string Code { get; set; }
+ public Country Country { get; set; }
}
\ No newline at end of file
diff --git a/BlueWest/Artefacts/AccountArtefact.cs b/BlueWest/Artefacts/AccountArtefact.cs
index 1b0ab59..0931915 100644
--- a/BlueWest/Artefacts/AccountArtefact.cs
+++ b/BlueWest/Artefacts/AccountArtefact.cs
@@ -1,6 +1,7 @@
using System;
using BlueWest.Core.ComponentSystem;
using BlueWest.Tools;
+using PerformanceSolution.Core.System;
namespace PerformanceSolution.Artefacts
{
diff --git a/BlueWest/Artefacts/BlueConsole.cs b/BlueWest/Artefacts/BlueConsole.cs
index 1c5a61e..4a8f0b9 100644
--- a/BlueWest/Artefacts/BlueConsole.cs
+++ b/BlueWest/Artefacts/BlueConsole.cs
@@ -3,10 +3,11 @@ using System.IO;
using BlueWest.Core.ComponentSystem;
using BlueWest.Tools;
using PerformanceSolution.Artefacts;
+using PerformanceSolution.Core.System;
namespace BlueWest.Core
{
- public sealed class BlueConsole : Artefact
+ public sealed class BlueConsole : DisabledArtefact
{
private static string _consolePrompt = ">> ";
diff --git a/BlueWest/Core/System/Artefact.cs b/BlueWest/Core/System/Artefact.cs
index ebf919a..0c8d431 100644
--- a/BlueWest/Core/System/Artefact.cs
+++ b/BlueWest/Core/System/Artefact.cs
@@ -5,23 +5,11 @@ using System.Data;
using System.Threading;
using BlueWest.Coroutines;
using BlueWest.Tools;
+using PerformanceSolution.Core.System;
namespace BlueWest.Core.ComponentSystem
{
- public enum ArtefactFrequency
- {
- T120Hz,
- T60Hz,
- T30Hz,
- T20Hz,
- T10Hz,
- T4Hz ,
- T3Hz ,
- T2Hz ,
- T1Hz
- }
-
public class Artefact
{
@@ -59,8 +47,6 @@ namespace BlueWest.Core.ComponentSystem
private int _componentsCount = 0;
- private readonly ArtefactFrequency BehaviorType;
-
// OLD STUFF
@@ -76,7 +62,7 @@ namespace BlueWest.Core.ComponentSystem
{
_eventManager = eventManager;
- switch (BehaviorType)
+ switch (Frequency)
{
case ArtefactFrequency.T1Hz:
diff --git a/BlueWest/Core/System/ArtefactFrequency.cs b/BlueWest/Core/System/ArtefactFrequency.cs
new file mode 100644
index 0000000..7dc4658
--- /dev/null
+++ b/BlueWest/Core/System/ArtefactFrequency.cs
@@ -0,0 +1,15 @@
+namespace PerformanceSolution.Core.System;
+
+
+public enum ArtefactFrequency
+{
+ T120Hz,
+ T60Hz,
+ T30Hz,
+ T20Hz,
+ T10Hz,
+ T4Hz ,
+ T3Hz ,
+ T2Hz ,
+ T1Hz
+}
\ No newline at end of file
diff --git a/BlueWest/Core/System/DisabledArtefact.cs b/BlueWest/Core/System/DisabledArtefact.cs
new file mode 100644
index 0000000..e559e33
--- /dev/null
+++ b/BlueWest/Core/System/DisabledArtefact.cs
@@ -0,0 +1,16 @@
+using BlueWest.Tools;
+
+namespace PerformanceSolution.Core.System;
+
+public class DisabledArtefact
+{
+
+ protected internal ArtefactFrequency Frequency;
+ protected EventManager _eventManager;
+
+ protected virtual void Update(double delta)
+ {
+
+ }
+
+}
\ No newline at end of file