Adding database configuration - wip

This commit is contained in:
2024-09-05 01:52:07 +02:00
parent b638c48104
commit 998a4d5ab9
13 changed files with 210 additions and 8 deletions

View File

@@ -0,0 +1,26 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.EntityFrameworkCore;
using MongoDB.EntityFrameworkCore.Extensions;
using BasicDotnetTemplate.MainProject.Models.Database.Mongo;
namespace BasicDotnetTemplate.MainProject.Core.Database
{
public class MongoDbContext : DbContext
{
public MongoDbContext(DbContextOptions<MongoDbContext> options) : base(options) { }
public DbSet<Log> Logs { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Log>().ToCollection("Logs");
}
}
}

View File

@@ -0,0 +1,20 @@
using Microsoft.EntityFrameworkCore;
using BasicDotnetTemplate.MainProject.Models.Database.SqlServer;
namespace BasicDotnetTemplate.MainProject.Core.Database
{
public class SqlServerContext : DbContext
{
public SqlServerContext(DbContextOptions<SqlServerContext> options)
: base(options)
{
}
public DbSet<User> Users { get; set; }
}
}

View File

@@ -13,9 +13,24 @@
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.AspNetCore" Version="2.2.0" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Abstractions" Version="8.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.8">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.8" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="8.0.8">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
<PackageReference Include="MongoDB.Driver" Version="2.28.0" />
<PackageReference Include="MongoDB.EntityFrameworkCore" Version="8.1.0" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
<PackageReference Include="NLog" Version="5.2.8" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.3.8" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="8.0.4" />
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Annotations" Version="6.5.0" />
<PackageReference Include="Swashbuckle.AspNetCore.Filters" Version="8.0.0" />

View File

@@ -0,0 +1,11 @@
using MongoDB.Bson;
using MongoDB.Bson.Serialization.Attributes;
namespace BasicDotnetTemplate.MainProject.Models.Database.Mongo
{
public class Log
{
[BsonId]
public ObjectId Id { get; set; }
}
}

View File

@@ -0,0 +1,16 @@
namespace BasicDotnetTemplate.MainProject.Models.Database.SqlServer
{
public class Base
{
public int Id { get; set; }
public DateTime CreationTime { get; set; }
public int CreationUserId { get; set; }
public DateTime UpdateTime { get; set; }
public int UpdateUserId { get; set; }
public DateTime DeletionTime { get; set; }
public int DeletionUserId { get; set; }
}
}

View File

@@ -0,0 +1,12 @@
using System.Text.Json.Serialization;
namespace BasicDotnetTemplate.MainProject.Models.Database.SqlServer
{
public class Role : Base
{
public required string Name { get; set; }
}
}

View File

@@ -0,0 +1,19 @@
using System.Text.Json.Serialization;
namespace BasicDotnetTemplate.MainProject.Models.Database.SqlServer
{
public class User : Base
{
public required string Username { get; set; }
public required string FirstName { get; set; }
public required string LastName { get; set; }
public required string Email { get; set; }
public required Role Role { get; set; }
[JsonIgnore]
public required string PasswordHash { get; set; }
}
}

View File

@@ -6,6 +6,7 @@ public class AppSettings
public Settings? Settings { get; set; }
public PrivateSettings? PrivateSettings { get; set; }
public OpenApiSettings? OpenApiSettings { get; set; }
public DatabaseSettings? DatabaseSettings { get; set; }
#nullable disable
}

View File

@@ -0,0 +1,9 @@
namespace BasicDotnetTemplate.MainProject.Models.Settings;
public class DatabaseSettings
{
#nullable enable
public string? SqlServerConnectionString { get; set; }
public MongoDbSettings? MongoDbSettings { get; set; }
#nullable disable
}

View File

@@ -0,0 +1,9 @@
namespace BasicDotnetTemplate.MainProject.Models.Settings;
public class MongoDbSettings
{
#nullable enable
public string? MongoDbConnectionString { get; set; }
public string? DatabaseName { get; set; }
#nullable disable
}

View File

@@ -1,11 +1,10 @@
using System;
using System.Runtime.CompilerServices;
using Microsoft.OpenApi.Models;
using NLog;
using NLog;
using BasicDotnetTemplate.MainProject.Models.Settings;
using System.Reflection;
using BasicDotnetTemplate.MainProject.Utils;
namespace BasicDotnetTemplate.MainProject;
public static class ReflectionProgram
@@ -41,8 +40,10 @@ internal static class Program
AppSettings appSettings = ProgramUtils.AddConfiguration(ref builder);
ProgramUtils.AddServices(ref builder);
ProgramUtils.AddOpenApi(ref builder, appSettings);
ProgramUtils.AddDbContext(ref builder, appSettings);
WebApplication app = builder.Build();
ProgramUtils.AddMiddlewares(ref app);
Logger.Info("[Program][Initialize] End building");
return app;
}

