Skip to content

Commit b5807ea

Browse files
committed
Auto merge of #1614 - integer32llc:split-version-routes, r=jtgeibel
Split the two uses of version::deprecated::show into separate fns Discovered that /crates/:crate_id/:version is used in the show_version test RequestHelper function, so it probably shouldn't be marked as deprecated even though the frontend isn't using it. Takes care of the FIXME comment.
2 parents 9fa7dee + 6fa54eb commit b5807ea

File tree

3 files changed

+32
-28
lines changed

3 files changed

+32
-28
lines changed

src/controllers/version/deprecated.rs

Lines changed: 13 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,10 @@
77
88
use crate::controllers::prelude::*;
99

10-
use crate::models::Version;
10+
use crate::models::{Crate, Version};
1111
use crate::schema::*;
1212
use crate::views::EncodableVersion;
1313

14-
use super::version_and_crate;
15-
1614
/// Handles the `GET /versions` route.
1715
pub fn index(req: &mut dyn Request) -> CargoResult<Response> {
1816
use diesel::dsl::any;
@@ -40,28 +38,18 @@ pub fn index(req: &mut dyn Request) -> CargoResult<Response> {
4038
Ok(req.json(&R { versions }))
4139
}
4240

43-
/// Handles the `GET /versions/:version_id` and
44-
/// `GET /crates/:crate_id/:version` routes.
45-
///
46-
/// The frontend doesn't appear to hit either of these endpoints. Instead the
47-
/// version information appears to be returned by `krate::show`.
48-
///
49-
/// FIXME: These two routes have very different semantics and should be split into
50-
/// a separate function for each endpoint.
51-
pub fn show(req: &mut dyn Request) -> CargoResult<Response> {
52-
let (version, krate) = match req.params().find("crate_id") {
53-
Some(..) => version_and_crate(req)?,
54-
None => {
55-
let id = &req.params()["version_id"];
56-
let id = id.parse().unwrap_or(0);
57-
let conn = req.db_conn()?;
58-
versions::table
59-
.find(id)
60-
.inner_join(crates::table)
61-
.select((versions::all_columns, crate::models::krate::ALL_COLUMNS))
62-
.first(&*conn)?
63-
}
64-
};
41+
/// Handles the `GET /versions/:version_id` route.
42+
/// The frontend doesn't appear to hit this endpoint. Instead, the version information appears to
43+
/// be returned by `krate::show`.
44+
pub fn show_by_id(req: &mut dyn Request) -> CargoResult<Response> {
45+
let id = &req.params()["version_id"];
46+
let id = id.parse().unwrap_or(0);
47+
let conn = req.db_conn()?;
48+
let (version, krate): (Version, Crate) = versions::table
49+
.find(id)
50+
.inner_join(crates::table)
51+
.select((versions::all_columns, crate::models::krate::ALL_COLUMNS))
52+
.first(&*conn)?;
6553

6654
#[derive(Serialize)]
6755
struct R {

src/controllers/version/metadata.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
use crate::controllers::prelude::*;
88

99
use crate::schema::*;
10-
use crate::views::{EncodableDependency, EncodablePublicUser};
10+
use crate::views::{EncodableDependency, EncodablePublicUser, EncodableVersion};
1111

1212
use super::version_and_crate;
1313

@@ -61,3 +61,19 @@ pub fn authors(req: &mut dyn Request) -> CargoResult<Response> {
6161
meta: Meta { names },
6262
}))
6363
}
64+
65+
/// Handles the `GET /crates/:crate/:version` route.
66+
///
67+
/// The frontend doesn't appear to hit this endpoint, but our tests do, and it seems to be a useful
68+
/// API route to have.
69+
pub fn show(req: &mut dyn Request) -> CargoResult<Response> {
70+
let (version, krate) = version_and_crate(req)?;
71+
72+
#[derive(Serialize)]
73+
struct R {
74+
version: EncodableVersion,
75+
}
76+
Ok(req.json(&R {
77+
version: version.encodable(&krate.name),
78+
}))
79+
}

src/router.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,11 @@ pub fn build_router(app: &App) -> R404 {
3232

3333
// Routes that appear to be unused
3434
api_router.get("/versions", C(version::deprecated::index));
35-
api_router.get("/versions/:version_id", C(version::deprecated::show));
35+
api_router.get("/versions/:version_id", C(version::deprecated::show_by_id));
3636

3737
// Routes used by the frontend
3838
api_router.get("/crates/:crate_id", C(krate::metadata::show));
39-
api_router.get("/crates/:crate_id/:version", C(version::deprecated::show));
39+
api_router.get("/crates/:crate_id/:version", C(version::metadata::show));
4040
api_router.get(
4141
"/crates/:crate_id/:version/readme",
4242
C(krate::metadata::readme),

0 commit comments

Comments
 (0)