@@ -14,6 +14,30 @@ pub struct PostgresCatalogManager {
1414 backend : CatalogBackend < Postgres > ,
1515}
1616
17+ /// Row type for secret metadata queries (Postgres handles timestamps natively)
18+ #[ derive( sqlx:: FromRow ) ]
19+ struct SecretMetadataRow {
20+ name : String ,
21+ provider : String ,
22+ provider_ref : Option < String > ,
23+ status : String ,
24+ created_at : DateTime < Utc > ,
25+ updated_at : DateTime < Utc > ,
26+ }
27+
28+ impl SecretMetadataRow {
29+ fn into_metadata ( self ) -> SecretMetadata {
30+ SecretMetadata {
31+ name : self . name ,
32+ provider : self . provider ,
33+ provider_ref : self . provider_ref ,
34+ status : SecretStatus :: from_str ( & self . status ) . unwrap_or ( SecretStatus :: Active ) ,
35+ created_at : self . created_at ,
36+ updated_at : self . updated_at ,
37+ }
38+ }
39+ }
40+
1741impl PostgresCatalogManager {
1842 pub async fn new ( connection_string : & str ) -> Result < Self > {
1943 let pool = PgPoolOptions :: new ( )
@@ -194,61 +218,27 @@ impl CatalogManager for PostgresCatalogManager {
194218 }
195219
196220 async fn get_secret_metadata ( & self , name : & str ) -> Result < Option < SecretMetadata > > {
197- #[ derive( sqlx:: FromRow ) ]
198- struct Row {
199- name : String ,
200- provider : String ,
201- provider_ref : Option < String > ,
202- status : String ,
203- created_at : DateTime < Utc > ,
204- updated_at : DateTime < Utc > ,
205- }
206-
207- let row: Option < Row > = sqlx:: query_as (
221+ let row: Option < SecretMetadataRow > = sqlx:: query_as (
208222 "SELECT name, provider, provider_ref, status, created_at, updated_at \
209223 FROM secrets WHERE name = $1 AND status = 'active'",
210224 )
211225 . bind ( name)
212226 . fetch_optional ( self . backend . pool ( ) )
213227 . await ?;
214228
215- Ok ( row. map ( |r| SecretMetadata {
216- name : r. name ,
217- provider : r. provider ,
218- provider_ref : r. provider_ref ,
219- status : SecretStatus :: from_str ( & r. status ) . unwrap_or ( SecretStatus :: Active ) ,
220- created_at : r. created_at ,
221- updated_at : r. updated_at ,
222- } ) )
229+ Ok ( row. map ( SecretMetadataRow :: into_metadata) )
223230 }
224231
225232 async fn get_secret_metadata_any_status ( & self , name : & str ) -> Result < Option < SecretMetadata > > {
226- #[ derive( sqlx:: FromRow ) ]
227- struct Row {
228- name : String ,
229- provider : String ,
230- provider_ref : Option < String > ,
231- status : String ,
232- created_at : DateTime < Utc > ,
233- updated_at : DateTime < Utc > ,
234- }
235-
236- let row: Option < Row > = sqlx:: query_as (
233+ let row: Option < SecretMetadataRow > = sqlx:: query_as (
237234 "SELECT name, provider, provider_ref, status, created_at, updated_at \
238235 FROM secrets WHERE name = $1",
239236 )
240237 . bind ( name)
241238 . fetch_optional ( self . backend . pool ( ) )
242239 . await ?;
243240
244- Ok ( row. map ( |r| SecretMetadata {
245- name : r. name ,
246- provider : r. provider ,
247- provider_ref : r. provider_ref ,
248- status : SecretStatus :: from_str ( & r. status ) . unwrap_or ( SecretStatus :: Active ) ,
249- created_at : r. created_at ,
250- updated_at : r. updated_at ,
251- } ) )
241+ Ok ( row. map ( SecretMetadataRow :: into_metadata) )
252242 }
253243
254244 async fn create_secret_metadata ( & self , metadata : & SecretMetadata ) -> Result < ( ) > {
@@ -358,17 +348,7 @@ impl CatalogManager for PostgresCatalogManager {
358348 }
359349
360350 async fn list_secrets ( & self ) -> Result < Vec < SecretMetadata > > {
361- #[ derive( sqlx:: FromRow ) ]
362- struct Row {
363- name : String ,
364- provider : String ,
365- provider_ref : Option < String > ,
366- status : String ,
367- created_at : DateTime < Utc > ,
368- updated_at : DateTime < Utc > ,
369- }
370-
371- let rows: Vec < Row > = sqlx:: query_as (
351+ let rows: Vec < SecretMetadataRow > = sqlx:: query_as (
372352 "SELECT name, provider, provider_ref, status, created_at, updated_at \
373353 FROM secrets WHERE status = 'active' ORDER BY name",
374354 )
@@ -377,14 +357,7 @@ impl CatalogManager for PostgresCatalogManager {
377357
378358 Ok ( rows
379359 . into_iter ( )
380- . map ( |r| SecretMetadata {
381- name : r. name ,
382- provider : r. provider ,
383- provider_ref : r. provider_ref ,
384- status : SecretStatus :: from_str ( & r. status ) . unwrap_or ( SecretStatus :: Active ) ,
385- created_at : r. created_at ,
386- updated_at : r. updated_at ,
387- } )
360+ . map ( SecretMetadataRow :: into_metadata)
388361 . collect ( ) )
389362 }
390363}
0 commit comments