Skip to content

Commit b34a62b

Browse files
committed
start migration more web endpoints to sqlx
1 parent a7020da commit b34a62b

13 files changed

+403
-176
lines changed

.sqlx/query-33fd4ac8d3abdd7d240187e6a834ab8f2384521b036e24ba01501eb7d499e65d.json

+34
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-5d8e187d604de870d347be77abae3a272114732644975e9dbf396f5ffe689f6b.json

+71
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-908827d37c731be4a6611eacd2e53aa03ae0b38047e0e58c034a3d34f8e29631.json

+22
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-96817014a0af7e5946ecd00000ff08b5deaa12d85e1e0bb7bd845beafb0f2702.json

+47
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-a7cbfecb1e270232061de05fa4a53f926d9e289dcb4b03cba3e3eeebce74dfe0.json

+54
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/db/types.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use postgres_types::{FromSql, ToSql};
22
use serde::Serialize;
33

4-
#[derive(Debug, Clone, PartialEq, Eq, Serialize, FromSql, ToSql)]
4+
#[derive(Debug, Clone, PartialEq, Eq, Serialize, FromSql, ToSql, sqlx::Type)]
55
#[postgres(name = "feature")]
66
pub struct Feature {
77
pub(crate) name: String,
@@ -17,3 +17,9 @@ impl Feature {
1717
self.name.starts_with('_')
1818
}
1919
}
20+
21+
impl sqlx::postgres::PgHasArrayType for Feature {
22+
fn array_type_info() -> sqlx::postgres::PgTypeInfo {
23+
sqlx::postgres::PgTypeInfo::with_name("_feature")
24+
}
25+
}

src/web/build_details.rs

+29-38
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use crate::{
22
db::Pool,
33
impl_axum_webpage,
4-
utils::spawn_blocking,
54
web::{
65
error::{AxumNope, AxumResult},
76
file::File,
@@ -47,52 +46,44 @@ pub(crate) async fn build_details_handler(
4746
) -> AxumResult<impl IntoResponse> {
4847
let id: i32 = id.parse().map_err(|_| AxumNope::BuildNotFound)?;
4948

50-
let (row, output, metadata) = spawn_blocking(move || {
51-
let mut conn = pool.get()?;
52-
let row = conn
53-
.query_opt(
54-
"SELECT
55-
builds.rustc_version,
56-
builds.docsrs_version,
57-
builds.build_status,
58-
builds.build_time,
59-
builds.output,
60-
releases.default_target
61-
FROM builds
62-
INNER JOIN releases ON releases.id = builds.rid
63-
INNER JOIN crates ON releases.crate_id = crates.id
64-
WHERE builds.id = $1 AND crates.name = $2 AND releases.version = $3",
65-
&[&id, &name, &version],
66-
)?
67-
.ok_or(AxumNope::BuildNotFound)?;
68-
69-
let output: Option<String> = row.get("output");
70-
71-
Ok((
72-
row,
73-
output,
74-
MetaData::from_crate(&mut conn, &name, &version, &version)?,
75-
))
76-
})
77-
.await?;
78-
79-
let output = if let Some(output) = output {
49+
let mut conn = pool.get_async().await?;
50+
51+
let row = sqlx::query!(
52+
"SELECT
53+
builds.rustc_version,
54+
builds.docsrs_version,
55+
builds.build_status,
56+
builds.build_time,
57+
builds.output,
58+
releases.default_target
59+
FROM builds
60+
INNER JOIN releases ON releases.id = builds.rid
61+
INNER JOIN crates ON releases.crate_id = crates.id
62+
WHERE builds.id = $1 AND crates.name = $2 AND releases.version = $3",
63+
id,
64+
name,
65+
version,
66+
)
67+
.fetch_optional(&mut *conn)
68+
.await?
69+
.ok_or(AxumNope::BuildNotFound)?;
70+
71+
let output = if let Some(output) = row.output {
8072
output
8173
} else {
82-
let target: String = row.get("default_target");
83-
let path = format!("build-logs/{id}/{target}.txt");
74+
let path = format!("build-logs/{id}/{}.txt", row.default_target);
8475
let file = File::from_path(&storage, &path, &config).await?;
8576
String::from_utf8(file.0.content).context("non utf8")?
8677
};
8778

8879
Ok(BuildDetailsPage {
89-
metadata,
80+
metadata: MetaData::from_crate(&mut conn, &name, &version, &version).await?,
9081
build_details: BuildDetails {
9182
id,
92-
rustc_version: row.get("rustc_version"),
93-
docsrs_version: row.get("docsrs_version"),
94-
build_status: row.get("build_status"),
95-
build_time: row.get("build_time"),
83+
rustc_version: row.rustc_version,
84+
docsrs_version: row.docsrs_version,
85+
build_status: row.build_status,
86+
build_time: row.build_time,
9687
output,
9788
},
9889
use_direct_platform_links: true,

0 commit comments

Comments
 (0)