Add SQLite DB option
This commit is contained in:
parent
6f5a92ec74
commit
972838d39b
|
@ -19,6 +19,17 @@
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Authorization" Version="6.0.8" />
|
<PackageReference Include="Microsoft.AspNetCore.Authorization" Version="6.0.8" />
|
||||||
<PackageReference Include="Microsoft.AspNetCore.Authorization.Policy" Version="2.2.0" />
|
<PackageReference Include="Microsoft.AspNetCore.Authorization.Policy" Version="2.2.0" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.2">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.8" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.2">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.2-mauipre.1.22102.15" />
|
||||||
|
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="6.0.2-mauipre.1.22054.8" />
|
||||||
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="6.0.2" />
|
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="6.0.2" />
|
||||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
|
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.4.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
using BlueWest.Data;
|
using BlueWest.Data;
|
||||||
using BlueWest.WebApi.EF.Model;
|
using BlueWest.WebApi.EF.Model;
|
||||||
using BlueWest.EfMethods;
|
using BlueWest.EfMethods;
|
||||||
|
using BlueWest.WebApi.Extensions;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
|
@ -91,6 +92,7 @@ namespace BlueWest.WebApi.EF
|
||||||
{
|
{
|
||||||
base.OnModelCreating(modelBuilder);
|
base.OnModelCreating(modelBuilder);
|
||||||
modelBuilder.ConfigureCurrentDbModel();
|
modelBuilder.ConfigureCurrentDbModel();
|
||||||
|
modelBuilder.AddCurrencyAndCountryData();
|
||||||
}
|
}
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
|
@ -21,8 +21,10 @@ public static (bool, {returnTypeFullName}[]) Get{propertyName}(this {contextFull
|
||||||
query.Skip(skip).Take(take);
|
query.Skip(skip).Take(take);
|
||||||
|
|
||||||
if (where != null) query.Where(where);
|
if (where != null) query.Where(where);
|
||||||
|
if(orderBy != null)
|
||||||
|
{
|
||||||
if (orderDir == 1) query.OrderBy(orderBy);
|
if (orderDir == 1) query.OrderBy(orderBy);
|
||||||
else query.OrderByDescending(orderBy);
|
else query.OrderByDescending(orderBy);
|
||||||
|
}
|
||||||
return (query.Any(), query.ToArray());
|
return (query.Any(), query.ToArray());
|
||||||
}
|
}
|
|
@ -141,8 +141,8 @@ namespace BlueWest.WebApi.Controllers
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
[ProducesResponseType(StatusCodes.Status404NotFound)]
|
||||||
[HttpGet("{currencyId}/countries/{countryId}", Name = nameof(GetCurrencyById))]
|
[HttpGet("{currencyId}/countries/{countryId}", Name = nameof(GetCountryFromCurrency))]
|
||||||
public ActionResult GetCountry(int currencyId, int countryId)
|
public ActionResult GetCountryFromCurrency(int currencyId, int countryId)
|
||||||
{
|
{
|
||||||
var countryQuery =
|
var countryQuery =
|
||||||
from aCurrency in _dbContext.Currencies
|
from aCurrency in _dbContext.Currencies
|
||||||
|
|
|
@ -121,6 +121,11 @@ namespace BlueWest.WebApi.EF.Model
|
||||||
return modelBuilder;
|
return modelBuilder;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Migrations
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using BlueWest.Data;
|
||||||
|
using BlueWest.WebApi.EF.Model;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace BlueWest.WebApi.Extensions
|
||||||
|
{
|
||||||
|
public static class ModelBuilderMigrationExtensions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Setup the database model
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="modelBuilder"></param>
|
||||||
|
public static void AddCurrencyAndCountryData(this ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
|
||||||
|
var countriesToAdd = new List<Country>();
|
||||||
|
var country = new Country();
|
||||||
|
|
||||||
|
country.Id = 1;
|
||||||
|
country.Code = 1;
|
||||||
|
country.Name = "United States";
|
||||||
|
country.Alpha2Code = "US";
|
||||||
|
country.StateName = "United States of America";
|
||||||
|
countriesToAdd.Add(country);
|
||||||
|
|
||||||
|
modelBuilder
|
||||||
|
.Entity<Country>()
|
||||||
|
.HasData(countriesToAdd.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ using Microsoft.Extensions.Configuration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
|
using Microsoft.Extensions.Configuration;
|
||||||
|
|
||||||
namespace BlueWest.WebApi
|
namespace BlueWest.WebApi
|
||||||
{
|
{
|
||||||
|
@ -14,6 +15,8 @@ namespace BlueWest.WebApi
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class StartupExtensions
|
public static class StartupExtensions
|
||||||
{
|
{
|
||||||
|
private static MySqlServerVersion GetMySqlServerVersion(int major, int minor, int build) => new (new Version(major, minor, build));
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Get MYSQL Connection String
|
/// Get MYSQL Connection String
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -25,10 +28,14 @@ namespace BlueWest.WebApi
|
||||||
IConfiguration configuration,
|
IConfiguration configuration,
|
||||||
IWebHostEnvironment environment)
|
IWebHostEnvironment environment)
|
||||||
{
|
{
|
||||||
optionsBuilder.UseMySql(configuration.GetConnectionString("LocalMySQL"),
|
|
||||||
new MySqlServerVersion(new Version(8, 0, 11)))
|
optionsBuilder
|
||||||
.UseMySql(new MySqlServerVersion(new Version(8, 0, 11)),
|
.UseMySql(configuration.GetConnectionString("DockerMySQL"), GetMySqlServerVersion(8, 0, 11))
|
||||||
builder => { builder.EnableRetryOnFailure(6, TimeSpan.FromSeconds(3), null); });
|
.UseMySql(GetMySqlServerVersion(8, 0, 11),
|
||||||
|
builder =>
|
||||||
|
{
|
||||||
|
builder.EnableRetryOnFailure(6, TimeSpan.FromSeconds(3), null);
|
||||||
|
});
|
||||||
|
|
||||||
// The following three options help with debugging, but should
|
// The following three options help with debugging, but should
|
||||||
// be changed or removed for production.
|
// be changed or removed for production.
|
||||||
|
@ -50,7 +57,7 @@ namespace BlueWest.WebApi
|
||||||
/// <param name="configuration"></param>
|
/// <param name="configuration"></param>
|
||||||
/// <param name="environment"></param>
|
/// <param name="environment"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static IServiceCollection PrepareDatabasePool(this IServiceCollection serviceCollection,
|
public static IServiceCollection PrepareMySQLDatabasePool(this IServiceCollection serviceCollection,
|
||||||
IConfiguration configuration, IWebHostEnvironment environment)
|
IConfiguration configuration, IWebHostEnvironment environment)
|
||||||
{
|
{
|
||||||
return serviceCollection
|
return serviceCollection
|
||||||
|
@ -59,5 +66,23 @@ namespace BlueWest.WebApi
|
||||||
.AddDbContextPool<FinanceDbContext>(options => options.GetMySqlSettings(configuration, environment))
|
.AddDbContextPool<FinanceDbContext>(options => options.GetMySqlSettings(configuration, environment))
|
||||||
.AddDbContextPool<CompanyDbContext>(options => options.GetMySqlSettings(configuration, environment));
|
.AddDbContextPool<CompanyDbContext>(options => options.GetMySqlSettings(configuration, environment));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Setup database Contexts
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="serviceCollection"></param>
|
||||||
|
/// <param name="configuration"></param>
|
||||||
|
/// <param name="environment"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static IServiceCollection PrepareSQLLiteDatabasePool(this IServiceCollection serviceCollection,
|
||||||
|
IConfiguration configuration, IWebHostEnvironment environment)
|
||||||
|
{
|
||||||
|
return serviceCollection
|
||||||
|
.AddDbContextPool<UserDbContext>(options => options.UseSqlite("Data Source=BlueWest.Api.db"))
|
||||||
|
.AddDbContextPool<CountryDbContext>(options => options.UseSqlite("Data Source=BlueWest.Api.db"))
|
||||||
|
.AddDbContextPool<FinanceDbContext>(options => options.UseSqlite("Data Source=BlueWest.Api.db"))
|
||||||
|
.AddDbContextPool<CompanyDbContext>(options => options.UseSqlite("Data Source=BlueWest.Api.db"));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,9 +0,0 @@
|
||||||
namespace BlueWest.Data;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Auth Manager
|
|
||||||
/// </summary>
|
|
||||||
public class AuthManager
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
|
@ -81,10 +81,30 @@ namespace BlueWest.WebApi
|
||||||
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
var xmlPath = Path.Combine(AppContext.BaseDirectory, xmlFile);
|
||||||
options.IncludeXmlComments(xmlPath);
|
options.IncludeXmlComments(xmlPath);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
IConfigurationRoot configuration = new ConfigurationBuilder()
|
||||||
|
.AddJsonFile("config.json")
|
||||||
|
.Build();
|
||||||
|
|
||||||
|
var allowedDatabase = configuration["database"];
|
||||||
|
|
||||||
services
|
services
|
||||||
.AddSingleton<EventManager>()
|
.AddSingleton<EventManager>();
|
||||||
.PrepareDatabasePool(_configuration, _environment)
|
|
||||||
.AddScoped<ExchangeInterface>();
|
if (allowedDatabase == "mysql")
|
||||||
|
{
|
||||||
|
services
|
||||||
|
.PrepareMySQLDatabasePool(_configuration, _environment);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (allowedDatabase == "sqlite")
|
||||||
|
{
|
||||||
|
services.PrepareSQLLiteDatabasePool(_configuration, _environment);
|
||||||
|
}
|
||||||
|
|
||||||
|
services.AddScoped<ExchangeInterface>();
|
||||||
|
|
||||||
|
|
||||||
// services.AddGrpc();
|
// services.AddGrpc();
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,6 @@
|
||||||
},
|
},
|
||||||
"AllowedHosts": "*",
|
"AllowedHosts": "*",
|
||||||
"ConnectionStrings": {
|
"ConnectionStrings": {
|
||||||
"LocalMySQL": "server=db;user=blueuser;password=dXjw127124dJ;database=bluedb;"
|
"DockerMySQL": "server=db;user=blueuser;password=dXjw127124dJ;database=bluedb;"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"database": "sqlite", // use sqlite or mysql
|
||||||
|
"environment": "dev"
|
||||||
|
}
|
Loading…
Reference in New Issue