Skip to content

Commit 27b7e8d

Browse files
committed
Refactor target_release_view
1 parent e7181db commit 27b7e8d

File tree

2 files changed

+40
-31
lines changed

2 files changed

+40
-31
lines changed

nexus/db-model/src/target_release.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use super::{impl_enum_type, Generation};
66
use crate::schema::target_release;
77
use crate::typed_uuid::DbTypedUuid;
88
use chrono::{DateTime, Utc};
9+
use nexus_types::external_api::views;
910
use omicron_uuid_kinds::TufRepoKind;
1011

1112
impl_enum_type!(
@@ -62,4 +63,15 @@ impl TargetRelease {
6263
tuf_repo_id: Some(tuf_repo_id),
6364
}
6465
}
66+
67+
pub fn into_external(
68+
&self,
69+
release_source: views::TargetReleaseSource,
70+
) -> views::TargetRelease {
71+
views::TargetRelease {
72+
generation: (&self.generation.0).into(),
73+
time_requested: self.time_requested,
74+
release_source,
75+
}
76+
}
6577
}

nexus/db-queries/src/db/datastore/target_release.rs

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -77,38 +77,35 @@ impl DataStore {
7777
.authorize(authz::Action::Read, &authz::TARGET_RELEASE_CONFIG)
7878
.await?;
7979
let conn = self.pool_connection_authorized(opctx).await?;
80-
Ok(views::TargetRelease {
81-
generation: (&target_release.generation.0).into(),
82-
time_requested: target_release.time_requested,
83-
release_source: match target_release.release_source {
84-
TargetReleaseSource::Unspecified => {
85-
views::TargetReleaseSource::Unspecified
80+
let release_source = match target_release.release_source {
81+
TargetReleaseSource::Unspecified => {
82+
views::TargetReleaseSource::Unspecified
83+
}
84+
TargetReleaseSource::SystemVersion => {
85+
use crate::db::schema::tuf_repo;
86+
if let Some(tuf_repo_id) = target_release.tuf_repo_id {
87+
views::TargetReleaseSource::SystemVersion(
88+
tuf_repo::table
89+
.select(tuf_repo::system_version)
90+
.filter(tuf_repo::id.eq(tuf_repo_id))
91+
.first_async::<SemverVersion>(&*conn)
92+
.await
93+
.map_err(|e| {
94+
public_error_from_diesel(
95+
e,
96+
ErrorHandler::Server,
97+
)
98+
})?
99+
.into(),
100+
)
101+
} else {
102+
return Err(Error::invalid_request(
103+
"missing TUF repo ID for specified system version",
104+
));
86105
}
87-
TargetReleaseSource::SystemVersion => {
88-
use crate::db::schema::tuf_repo;
89-
if let Some(tuf_repo_id) = target_release.tuf_repo_id {
90-
views::TargetReleaseSource::SystemVersion(
91-
tuf_repo::table
92-
.select(tuf_repo::system_version)
93-
.filter(tuf_repo::id.eq(tuf_repo_id))
94-
.first_async::<SemverVersion>(&*conn)
95-
.await
96-
.map_err(|e| {
97-
public_error_from_diesel(
98-
e,
99-
ErrorHandler::Server,
100-
)
101-
})?
102-
.into(),
103-
)
104-
} else {
105-
return Err(Error::invalid_request(
106-
"missing TUF repo ID for specified system version",
107-
));
108-
}
109-
}
110-
},
111-
})
106+
}
107+
};
108+
Ok(target_release.into_external(release_source))
112109
}
113110
}
114111

0 commit comments

Comments
 (0)