Skip to content

Commit 7379665

Browse files
committed
create
1 parent ffa4282 commit 7379665

File tree

8 files changed

+59
-50
lines changed

8 files changed

+59
-50
lines changed

lib/api_projects/src/benchmarks.rs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use bencher_schema::{
1414
error::{resource_conflict_err, resource_not_found_err},
1515
model::{
1616
project::{
17-
benchmark::{InsertBenchmark, QueryBenchmark, UpdateBenchmark},
17+
benchmark::{QueryBenchmark, UpdateBenchmark},
1818
QueryProject,
1919
},
2020
user::auth::{AuthUser, BearerToken, PubBearerToken},
@@ -220,19 +220,9 @@ async fn post_inner(
220220
Permission::Create,
221221
)?;
222222

223-
let insert_benchmark =
224-
InsertBenchmark::from_json(conn_lock!(context), query_project.id, json_benchmark)?;
225-
226-
diesel::insert_into(schema::benchmark::table)
227-
.values(&insert_benchmark)
228-
.execute(conn_lock!(context))
229-
.map_err(resource_conflict_err!(Benchmark, insert_benchmark))?;
230-
231-
schema::benchmark::table
232-
.filter(schema::benchmark::uuid.eq(&insert_benchmark.uuid))
233-
.first::<QueryBenchmark>(conn_lock!(context))
223+
QueryBenchmark::create(context, query_project.id, json_benchmark)
224+
.await
234225
.map(|benchmark| benchmark.into_json_for_project(&query_project))
235-
.map_err(resource_not_found_err!(Benchmark, insert_benchmark))
236226
}
237227

238228
#[derive(Deserialize, JsonSchema)]

lib/api_projects/src/branches.rs

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use bencher_schema::{
1515
},
1616
model::{
1717
project::{
18-
branch::{head::QueryHead, InsertBranch, QueryBranch, UpdateBranch},
18+
branch::{head::QueryHead, QueryBranch, UpdateBranch},
1919
QueryProject,
2020
},
2121
user::auth::{AuthUser, BearerToken, PubBearerToken},
@@ -231,10 +231,9 @@ async fn post_inner(
231231
Permission::Create,
232232
)?;
233233

234-
let (query_branch, _query_head) =
235-
InsertBranch::from_json(log, context, query_project.id, json_branch).await?;
236-
237-
query_branch.into_json_for_project(conn_lock!(context), &query_project)
234+
QueryBranch::create(log, context, query_project.id, json_branch)
235+
.await?
236+
.into_json_for_project(conn_lock!(context), &query_project)
238237
}
239238

240239
#[derive(Deserialize, JsonSchema)]

lib/api_projects/src/measures.rs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use bencher_schema::{
1313
error::{resource_conflict_err, resource_not_found_err},
1414
model::{
1515
project::{
16-
measure::{InsertMeasure, QueryMeasure, UpdateMeasure},
16+
measure::{QueryMeasure, UpdateMeasure},
1717
QueryProject,
1818
},
1919
user::auth::{AuthUser, BearerToken, PubBearerToken},
@@ -219,19 +219,9 @@ async fn post_inner(
219219
Permission::Create,
220220
)?;
221221

222-
let insert_measure =
223-
InsertMeasure::from_json(conn_lock!(context), query_project.id, json_measure)?;
224-
225-
diesel::insert_into(schema::measure::table)
226-
.values(&insert_measure)
227-
.execute(conn_lock!(context))
228-
.map_err(resource_conflict_err!(Measure, insert_measure))?;
229-
230-
schema::measure::table
231-
.filter(schema::measure::uuid.eq(&insert_measure.uuid))
232-
.first::<QueryMeasure>(conn_lock!(context))
222+
QueryMeasure::create(context, query_project.id, json_measure)
223+
.await
233224
.map(|measure| measure.into_json_for_project(&query_project))
234-
.map_err(resource_not_found_err!(Measure, insert_measure))
235225
}
236226

237227
#[derive(Deserialize, JsonSchema)]

lib/api_projects/src/testbeds.rs

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use bencher_schema::{
1313
error::{resource_conflict_err, resource_not_found_err},
1414
model::{
1515
project::{
16-
testbed::{InsertTestbed, QueryTestbed, UpdateTestbed},
16+
testbed::{QueryTestbed, UpdateTestbed},
1717
QueryProject,
1818
},
1919
user::auth::{AuthUser, BearerToken, PubBearerToken},
@@ -219,19 +219,9 @@ async fn post_inner(
219219
Permission::Create,
220220
)?;
221221

222-
let insert_testbed =
223-
InsertTestbed::from_json(conn_lock!(context), query_project.id, json_testbed.clone())?;
224-
225-
diesel::insert_into(schema::testbed::table)
226-
.values(&insert_testbed)
227-
.execute(conn_lock!(context))
228-
.map_err(resource_conflict_err!(Testbed, insert_testbed))?;
229-
230-
schema::testbed::table
231-
.filter(schema::testbed::uuid.eq(&insert_testbed.uuid))
232-
.first::<QueryTestbed>(conn_lock!(context))
222+
QueryTestbed::create(context, query_project.id, json_testbed)
223+
.await
233224
.map(|testbed| testbed.into_json_for_project(&query_project))
234-
.map_err(resource_not_found_err!(Testbed, insert_testbed))
235225
}
236226

237227
#[derive(Deserialize, JsonSchema)]

lib/bencher_schema/src/model/project/benchmark.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,17 @@ impl QueryBenchmark {
8989
return Ok(benchmark);
9090
}
9191

92-
let benchmark = JsonNewBenchmark { name, slug: None };
92+
let json_benchmark = JsonNewBenchmark { name, slug: None };
93+
Self::create(context, project_id, json_benchmark).await
94+
}
95+
96+
pub async fn create(
97+
context: &ApiContext,
98+
project_id: ProjectId,
99+
json_benchmark: JsonNewBenchmark,
100+
) -> Result<Self, HttpError> {
93101
let insert_benchmark =
94-
InsertBenchmark::from_json(conn_lock!(context), project_id, benchmark)?;
102+
InsertBenchmark::from_json(conn_lock!(context), project_id, json_benchmark)?;
95103
diesel::insert_into(schema::benchmark::table)
96104
.values(&insert_benchmark)
97105
.execute(conn_lock!(context))

lib/bencher_schema/src/model/project/branch/mod.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,19 @@ impl QueryBranch {
141141
InsertBranch::from_json(log, context, project_id, branch).await
142142
}
143143

144+
pub async fn create(
145+
log: &Logger,
146+
context: &ApiContext,
147+
project_id: ProjectId,
148+
json_branch: JsonNewBranch,
149+
) -> Result<Self, HttpError> {
150+
Ok(
151+
InsertBranch::from_json(log, context, project_id, json_branch)
152+
.await?
153+
.0,
154+
)
155+
}
156+
144157
pub async fn update_start_point_if_changed(
145158
self,
146159
log: &Logger,

lib/bencher_schema/src/model/project/measure.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ impl QueryMeasure {
8989
// Or recreate default measures if they were previously deleted
9090
let measure_str = measure.as_ref();
9191

92-
let measure = if let Some(measure) = built_in::default::Latency::from_str(measure_str)
92+
let json_measure = if let Some(measure) = built_in::default::Latency::from_str(measure_str)
9393
.or_else(|| built_in::default::Throughput::from_str(measure_str))
9494
.or_else(|| built_in::json::BuildTime::from_str(measure_str))
9595
.or_else(|| built_in::json::FileSize::from_str(measure_str))
@@ -134,7 +134,16 @@ impl QueryMeasure {
134134
}
135135
};
136136

137-
let insert_measure = InsertMeasure::from_json(conn_lock!(context), project_id, measure)?;
137+
Self::create(context, project_id, json_measure).await
138+
}
139+
140+
pub async fn create(
141+
context: &ApiContext,
142+
project_id: ProjectId,
143+
json_measure: JsonNewMeasure,
144+
) -> Result<Self, HttpError> {
145+
let insert_measure =
146+
InsertMeasure::from_json(conn_lock!(context), project_id, json_measure)?;
138147
diesel::insert_into(schema::measure::table)
139148
.values(&insert_measure)
140149
.execute(conn_lock!(context))

lib/bencher_schema/src/model/project/testbed.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,15 +82,25 @@ impl QueryTestbed {
8282
let Ok(kind) = NameIdKind::<ResourceName>::try_from(testbed) else {
8383
return Err(http_error);
8484
};
85-
let testbed = match kind {
85+
let json_testbed = match kind {
8686
NameIdKind::Uuid(_) => return Err(http_error),
8787
NameIdKind::Slug(slug) => JsonNewTestbed {
8888
name: slug.clone().into(),
8989
slug: Some(slug),
9090
},
9191
NameIdKind::Name(name) => JsonNewTestbed { name, slug: None },
9292
};
93-
let insert_testbed = InsertTestbed::from_json(conn_lock!(context), project_id, testbed)?;
93+
94+
Self::create(context, project_id, json_testbed).await
95+
}
96+
97+
pub async fn create(
98+
context: &ApiContext,
99+
project_id: ProjectId,
100+
json_testbed: JsonNewTestbed,
101+
) -> Result<Self, HttpError> {
102+
let insert_testbed =
103+
InsertTestbed::from_json(conn_lock!(context), project_id, json_testbed)?;
94104
diesel::insert_into(schema::testbed::table)
95105
.values(&insert_testbed)
96106
.execute(conn_lock!(context))

0 commit comments

Comments
 (0)