Skip to content

Commit 5b08119

Browse files
committed
editoast: move get_power_restrictions sql request from views to modelsv2
1 parent 39c3cf8 commit 5b08119

File tree

3 files changed

+31
-14
lines changed

3 files changed

+31
-14
lines changed

editoast/src/modelsv2/rolling_stock_model.rs

+15
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
mod power_restriction;
2+
13
use std::collections::HashMap;
24

5+
use diesel::sql_query;
36
use diesel::ExpressionMethods;
47
use diesel::QueryDsl;
58
use diesel::SelectableHelper;
@@ -13,6 +16,7 @@ use editoast_schemas::rolling_stock::RollingResistance;
1316
use editoast_schemas::rolling_stock::RollingStock;
1417
use editoast_schemas::rolling_stock::RollingStockMetadata;
1518
use editoast_schemas::rolling_stock::RollingStockSupportedSignalingSystems;
19+
use power_restriction::PowerRestriction;
1620
use serde::Deserialize;
1721
use serde::Serialize;
1822
use std::sync::Arc;
@@ -24,11 +28,13 @@ use validator::ValidationErrors;
2428
use crate::error::Result;
2529
use crate::modelsv2::prelude::*;
2630
use crate::modelsv2::rolling_stock_livery::RollingStockLiveryMetadataModel;
31+
use crate::modelsv2::DbConnection;
2732
use crate::modelsv2::DbConnectionPool;
2833
use crate::views::rolling_stocks::RollingStockWithLiveries;
2934

3035
editoast_common::schemas! {
3136
RollingStockModel,
37+
PowerRestriction,
3238
}
3339

3440
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, ModelV2, ToSchema)]
@@ -108,6 +114,15 @@ impl RollingStockModel {
108114
.map(|(key, _)| key.clone())
109115
.collect()
110116
}
117+
118+
pub async fn get_power_restrictions(conn: &mut DbConnection) -> Result<Vec<PowerRestriction>> {
119+
let power_restrictions = sql_query(
120+
"SELECT DISTINCT jsonb_object_keys(power_restrictions) AS power_restriction FROM rolling_stock",
121+
)
122+
.load::<PowerRestriction>(conn)
123+
.await?;
124+
Ok(power_restrictions)
125+
}
111126
}
112127

113128
impl RollingStockModelChangeset {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
use diesel::sql_types::Text;
2+
use serde::Deserialize;
3+
use serde::Serialize;
4+
use utoipa::ToSchema;
5+
6+
editoast_common::schemas! {
7+
PowerRestriction,
8+
}
9+
10+
#[derive(QueryableByName, Debug, Clone, Serialize, Deserialize, ToSchema)]
11+
pub struct PowerRestriction {
12+
#[diesel(sql_type = Text)]
13+
pub power_restriction: String,
14+
}

editoast/src/views/rolling_stocks/mod.rs

+2-14
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ editoast_common::schemas! {
7676
DeleteRollingStockQueryParams,
7777
RollingStockLockedUpdateForm,
7878
RollingStockLiveryCreateForm,
79-
PowerRestriction,
8079
RollingStockError,
8180
RollingStockKey,
8281
TrainScheduleScenarioStudyProject,
@@ -194,12 +193,6 @@ async fn get_by_name(
194193
Ok(Json(rolling_stock_with_liveries))
195194
}
196195

197-
#[derive(QueryableByName, Debug, Clone, Serialize, Deserialize, ToSchema)]
198-
struct PowerRestriction {
199-
#[diesel(sql_type = SqlText)]
200-
power_restriction: String,
201-
}
202-
203196
/// Returns the set of power restrictions for all rolling_stocks modes.
204197
#[utoipa::path(tag = "rolling_stock",
205198
responses(
@@ -208,13 +201,8 @@ struct PowerRestriction {
208201
)]
209202
#[get("")]
210203
async fn get_power_restrictions(db_pool: Data<DbConnectionPool>) -> Result<Json<Vec<String>>> {
211-
let mut conn = db_pool.get().await?;
212-
let power_restrictions: Vec<PowerRestriction> = sql_query(
213-
"SELECT DISTINCT jsonb_object_keys(power_restrictions) AS power_restriction
214-
FROM rolling_stock",
215-
)
216-
.load(&mut conn)
217-
.await?;
204+
let conn = &mut db_pool.get().await?;
205+
let power_restrictions = RollingStockModel::get_power_restrictions(conn).await?;
218206
Ok(Json(
219207
power_restrictions
220208
.into_iter()

0 commit comments

Comments
 (0)