Skip to content

Commit

Permalink
Fix storing JSON null in DB instead of setting the DB field null
Browse files Browse the repository at this point in the history
  • Loading branch information
pohlm01 committed Sep 2, 2024
1 parent 85c2999 commit 7ef3d39
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 20 deletions.
18 changes: 9 additions & 9 deletions openadr-vtn/src/data_source/postgres/event.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ use openadr_wire::Event;
use sqlx::PgPool;
use std::str::FromStr;
use tracing::error;
use crate::data_source::postgres::to_json_value;

#[async_trait]
impl EventCrud for PgEventStorage {}
Expand Down Expand Up @@ -165,10 +166,10 @@ impl Crud for PgEventStorage {
new.program_id.as_str(),
new.event_name,
Into::<Option<i64>>::into(new.priority),
serde_json::to_value(&new.targets).map_err(AppError::SerdeJsonBadRequest)?,
serde_json::to_value(&new.report_descriptors).map_err(AppError::SerdeJsonBadRequest)?,
serde_json::to_value(&new.payload_descriptors).map_err( AppError::SerdeJsonBadRequest)?,
serde_json::to_value(&new.interval_period).map_err(AppError::SerdeJsonBadRequest)?,
to_json_value(new.targets)?,
to_json_value(new.report_descriptors)?,
to_json_value(new.payload_descriptors)?,
to_json_value(new.interval_period)?,
serde_json::to_value(&new.intervals).map_err(AppError::SerdeJsonBadRequest)?,
)
.fetch_one(&self.db)
Expand Down Expand Up @@ -244,11 +245,10 @@ impl Crud for PgEventStorage {
new.program_id.as_str(),
new.event_name,
Into::<Option<i64>>::into(new.priority),
serde_json::to_value(&new.targets).map_err(AppError::SerdeJsonBadRequest)?,
serde_json::to_value(&new.report_descriptors).map_err(AppError::SerdeJsonBadRequest)?,
serde_json::to_value(&new.payload_descriptors)
.map_err(AppError::SerdeJsonBadRequest)?,
serde_json::to_value(&new.interval_period).map_err(AppError::SerdeJsonBadRequest)?,
to_json_value(new.targets)?,
to_json_value(new.report_descriptors)?,
to_json_value(new.payload_descriptors)?,
to_json_value(new.interval_period)?,
serde_json::to_value(&new.intervals).map_err(AppError::SerdeJsonBadRequest)?,
)
.fetch_one(&self.db)
Expand Down
6 changes: 6 additions & 0 deletions openadr-vtn/src/data_source/postgres/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ use crate::data_source::{AuthSource, DataSource, EventCrud, ProgramCrud, ReportC
use dotenvy::dotenv;
use sqlx::PgPool;
use std::sync::Arc;
use serde::Serialize;
use tracing::{error, info};
use crate::error::AppError;

mod event;
mod program;
Expand Down Expand Up @@ -66,3 +68,7 @@ impl PostgresStorage {
})
}
}

fn to_json_value<T: Serialize>(v: Option<T>) -> Result<Option<serde_json::Value>, AppError> {
v.map(|v| serde_json::to_value(v).map_err(AppError::SerdeJsonBadRequest)).transpose()
}
18 changes: 9 additions & 9 deletions openadr-vtn/src/data_source/postgres/program.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ use openadr_wire::target::TargetLabel;
use openadr_wire::Program;
use sqlx::PgPool;
use tracing::{error, trace};
use crate::data_source::postgres::to_json_value;

#[async_trait]
impl ProgramCrud for PgProgramStorage {}
Expand Down Expand Up @@ -174,12 +175,12 @@ impl Crud for PgProgramStorage {
new.country,
new.principal_subdivision,
// TODO this will serialize 'null' as JSON in the DB instead of using the NULL from the DB
serde_json::to_value(new.interval_period).map_err(AppError::SerdeJsonBadRequest)?,
serde_json::to_value(new.program_descriptions).map_err(AppError::SerdeJsonBadRequest)?,
to_json_value(new.interval_period)?,
to_json_value(new.program_descriptions)?,
new.binding_events,
new.local_price,
serde_json::to_value(new.payload_descriptors).map_err(AppError::SerdeJsonBadRequest)?,
serde_json::to_value(new.targets).map_err(AppError::SerdeJsonBadRequest)?,
to_json_value(new.payload_descriptors)?,
to_json_value(new.targets)?,
)
.fetch_one(&self.db)
.await?
Expand Down Expand Up @@ -276,13 +277,12 @@ impl Crud for PgProgramStorage {
new.program_type,
new.country,
new.principal_subdivision,
serde_json::to_value(new.interval_period).map_err(AppError::SerdeJsonBadRequest)?,
serde_json::to_value(new.program_descriptions)
.map_err(AppError::SerdeJsonBadRequest)?,
to_json_value(new.interval_period)?,
to_json_value(new.program_descriptions)?,
new.binding_events,
new.local_price,
serde_json::to_value(new.payload_descriptors).map_err(AppError::SerdeJsonBadRequest)?,
serde_json::to_value(new.targets).map_err(AppError::SerdeJsonBadRequest)?,
to_json_value(new.payload_descriptors)?,
to_json_value(new.targets)?,
)
.fetch_one(&self.db)
.await?
Expand Down
5 changes: 3 additions & 2 deletions openadr-vtn/src/data_source/postgres/report.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ use openadr_wire::report::{ReportContent, ReportId};
use openadr_wire::Report;
use sqlx::PgPool;
use tracing::error;
use crate::data_source::postgres::to_json_value;

#[async_trait]
impl ReportCrud for PgReportStorage {}
Expand Down Expand Up @@ -90,7 +91,7 @@ impl Crud for PgReportStorage {
new.event_id.as_str(),
new.client_name,
new.report_name,
serde_json::to_value(new.payload_descriptors).map_err(AppError::SerdeJsonBadRequest)?,
to_json_value(new.payload_descriptors)?,
serde_json::to_value(new.resources).map_err(AppError::SerdeJsonBadRequest)?,
)
.fetch_one(&self.db)
Expand Down Expand Up @@ -154,7 +155,7 @@ impl Crud for PgReportStorage {
new.event_id.as_str(),
new.client_name,
new.report_name,
serde_json::to_value(new.payload_descriptors).map_err(AppError::SerdeJsonBadRequest)?,
to_json_value(new.payload_descriptors)?,
serde_json::to_value(new.resources).map_err(AppError::SerdeJsonBadRequest)?,
)
.fetch_one(&self.db)
Expand Down

0 comments on commit 7ef3d39

Please sign in to comment.