netcore-blueprint 0.0.63 → 0.0.65

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -9,28 +9,54 @@ namespace Host.API.Extensions
9
9
  this IServiceCollection services,
10
10
  IConfiguration configuration)
11
11
  {
12
- string? mySQLConnectionString =
13
- configuration.GetConnectionString("MySQL");
12
+ var dbEnabled = configuration.GetValue<bool>("Database:Enabled");
14
13
 
15
- if (!string.IsNullOrEmpty(mySQLConnectionString))
14
+ if (!dbEnabled)
16
15
  {
17
- services.AddDbContext<MyDbContext>(options =>
18
- options.UseMySql(
19
- mySQLConnectionString,
20
- ServerVersion.AutoDetect(mySQLConnectionString)));
16
+ Console.WriteLine("⏭️ Database is disabled.");
17
+ return services;
21
18
  }
22
19
 
20
+ var dbType = configuration["Database:Type"]?.ToLower();
21
+
22
+ if (dbType != "mysql")
23
+ return services;
24
+
25
+ var mySQLConnectionString =
26
+ configuration.GetConnectionString("MySql");
27
+
28
+ if (string.IsNullOrEmpty(mySQLConnectionString))
29
+ throw new InvalidOperationException("MySql connection string is missing.");
30
+
31
+ services.AddDbContext<MyDbContext>(options =>
32
+ options.UseMySql(
33
+ mySQLConnectionString,
34
+ ServerVersion.AutoDetect(mySQLConnectionString)));
35
+
36
+ Console.WriteLine("✅ MySQL database registered.");
37
+
23
38
  return services;
24
39
  }
25
40
 
26
41
  public static void ApplyDatabaseMigrations(this WebApplication app)
27
42
  {
43
+ var config = app.Services.GetRequiredService<IConfiguration>();
44
+ var dbEnabled = config.GetValue<bool>("Database:Enabled");
45
+
46
+ if (!dbEnabled)
47
+ {
48
+ Console.WriteLine("⏭️ Skip database migrations (DB disabled).");
49
+ return;
50
+ }
51
+
28
52
  if (!app.Environment.IsDevelopment())
29
53
  return;
30
54
 
31
55
  using var scope = app.Services.CreateScope();
32
56
  var dbContext = scope.ServiceProvider.GetRequiredService<MyDbContext>();
33
57
  dbContext.Database.Migrate();
58
+
59
+ Console.WriteLine("✅ Database migrations applied.");
34
60
  }
35
61
  }
36
62
 
@@ -9,6 +9,7 @@ namespace Host.API.Extensions
9
9
  IConfiguration config,
10
10
  IMvcBuilder mvcBuilder)
11
11
  {
12
+ bool dbEnabled = config.GetValue<bool>("Database:Enabled");
12
13
  var modules = AppDomain.CurrentDomain
13
14
  .GetAssemblies()
14
15
  .SelectMany(a => a.GetTypes())
@@ -27,6 +28,10 @@ namespace Host.API.Extensions
27
28
  continue;
28
29
  }
29
30
 
31
+ if (module.RequiresDatabase && !dbEnabled)
32
+ throw new InvalidOperationException(
33
+ $"{module.Name} requires database but Database:Enabled=false");
34
+
30
35
  Console.WriteLine($"✅ Register module: {module.Name}");
31
36
  module.Register(services, config);
32
37
 
@@ -1,9 +1,20 @@
1
1
  using Host.API.Extensions;
2
+ using Microsoft.AspNetCore.Mvc.ApplicationParts;
2
3
 
3
4
  var builder = WebApplication.CreateBuilder(args);
4
5
 
5
6
  // 1. Central MVC
6
- var mvcBuilder = builder.Services.AddControllers();
7
+ var mvcBuilder = builder.Services
8
+ .AddControllers()
9
+ .ConfigureApplicationPartManager(manager =>
10
+ {
11
+ // 🔥 Clear toàn bộ auto-discovered parts
12
+ manager.ApplicationParts.Clear();
13
+
14
+ // 🔐 Chỉ add Host.API assembly
15
+ manager.ApplicationParts.Add(
16
+ new AssemblyPart(typeof(Program).Assembly));
17
+ });
7
18
 
8
19
  // Core
9
20
  builder.Services.AddApiCore(builder.Configuration);
@@ -3,6 +3,7 @@
3
3
  "MySql": "Server=localhost;Port=3306;Database=test19;User=root;Password=password;"
4
4
  },
5
5
  "Database": {
6
+ "Enabled": true,
6
7
  "Type": "mysql"
7
8
  },
