1+ namespace JasperFx . Core . Descriptions ;
2+
3+ public enum DatabaseUsage
4+ {
5+ /// <summary>
6+ /// No database usage here of any sort
7+ /// </summary>
8+ None ,
9+
10+ /// <summary>
11+ /// Using a single database regardless of tenancy
12+ /// </summary>
13+ Single ,
14+
15+ /// <summary>
16+ /// Using a static number of databases
17+ /// </summary>
18+ StaticMultiple ,
19+
20+ /// <summary>
21+ /// Using a dynamic number of databases that should
22+ /// be expected to potentially change at runtime
23+ /// </summary>
24+ DynamicMultiple
25+ }
26+
27+ public class DatabaseCapability : OptionsDescription
28+ {
29+ public DatabaseUsage Usage { get ; set ; } = DatabaseUsage . Single ;
30+
31+ // Also holds tenants
32+ public List < DatabaseDescription > Databases { get ; set ; } = [ ] ;
33+ }
34+
35+ public class DatabaseDescription : OptionsDescription
36+ {
37+ /// <summary>
38+ /// Identifier within the Wolverine system
39+ /// </summary>
40+ public string Identifier { get ; set ; } = "Default" ;
41+
42+ /// <summary>
43+ /// Descriptive name for the database engine. Example: "SqlServer" or "PostgreSQL"
44+ /// </summary>
45+ public string DatabaseEngine { get ; set ; }
46+
47+ public List < string > TenantIds { get ; set ; } = new ( ) ;
48+ }
49+
50+ // This definitely goes into JasperFx.Core. Also need a way to
51+ // get out tenanted message stores too though. Put something separate
52+ // in Weasel for multi-tenancy for EF Core that can generate databases
53+ public interface IDatabaseUser
54+ {
55+ DatabaseUsage Usage { get ; }
56+
57+ /// <summary>
58+ /// Evaluate the databases used at runtime
59+ /// </summary>
60+ /// <param name="token"></param>
61+ /// <returns></returns>
62+ ValueTask < IReadOnlyList < DatabaseDescription > > DescribeDatabasesAsync ( CancellationToken token ) ;
63+ }
0 commit comments