@@ -81,7 +81,7 @@ public static IResourceBuilder<SurrealDbServerResource> AddSurrealServer(
81
81
: SurrealDbContainerImageTags . Tag ;
82
82
83
83
var surrealServer = new SurrealDbServerResource ( name , userName ? . Resource , passwordParameter ) ;
84
-
84
+
85
85
return builder . AddResource ( surrealServer )
86
86
. WithEndpoint ( port : port , targetPort : SurrealDbPort , name : SurrealDbServerResource . PrimaryEndpointName )
87
87
. WithImage ( SurrealDbContainerImageTags . Image , imageTag )
@@ -106,33 +106,44 @@ public static IResourceBuilder<SurrealDbServerResource> AddSurrealServer(
106
106
throw new DistributedApplicationException ( $ "ResourceReadyEvent was published for the '{ surrealServer . Name } ' resource but the connection string was null.") ;
107
107
}
108
108
109
- var options = new SurrealDbOptionsBuilder ( ) . FromConnectionString ( connectionString ) . Build ( ) ;
110
- await using var surrealClient = new SurrealDbClient ( options ) ;
109
+ await EnsuresNsDbCreated ( builder , connectionString , surrealServer , @event . Services , ct ) ;
110
+ } ) ;
111
+ }
112
+
113
+ private static async Task EnsuresNsDbCreated (
114
+ IDistributedApplicationBuilder builder ,
115
+ string connectionString ,
116
+ SurrealDbServerResource surrealServer ,
117
+ IServiceProvider services ,
118
+ CancellationToken ct
119
+ )
120
+ {
121
+ var options = new SurrealDbOptionsBuilder ( ) . FromConnectionString ( connectionString ) . Build ( ) ;
122
+ await using var surrealClient = new SurrealDbClient ( options ) ;
111
123
112
- foreach ( var nsResourceName in surrealServer . Namespaces . Keys )
113
- {
114
- if ( builder . Resources . FirstOrDefault ( n =>
115
- string . Equals ( n . Name , nsResourceName , StringComparison . OrdinalIgnoreCase ) ) is
116
- SurrealDbNamespaceResource surrealDbNamespace )
117
- {
118
- await CreateNamespaceAsync ( surrealClient , surrealDbNamespace , @event . Services , ct )
119
- . ConfigureAwait ( false ) ;
124
+ foreach ( var nsResourceName in surrealServer . Namespaces . Keys )
125
+ {
126
+ if ( builder . Resources . FirstOrDefault ( n =>
127
+ string . Equals ( n . Name , nsResourceName , StringComparison . OrdinalIgnoreCase ) ) is
128
+ SurrealDbNamespaceResource surrealDbNamespace )
129
+ {
130
+ await CreateNamespaceAsync ( surrealClient , surrealDbNamespace , services , ct )
131
+ . ConfigureAwait ( false ) ;
120
132
121
- await surrealClient . Use ( surrealDbNamespace . NamespaceName , null ! , ct ) . ConfigureAwait ( false ) ;
133
+ await surrealClient . Use ( surrealDbNamespace . NamespaceName , null ! , ct ) . ConfigureAwait ( false ) ;
122
134
123
- foreach ( var dbResourceName in surrealDbNamespace . Databases . Keys )
124
- {
125
- if ( builder . Resources . FirstOrDefault ( n =>
126
- string . Equals ( n . Name , dbResourceName , StringComparison . OrdinalIgnoreCase ) ) is
127
- SurrealDbDatabaseResource surrealDbDatabase )
128
- {
129
- await CreateDatabaseAsync ( surrealClient , surrealDbDatabase , @event . Services , ct )
130
- . ConfigureAwait ( false ) ;
131
- }
132
- }
133
- }
134
- }
135
- } ) ;
135
+ foreach ( var dbResourceName in surrealDbNamespace . Databases . Keys )
136
+ {
137
+ if ( builder . Resources . FirstOrDefault ( n =>
138
+ string . Equals ( n . Name , dbResourceName , StringComparison . OrdinalIgnoreCase ) ) is
139
+ SurrealDbDatabaseResource surrealDbDatabase )
140
+ {
141
+ await CreateDatabaseAsync ( surrealClient , surrealDbDatabase , services , ct )
142
+ . ConfigureAwait ( false ) ;
143
+ }
144
+ }
145
+ }
146
+ }
136
147
}
137
148
138
149
/// <summary>
@@ -234,24 +245,10 @@ public static IResourceBuilder<SurrealDbDatabaseResource> AddDatabase(
234
245
235
246
SurrealDbClient ? surrealDbClient = null ;
236
247
237
- builder . ApplicationBuilder . Eventing . Subscribe < ConnectionStringAvailableEvent > ( surrealServerDatabase , async ( @event , ct ) =>
238
- {
239
- var connectionString = await surrealServerDatabase . ConnectionStringExpression . GetValueAsync ( ct ) . ConfigureAwait ( false ) ;
240
- if ( connectionString is null )
241
- {
242
- throw new DistributedApplicationException ( $ "ConnectionStringAvailableEvent was published for the '{ surrealServerDatabase } ' resource but the connection string was null.") ;
243
- }
244
-
245
- var options = new SurrealDbOptionsBuilder ( ) . FromConnectionString ( connectionString ) . Build ( ) ;
246
- surrealDbClient = new SurrealDbClient ( options ) ;
247
- } ) ;
248
-
249
248
string namespaceName = builder . Resource . Name ;
250
249
string serverName = builder . Resource . Parent . Name ;
251
250
252
251
string healthCheckKey = $ "{ serverName } _{ namespaceName } _{ name } _check";
253
- // TODO : Bug to be fixed
254
- //builder.ApplicationBuilder.Services.AddHealthChecks().AddSurreal(_ => surrealDbClient!, healthCheckKey);
255
252
builder . ApplicationBuilder . Services . AddHealthChecks ( ) . Add ( new HealthCheckRegistration (
256
253
name : healthCheckKey ,
257
254
_ => new SurrealDbHealthCheck ( surrealDbClient ! ) ,
@@ -261,7 +258,17 @@ public static IResourceBuilder<SurrealDbDatabaseResource> AddDatabase(
261
258
) ;
262
259
263
260
return builder . ApplicationBuilder . AddResource ( surrealServerDatabase )
264
- . WithHealthCheck ( healthCheckKey ) ;
261
+ . WithHealthCheck ( healthCheckKey )
262
+ . OnConnectionStringAvailable ( async ( _ , _ , ct ) => {
263
+ var connectionString = await surrealServerDatabase . ConnectionStringExpression . GetValueAsync ( ct ) . ConfigureAwait ( false ) ;
264
+ if ( connectionString is null )
265
+ {
266
+ throw new DistributedApplicationException ( $ "ConnectionStringAvailableEvent was published for the '{ surrealServerDatabase } ' resource but the connection string was null.") ;
267
+ }
268
+
269
+ var options = new SurrealDbOptionsBuilder ( ) . FromConnectionString ( connectionString ) . Build ( ) ;
270
+ surrealDbClient = new SurrealDbClient ( options ) ;
271
+ } ) ;
265
272
}
266
273
267
274
/// <summary>
0 commit comments