8
9
  "Logging": {
@@ -12,6 +12,7 @@ namespace __MODULE__Module.API
12
12
  public class __MODULE__Module : IModule
13
13
  {
14
14
  public string Name => "__MODULE__";
15
+ public bool RequiresDatabase => true;
15
16
  public void Register(IServiceCollection services, IConfiguration config)
16
17
  {
17
18
  __MODULE__CoreDependencyInjection.AddModule(services);
@@ -7,6 +7,7 @@ namespace Shared.Core.Interfaces.Modules
7
7
  public interface IModule
8
8
  {
9
9
  string Name { get; }
10
+ bool RequiresDatabase { get; }
10
11
  void Register(IServiceCollection services, IConfiguration config);
11
12
  Assembly ApiAssembly { get; }
12
13
  Assembly MappingAssembly { get; }
@@ -9,17 +9,28 @@ namespace Shared.Infrastructure.Services
9
9
  {
10
10
  public class RepositoryFactory<T> : IRepositoryFactory<T> where T : BaseEntity
11
11
  {
12
- private readonly string _databaseType;
12
+ private readonly bool _dbEnabled;
13
+ private readonly string? _databaseType;
13
14
  private readonly IServiceProvider _serviceProvider;
14
15
 
15
16
  public RepositoryFactory(IConfiguration configuration, IServiceProvider serviceProvider)
16
17
  {
17
- _databaseType = configuration["Database:Type"]!;
18
+ _dbEnabled = bool.TryParse(configuration["Database:Enabled"], out var result) && result;
19
+ _databaseType = configuration["Database:Type"];
18
20
  _serviceProvider = serviceProvider;
19
21
  }
20
22
 
21
23
  public IItemInfra<T> CreateItemRepository()
22
24
  {
25
+ if (!_dbEnabled)
26
+ {
27
+ throw new InvalidOperationException(
28
+ $"Database is disabled. Repository for {typeof(T).Name} is not available.");
29
+ }
30
+
31
+ if (string.IsNullOrEmpty(_databaseType))
32
+ throw new InvalidOperationException("Database:Type is not configured.");
33
+
23
34
  var dbType = _databaseType.ToLower();
24
35
  var entityType = typeof(T);
25
36
 
@@ -27,10 +38,11 @@ namespace Shared.Infrastructure.Services
27
38
  {
28
39
  "mysql" => typeof(MySQLItemInfra<>).MakeGenericType(entityType),
29
40
  "mongodb" => typeof(MongoItemInfra<>).MakeGenericType(entityType),
30
- _ => throw new ArgumentException("Invalid database type")
41
+ _ => throw new ArgumentException($"Invalid database type: {_databaseType}")
31
42
  };
32
43
 
33
- return (IItemInfra<T>)ActivatorUtilities.CreateInstance(_serviceProvider, implementationType);
44
+ return (IItemInfra<T>)ActivatorUtilities.CreateInstance(
45
+ _serviceProvider, implementationType);
34
46
  }
35
47
  }
36
48
  }
@@ -12,6 +12,7 @@ namespace UserModule.API
12
12
  public class UserModule: IModule
13
13
  {
14
14
  public string Name => "User";
15
+ public bool RequiresDatabase => true;
15
16
  public void Register(IServiceCollection services, IConfiguration config)
16
17
  {
17
18
  UserCoreDependencyInjection.AddModule(services);
package/README.md CHANGED
@@ -3,21 +3,20 @@ How to make a blueprint
3
3
  - npm uninstall -g netcore-blueprint
4
4
  - npm install -g netcore-blueprint
5
5
  - npm list -g netcore-blueprint
6
- - create-app <AppName> (Sửa connection string)
7
- - create-module <ModuleName> <EntityName>
8
- - copy-module <CopiedModuleName> (Run in the folder Modules right outside the solution) (copy-module <CopiedModuleName> --force)
6
+ - create-app AppName (Sửa connection string)
7
+ - create-module ModuleName EntityName
8
+ - copy-module CopiedModuleName (Run in the folder Modules right outside the solution) (copy-module CopiedModuleName --force)
9
9
 
10
10
  2. Tạo mới 1 module
11
- - Copy lại thư mục item để thêm module mới
12
- - Sửa lại tên toàn bộ namespace
13
- - Thêm ref vào Host.API
14
- - Bật tắt các module không cần thiết
15
- - Bật tắt hoặc chuyển đổi DB nếu cần
11
+ - create-module ModuleName EntityName
12
+ - copy-module CopiedModuleName (Chỉnh sửa, sau đó cho vào thư mục cùng cấp với BlueprintTemplate)
13
+ - Thêm ref vào Host.API trong appsettings, mục "Modules" (Bật tắt qua đây)
16
14
 
17
15
  3. Bỏ module
18
16
  - Xóa module
19
17
  - Bỏ <Folder Name="/Modules/ProductModule/"> ở MyBlueprint.slnx
20
18
  - Bỏ ProjectReference ở Host.API.csproj
19
+ - Bỏ ref ở Host.API trong appsettings
21
20
 
22
21
  4. Mock Data
23
22
  - Tools → NuGet Package Manager → Package Manager Console
@@ -27,5 +26,4 @@ How to make a blueprint
27
26
  - Update-Database
28
27
 
29
28
  5. Todos
30
- - Plug/ Unplug module (config)
31
29
  - Plug/ Unplug database provider (config)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "netcore-blueprint",
3
- "version": "0.0.63",
3
+ "version": "0.0.65",
4
4
  "description": "A custom project blueprint",
5
5
  "main": "create.js",
6
6
  "bin": {