Skip to content

Commit 7004071

Browse files
committed
Propose new MVC module architecture and update use declarations
1 parent 6cb501f commit 7004071

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+183
-154
lines changed

src/badge.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
use krate::Crate;
2-
use schema::badges;
3-
41
use diesel::pg::Pg;
52
use diesel::prelude::*;
63
use serde_json;
74
use std::collections::HashMap;
85

6+
use models::Crate;
7+
use schema::badges;
8+
99
#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
1010
#[serde(rename_all = "kebab-case", tag = "badge_type", content = "attributes")]
1111
pub enum Badge {

src/bin/delete-crate.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use std::env;
1515
use std::io;
1616
use std::io::prelude::*;
1717

18-
use cargo_registry::Crate;
18+
use cargo_registry::models::Crate;
1919
use cargo_registry::schema::crates;
2020

2121
#[allow(dead_code)]

src/bin/delete-version.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ use std::env;
1515
use std::io;
1616
use std::io::prelude::*;
1717

18-
use cargo_registry::{Crate, Version};
18+
use cargo_registry::models::{Crate, Version};
1919
use cargo_registry::schema::versions;
2020

2121
#[allow(dead_code)]

src/bin/render-readmes.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,12 @@ use std::thread;
3232
use tar::Archive;
3333
use url::Url;
3434

35-
use cargo_registry::{Config, Version};
36-
use cargo_registry::schema::*;
35+
use cargo_registry::Config;
3736
use cargo_registry::render::readme_to_html;
3837

38+
use cargo_registry::models::Version;
39+
use cargo_registry::schema::*;
40+
3941
const DEFAULT_PAGE_SIZE: usize = 25;
4042
const USAGE: &str = "
4143
Usage: render-readmes [options]

src/bin/transfer-crates.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ use std::env;
1313
use std::io;
1414
use std::io::prelude::*;
1515

16-
use cargo_registry::{Crate, User};
17-
use cargo_registry::owner::OwnerKind;
16+
use cargo_registry::models::{Crate, OwnerKind, User};
1817
use cargo_registry::schema::*;
1918

2019
fn main() {

src/bin/update-downloads.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ use diesel::prelude::*;
88
use std::env;
99
use std::time::Duration;
1010

11-
use cargo_registry::VersionDownload;
11+
use cargo_registry::models::VersionDownload;
1212
use cargo_registry::schema::*;
1313

1414
static LIMIT: i64 = 1000;
@@ -118,9 +118,7 @@ mod test {
118118
use diesel::insert_into;
119119
use super::*;
120120
use cargo_registry::env;
121-
use cargo_registry::krate::{Crate, NewCrate};
122-
use cargo_registry::user::{NewUser, User};
123-
use cargo_registry::version::{NewVersion, Version};
121+
use cargo_registry::models::{Crate, NewCrate, NewUser, NewVersion, User, Version};
124122

125123
fn conn() -> PgConnection {
126124
let conn = PgConnection::establish(&env("TEST_DATABASE_URL")).unwrap();

src/category.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,12 @@ use conduit::{Request, Response};
33
use conduit_router::RequestParams;
44
use diesel::*;
55

6-
use Crate;
76
use db::RequestTransaction;
8-
use schema::*;
97
use util::{CargoResult, RequestUtils};
108

9+
use models::Crate;
10+
use schema::*;
11+
1112
#[derive(Clone, Identifiable, Queryable, QueryableByName, Debug)]
1213
#[table_name = "categories"]
1314
pub struct Category {

src/controllers/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
// TODO: All endpoints would be moved to submodules here

src/crate_owner_invitation.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@ use diesel::prelude::*;
44
use serde_json;
55

66
use db::RequestTransaction;
7-
use schema::{crate_owner_invitations, crate_owners, crates, users};
87
use user::RequestUser;
98
use util::errors::{human, CargoResult};
109
use util::RequestUtils;
11-
use owner::{CrateOwner, OwnerKind};
10+
11+
use models::{CrateOwner, OwnerKind};
12+
use schema::{crate_owner_invitations, crate_owners, crates, users};
1213

1314
/// The model representing a row in the `crate_owner_invitations` database table.
1415
#[derive(Clone, Copy, Debug, PartialEq, Eq, Identifiable, Queryable)]

src/dependency.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ use diesel::row::NamedRow;
55
use semver;
66

77
use git;
8-
use krate::Crate;
9-
use schema::*;
108
use util::{human, CargoResult};
11-
use version::Version;
9+
10+
use models::{Crate, Version};
11+
use schema::*;
1212

1313
#[derive(Identifiable, Associations, Debug)]
1414
#[belongs_to(Version)]
@@ -86,7 +86,7 @@ impl ReverseDependency {
8686

8787
pub fn add_dependencies(
8888
conn: &PgConnection,
89-
deps: &[::upload::CrateDependency],
89+
deps: &[::views::EncodableCrateDependency],
9090
target_version_id: i32,
9191
) -> CargoResult<Vec<git::Dependency>> {
9292
use diesel::insert_into;

src/download.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ use chrono::NaiveDate;
22
use diesel;
33
use diesel::prelude::*;
44

5+
use models::Version;
56
use schema::version_downloads;
6-
use version::Version;
77

88
#[derive(Queryable, Identifiable, Associations, Debug, Clone, Copy)]
99
#[belongs_to(Version)]

src/git.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,10 @@ use git2;
99
use serde_json;
1010

1111
use app::App;
12-
use dependency::Kind;
1312
use util::{internal, CargoResult};
1413

14+
use models::Kind;
15+
1516
#[derive(Serialize, Deserialize, Debug)]
1617
pub struct Crate {
1718
pub name: String,

src/keyword.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,16 @@
1-
#[allow(unused_imports)] // TODO: Remove when rustc 1.23 is stable
2-
use std::ascii::AsciiExt;
3-
41
use chrono::NaiveDateTime;
52
use conduit::{Request, Response};
63
use conduit_router::RequestParams;
74
use diesel::prelude::*;
85
use diesel;
96

10-
use Crate;
117
use db::RequestTransaction;
128
use pagination::Paginate;
13-
use schema::*;
149
use util::{CargoResult, RequestUtils};
1510

11+
use models::Crate;
12+
use schema::*;
13+
1614
#[derive(Clone, Identifiable, Queryable, Debug)]
1715
pub struct Keyword {
1816
pub id: i32,

src/krate/downloads.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,13 @@ use conduit_router::RequestParams;
1010
use diesel::prelude::*;
1111

1212
use db::RequestTransaction;
13-
use download::{EncodableVersionDownload, VersionDownload};
14-
use schema::*;
1513
use util::{CargoResult, RequestUtils};
16-
use Version;
1714

18-
use super::{to_char, Crate};
15+
use views::EncodableVersionDownload;
16+
use models::{Crate, Version, VersionDownload};
17+
use schema::*;
18+
19+
use super::to_char;
1920

2021
/// Handles the `GET /crates/:crate_id/downloads` route.
2122
pub fn downloads(req: &mut Request) -> CargoResult<Response> {

src/krate/follow.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ use diesel::prelude::*;
77
use diesel;
88

99
use db::RequestTransaction;
10-
use schema::*;
1110
use user::RequestUser;
1211
use util::{CargoResult, RequestUtils};
1312

14-
use super::{Crate, Follow};
13+
use models::{Crate, Follow};
14+
use schema::*;
1515

1616
fn follow_target(req: &mut Request) -> CargoResult<Follow> {
1717
let user = req.user()?;

src/krate/metadata.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,15 @@ use conduit_router::RequestParams;
99
use diesel::prelude::*;
1010

1111
use app::RequestApp;
12-
use category::{CrateCategory, EncodableCategory};
1312
use db::RequestTransaction;
14-
use dependency::EncodableDependency;
15-
use keyword::{CrateKeyword, EncodableKeyword};
16-
use schema::*;
1713
use util::{human, CargoResult, RequestUtils};
18-
use version::EncodableVersion;
19-
use {Category, Keyword, Version};
2014

21-
use super::{Crate, CrateDownload, EncodableCrate, ALL_COLUMNS};
15+
use views::{EncodableCategory, EncodableCrate, EncodableDependency, EncodableKeyword,
16+
EncodableVersion};
17+
use models::{Category, Crate, CrateCategory, CrateDownload, CrateKeyword, Keyword, Version};
18+
use schema::*;
19+
20+
use super::ALL_COLUMNS;
2221

2322
/// Handles the `GET /summary` route.
2423
pub fn summary(req: &mut Request) -> CargoResult<Response> {

src/krate/mod.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
#[allow(unused_imports)] // TODO: Remove when rustc 1.23 is stable
2-
use std::ascii::AsciiExt;
3-
41
use chrono::{NaiveDate, NaiveDateTime};
52
use diesel::associations::Identifiable;
63
use diesel::prelude::*;
@@ -10,14 +7,14 @@ use semver;
107
use url::Url;
118

129
use app::App;
13-
use badge::EncodableBadge;
14-
use crate_owner_invitation::NewCrateOwnerInvitation;
15-
use dependency::ReverseDependency;
16-
use owner::{CrateOwner, Owner, OwnerKind};
17-
use schema::*;
1810
use util::{human, CargoResult};
11+
12+
use views::EncodableBadge;
13+
use models::{Badge, Category, CrateOwner, Keyword, NewCrateOwnerInvitation, Owner, OwnerKind,
14+
ReverseDependency, User, Version};
15+
16+
use schema::*;
1917
use with_count::*;
20-
use {Badge, Category, Keyword, User, Version};
2118

2219
pub mod search;
2320
pub mod publish;
@@ -560,6 +557,7 @@ mod tests {
560557
use super::*;
561558
use chrono::NaiveDate;
562559
use serde_json;
560+
use models::Crate;
563561

564562
#[test]
565563
fn documentation_blacklist_no_url_provided() {

src/krate/owners.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ use serde_json;
77

88
use app::RequestApp;
99
use db::RequestTransaction;
10-
use owner::{rights, EncodableOwner, Owner, Rights, Team};
10+
use owner::rights;
1111
use user::RequestUser;
1212
use util::{human, CargoResult, RequestUtils};
13-
use User;
1413

15-
use super::Crate;
14+
use views::EncodableOwner;
15+
use models::{Crate, Owner, Rights, Team, User};
1616

1717
/// Handles the `GET /crates/:crate_id/owners` route.
1818
pub fn owners(req: &mut Request) -> CargoResult<Response> {

src/krate/publish.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,16 +13,15 @@ use app::RequestApp;
1313
use db::RequestTransaction;
1414
use dependency;
1515
use git;
16-
use owner::{rights, Rights};
16+
use owner::rights;
1717
use render;
18-
use upload;
1918
use user::RequestUser;
2019
use util::{read_fill, read_le_u32};
2120
use util::{human, internal, CargoResult, ChainError, RequestUtils};
22-
use version::NewVersion;
23-
use {Badge, Category, Keyword, User};
2421

25-
use super::{EncodableCrate, NewCrate};
22+
use views::EncodableCrate;
23+
use views::EncodableCrateUpload;
24+
use models::{Badge, Category, Keyword, NewCrate, NewVersion, Rights, User};
2625

2726
/// Handles the `PUT /crates/new` route.
2827
/// Used by `cargo publish` to publish a new crate or to publish a new version of an
@@ -193,7 +192,7 @@ pub fn publish(req: &mut Request) -> CargoResult<Response> {
193192
/// This function parses the JSON headers to interpret the data and validates
194193
/// the data during and after the parsing. Returns crate metadata and user
195194
/// information.
196-
fn parse_new_headers(req: &mut Request) -> CargoResult<(upload::NewCrate, User)> {
195+
fn parse_new_headers(req: &mut Request) -> CargoResult<(EncodableCrateUpload, User)> {
197196
// Read the json upload request
198197
let amt = u64::from(read_le_u32(req.body())?);
199198
let max = req.app().config.max_upload_size;
@@ -203,7 +202,7 @@ fn parse_new_headers(req: &mut Request) -> CargoResult<(upload::NewCrate, User)>
203202
let mut json = vec![0; amt as usize];
204203
read_fill(req.body(), &mut json)?;
205204
let json = String::from_utf8(json).map_err(|_| human("json body was not valid utf-8"))?;
206-
let new: upload::NewCrate = serde_json::from_str(&json)
205+
let new: EncodableCrateUpload = serde_json::from_str(&json)
207206
.map_err(|e| human(&format_args!("invalid upload request: {}", e)))?;
208207

209208
// Make sure required fields are provided

src/krate/search.rs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@ use diesel::prelude::*;
55
use diesel_full_text_search::*;
66

77
use db::RequestTransaction;
8-
use owner::OwnerKind;
98
use pagination::Paginate;
10-
use schema::*;
119
use user::RequestUser;
1210
use util::{CargoResult, RequestUtils};
13-
use {Badge, Version};
1411

15-
use super::{canon_crate_name, Crate, EncodableCrate, ALL_COLUMNS};
12+
use views::EncodableCrate;
13+
use models::{Badge, Crate, OwnerKind, Version};
14+
use schema::*;
15+
16+
use super::{canon_crate_name, ALL_COLUMNS};
1617

1718
/// Handles the `GET /crates` route.
1819
/// Returns a list of crates. Called in a variety of scenarios in the

src/lib.rs

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,15 +51,7 @@ extern crate conduit_static;
5151
extern crate cookie;
5252

5353
pub use app::App;
54-
pub use self::badge::Badge;
55-
pub use self::category::Category;
5654
pub use config::Config;
57-
pub use self::dependency::Dependency;
58-
pub use self::download::VersionDownload;
59-
pub use self::keyword::Keyword;
60-
pub use self::krate::Crate;
61-
pub use self::user::User;
62-
pub use self::version::Version;
6355
pub use self::uploaders::{Bomb, Uploader};
6456

6557
use std::sync::Arc;
@@ -89,14 +81,17 @@ pub mod owner;
8981
pub mod render;
9082
pub mod schema;
9183
pub mod token;
92-
pub mod upload;
9384
pub mod uploaders;
9485
pub mod user;
9586
pub mod util;
9687
pub mod version;
9788
pub mod email;
9889
pub mod site_metadata;
9990

91+
pub mod controllers;
92+
pub mod models;
93+
pub mod views;
94+
10095
mod local_upload;
10196
mod pagination;
10297
mod with_count;

src/models/mod.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
pub use badge::{Badge, MaintenanceStatus};
2+
pub use category::{Category, CrateCategory, NewCategory};
3+
pub use crate_owner_invitation::NewCrateOwnerInvitation;
4+
pub use dependency::{Dependency, Kind, ReverseDependency};
5+
pub use download::VersionDownload;
6+
pub use keyword::{CrateKeyword, Keyword};
7+
pub use krate::{Crate, CrateDownload, Follow, NewCrate};
8+
pub use owner::{CrateOwner, NewTeam, Owner, OwnerKind, Rights, Team};
9+
pub use user::{Email, NewUser, User};
10+
pub use token::ApiToken;
11+
pub use version::{NewVersion, Version};

0 commit comments

Comments
 (0)