View File

@@ -1,9 +1,11 @@
using System;
using System.Runtime.CompilerServices;
using Microsoft.EntityFrameworkCore;
using Microsoft.OpenApi.Models;
using MongoDB.Driver;
using NLog;
using BasicDotnetTemplate.MainProject.Core.Database;
using BasicDotnetTemplate.MainProject.Models.Settings;
using System.Reflection;
namespace BasicDotnetTemplate.MainProject.Utils;
@@ -125,4 +127,53 @@ public static class ProgramUtils
Logger.Info("[ProgramUtils][AddMiddlewares] Done middlewares");
}
public static void AddDbContext(ref WebApplicationBuilder builder, AppSettings appSettings)
{
Logger.Info("[ProgramUtils][AddDbContext] Adding DbContext");
var databaseAdded = "";
var connectionString = appSettings?.DatabaseSettings?.SqlServerConnectionString ?? String.Empty;
if (!String.IsNullOrEmpty(connectionString))
{
connectionString = connectionString.Replace("SQLSERVER_DB_SERVER", Environment.GetEnvironmentVariable("SQLSERVER_DB_SERVER"));
connectionString = connectionString.Replace("SQLSERVER_DB_DATABASE", Environment.GetEnvironmentVariable("SQLSERVER_DB_DATABASE"));
connectionString = connectionString.Replace("SQLSERVER_DB_USER", Environment.GetEnvironmentVariable("SQLSERVER_DB_USER"));
connectionString = connectionString.Replace("SQLSERVER_DB_PASSWORD", Environment.GetEnvironmentVariable("SQLSERVER_DB_PASSWORD"));
builder.Services.AddDbContext<SqlServerContext>(options =>
options.UseSqlServer(connectionString));
databaseAdded += "SqlServer";
}
connectionString = appSettings?.DatabaseSettings?.MongoDbSettings?.MongoDbConnectionString ?? String.Empty;
if (!String.IsNullOrEmpty(connectionString))
{
connectionString = connectionString.Replace("MONGODB_DB_SERVER", Environment.GetEnvironmentVariable("MONGODB_DB_SERVER"));
connectionString = connectionString.Replace("MONGODB_DB_DATABASE", Environment.GetEnvironmentVariable("MONGODB_DB_DATABASE"));
connectionString = connectionString.Replace("MONGODB_DB_USER", Environment.GetEnvironmentVariable("MONGODB_DB_USER"));
connectionString = connectionString.Replace("MONGODB_DB_PASSWORD", Environment.GetEnvironmentVariable("MONGODB_DB_PASSWORD"));
var mongoClient = new MongoClient(connectionString);
var databaseName = appSettings?.DatabaseSettings?.MongoDbSettings?.DatabaseName ?? Environment.GetEnvironmentVariable("MONGODB_DB_DATABASE") ?? String.Empty;
if (!String.IsNullOrEmpty(databaseName))
{
var dbContextOptions = new DbContextOptionsBuilder<MongoDbContext>()
.UseMongoDB(mongoClient, databaseName);
}
databaseAdded += (String.IsNullOrEmpty(databaseAdded) ? "" : ", ") + "MongoDB";
}
var message = String.IsNullOrEmpty(databaseAdded) ? "No DbContext added" : $"{databaseAdded} added";
Logger.Info($"[ProgramUtils][AddDbContext] {message}");
}
}

View File

@@ -6,6 +6,13 @@
"Version": "v1.0",
"Description": "This template contains basic configuration for a .Net 8 backend"
},
"DatabaseSettings": {
"SqlServerConnectionString": "Server=SQLSERVER_DB_SERVER;Initial Catalog=SQLSERVER_DB_DATABASE;User Id=SQLSERVER_DB_USER;Password=SQLSERVER_DB_PASSWORD;MultipleActiveResultSets=True;Encrypt=True;TrustServerCertificate=True;Connection Timeout=30;",
"MongoDbSettings": {
"MongoDbConnectionString": "mongodb://MONGODB_DB_USER:MONGODB_DB_PASSWORD@MONGODB_DB_SERVER:27017/MONGODB_DB_DATABASE",
"DatabaseName": "BaseDb"
}
},
"OpenApiSettings": {
"TermsOfServiceUrl": "",
"OpenApiContact": {
@@ -16,7 +23,12 @@
"Name": "MIT License",
"Url": "https://github.com/csimonapastore/BasicDotnetTemplate/blob/main/LICENSE.md"
}
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
}
}
}