use crate::documents::{
AssessmentViewDocument, CurrentAssessmentDocument, DiagnosticDocument, EventWriteDocument,
};
use crate::model::ReviewTargetRef;
use crate::session::event::ReviewAssessment;
use crate::session::{
AssessmentAddResult, AssessmentShowFilters, AssessmentShowResult, DelegationMap,
};
#[derive(serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AssessmentAddBody {
revision_id: String,
assessment_id: String,
event_id: String,
track_id: String,
target: ReviewTargetRef,
assessment: ReviewAssessment,
#[serde(skip_serializing_if = "Option::is_none")]
summary_content_hash: Option<String>,
}
#[derive(serde::Serialize)]
#[serde(rename_all = "camelCase")]
pub struct AssessmentShowBody {
revision_id: String,
filters: AssessmentShowFiltersDocument,
current: CurrentAssessmentDocument,
assessments: Vec<AssessmentViewDocument>,
}
#[derive(serde::Serialize)]
#[serde(rename_all = "camelCase")]
struct AssessmentShowFiltersDocument {
#[serde(skip_serializing_if = "Option::is_none")]
track_id: Option<String>,
all: bool,
include_summary: bool,
}
pub fn assessment_add_document(
schema: &'static str,
result: AssessmentAddResult,
) -> EventWriteDocument<AssessmentAddBody> {
EventWriteDocument::new(
schema,
AssessmentAddBody {
revision_id: result.revision_id.as_str().to_owned(),
assessment_id: result.assessment_id.as_str().to_owned(),
event_id: result.event_id.as_str().to_owned(),
track_id: result.track_id.as_str().to_owned(),
target: result.target,
assessment: result.assessment,
summary_content_hash: result.summary_content_hash,
},
result.events_created,
result.events_existing,
result.events_created_by_type,
result.diagnostics,
)
}
pub fn assessment_show_document(
schema: &'static str,
result: AssessmentShowResult,
delegation_map: Option<&DelegationMap>,
) -> DiagnosticDocument<AssessmentShowBody> {
DiagnosticDocument::new(
schema,
AssessmentShowBody {
revision_id: result.revision_id.as_str().to_owned(),
filters: AssessmentShowFiltersDocument::from(result.filters),
current: CurrentAssessmentDocument::from(result.current)
.with_resolved_principal(delegation_map),
assessments: result
.assessments
.into_iter()
.map(|view| {
AssessmentViewDocument::from(view).with_resolved_principal(delegation_map)
})
.collect(),
},
result.diagnostics,
)
}
impl From<AssessmentShowFilters> for AssessmentShowFiltersDocument {
fn from(filters: AssessmentShowFilters) -> Self {
Self {
track_id: filters
.track_id
.map(|track_id| track_id.as_str().to_owned()),
all: filters.include_all,
include_summary: filters.include_summary,
}
}
}