Skip to content

Commit 47e9fa0

Browse files
committed
Auto-create molecule/projects dataset
1 parent 5e74683 commit 47e9fa0

3 files changed

Lines changed: 38 additions & 17 deletions

File tree

src/adapter/graphql/src/mutations/molecule_mut.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ impl MoleculeMut {
6868
}
6969

7070
// Resolve projects dataset
71-
let projects_dataset = Molecule::get_projects_dataset(ctx).await?;
71+
let projects_dataset = Molecule::get_projects_dataset(ctx, true).await?;
7272

7373
// Check for conflicts
7474
let query_res = query_svc
@@ -236,7 +236,7 @@ impl MoleculeMut {
236236
let query_svc = from_catalog_n!(ctx, dyn domain::QueryService);
237237

238238
// Resolve projects dataset
239-
let projects_dataset = Molecule::get_projects_dataset(ctx).await?;
239+
let projects_dataset = Molecule::get_projects_dataset(ctx, false).await?;
240240

241241
// Query data
242242
let query_res = query_svc

src/adapter/graphql/src/queries/molecule.rs

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -169,15 +169,42 @@ impl Molecule {
169169
}
170170
}
171171

172-
pub async fn get_projects_dataset(ctx: &Context<'_>) -> Result<domain::ResolvedDataset> {
172+
pub async fn get_projects_dataset(
173+
ctx: &Context<'_>,
174+
create_if_not_exist: bool,
175+
) -> Result<domain::ResolvedDataset> {
173176
let dataset_reg = from_catalog_n!(ctx, dyn domain::DatasetRegistry);
174177

175-
let projects_dataset = dataset_reg
178+
match dataset_reg
176179
.get_dataset_by_ref(&"molecule/projects".parse().unwrap())
177180
.await
178-
.int_err()?;
179-
180-
Ok(projects_dataset)
181+
{
182+
Ok(ds) => Ok(ds),
183+
Err(odf::DatasetRefUnresolvedError::NotFound(_)) if create_if_not_exist => {
184+
let create_dataset_use_case =
185+
from_catalog_n!(ctx, dyn kamu_datasets::CreateDatasetFromSnapshotUseCase);
186+
187+
let snapshot = Self::dataset_snapshot_projects(odf::DatasetAlias::new(
188+
None,
189+
odf::DatasetName::new_unchecked("projects"),
190+
));
191+
192+
let create_res = create_dataset_use_case
193+
.execute(
194+
snapshot,
195+
kamu_datasets::CreateDatasetUseCaseOptions {
196+
dataset_visibility: odf::DatasetVisibility::Private,
197+
},
198+
)
199+
.await
200+
.int_err()?;
201+
202+
Ok(dataset_reg
203+
.get_dataset_by_handle(&create_res.dataset_handle)
204+
.await)
205+
}
206+
Err(err) => Err(err.int_err().into()),
207+
}
181208
}
182209
}
183210

@@ -200,7 +227,7 @@ impl Molecule {
200227
let query_svc = from_catalog_n!(ctx, dyn domain::QueryService);
201228

202229
// Resolve projects dataset
203-
let projects_dataset = Self::get_projects_dataset(ctx).await?;
230+
let projects_dataset = Self::get_projects_dataset(ctx, false).await?;
204231

205232
// Query data
206233
let query_res = query_svc
@@ -251,7 +278,7 @@ impl Molecule {
251278
let query_svc = from_catalog_n!(ctx, dyn domain::QueryService);
252279

253280
// Resolve projects dataset
254-
let projects_dataset = Self::get_projects_dataset(ctx).await?;
281+
let projects_dataset = Self::get_projects_dataset(ctx, false).await?;
255282

256283
// Query data
257284
let query_res = query_svc

src/adapter/graphql/tests/tests/test_gql_custom_molecule.rs

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -335,10 +335,7 @@ async fn test_molecule_data_room_operations() {
335335
.build()
336336
.await;
337337

338-
// Setup `projects` dataset
339-
harness.create_projects_dataset().await;
340-
341-
// Create project
338+
// Create project (projects dataset is auto-created)
342339
let res = harness
343340
.execute_authorized_query(async_graphql::Request::new(CREATE_PROJECT).variables(
344341
async_graphql::Variables::from_json(json!({
@@ -519,10 +516,7 @@ async fn test_molecule_announcements_operations() {
519516
.build()
520517
.await;
521518

522-
// Setup `projects` dataset
523-
harness.create_projects_dataset().await;
524-
525-
// Create project
519+
// Create project (projects dataset is auto-created)
526520
let res = harness
527521
.execute_authorized_query(async_graphql::Request::new(CREATE_PROJECT).variables(
528522
async_graphql::Variables::from_json(json!({

0 commit comments

Comments
 (0)