Skip to content

Propose new MVC module layout #1155

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Feb 1, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions src/badge.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use krate::Crate;
use schema::badges;

use diesel::pg::Pg;
use diesel::prelude::*;
use serde_json;
use std::collections::HashMap;

use models::Crate;
use schema::badges;

#[derive(Debug, PartialEq, Clone, Deserialize, Serialize)]
#[serde(rename_all = "kebab-case", tag = "badge_type", content = "attributes")]
pub enum Badge {
Expand Down
2 changes: 1 addition & 1 deletion src/bin/delete-crate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use std::env;
use std::io;
use std::io::prelude::*;

use cargo_registry::Crate;
use cargo_registry::models::Crate;
use cargo_registry::schema::crates;

#[allow(dead_code)]
Expand Down
2 changes: 1 addition & 1 deletion src/bin/delete-version.rs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ use std::env;
use std::io;
use std::io::prelude::*;

use cargo_registry::{Crate, Version};
use cargo_registry::models::{Crate, Version};
use cargo_registry::schema::versions;

#[allow(dead_code)]
Expand Down
6 changes: 4 additions & 2 deletions src/bin/render-readmes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,12 @@ use std::thread;
use tar::Archive;
use url::Url;

use cargo_registry::{Config, Version};
use cargo_registry::schema::*;
use cargo_registry::Config;
use cargo_registry::render::readme_to_html;

use cargo_registry::models::Version;
use cargo_registry::schema::*;

const DEFAULT_PAGE_SIZE: usize = 25;
const USAGE: &str = "
Usage: render-readmes [options]
Expand Down
3 changes: 1 addition & 2 deletions src/bin/transfer-crates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ use std::env;
use std::io;
use std::io::prelude::*;

use cargo_registry::{Crate, User};
use cargo_registry::owner::OwnerKind;
use cargo_registry::models::{Crate, OwnerKind, User};
use cargo_registry::schema::*;

fn main() {
Expand Down
6 changes: 2 additions & 4 deletions src/bin/update-downloads.rs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ use diesel::prelude::*;
use std::env;
use std::time::Duration;

use cargo_registry::VersionDownload;
use cargo_registry::models::VersionDownload;
use cargo_registry::schema::*;

static LIMIT: i64 = 1000;
Expand Down Expand Up @@ -118,9 +118,7 @@ mod test {
use diesel::insert_into;
use super::*;
use cargo_registry::env;
use cargo_registry::krate::{Crate, NewCrate};
use cargo_registry::user::{NewUser, User};
use cargo_registry::version::{NewVersion, Version};
use cargo_registry::models::{Crate, NewCrate, NewUser, NewVersion, User, Version};

fn conn() -> PgConnection {
let conn = PgConnection::establish(&env("TEST_DATABASE_URL")).unwrap();
Expand Down
5 changes: 3 additions & 2 deletions src/category.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@ use conduit::{Request, Response};
use conduit_router::RequestParams;
use diesel::*;

use Crate;
use db::RequestTransaction;
use schema::*;
use util::{CargoResult, RequestUtils};

use models::Crate;
use schema::*;

#[derive(Clone, Identifiable, Queryable, QueryableByName, Debug)]
#[table_name = "categories"]
pub struct Category {
Expand Down
3 changes: 3 additions & 0 deletions src/controllers/helpers/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
pub mod pagination;

pub use self::pagination::Paginate;
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ use diesel::query_builder::*;
use diesel::sql_types::BigInt;
use diesel::pg::Pg;

#[derive(Debug)]
pub struct Paginated<T> {
query: T,
limit: i64,
Expand Down
3 changes: 3 additions & 0 deletions src/controllers/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
// TODO: All endpoints would be moved to submodules here

pub mod helpers;
5 changes: 3 additions & 2 deletions src/crate_owner_invitation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@ use diesel::prelude::*;
use serde_json;

use db::RequestTransaction;
use schema::{crate_owner_invitations, crate_owners, crates, users};
use user::RequestUser;
use util::errors::{human, CargoResult};
use util::RequestUtils;
use owner::{CrateOwner, OwnerKind};

use models::{CrateOwner, OwnerKind};
use schema::{crate_owner_invitations, crate_owners, crates, users};

/// The model representing a row in the `crate_owner_invitations` database table.
#[derive(Clone, Copy, Debug, PartialEq, Eq, Identifiable, Queryable)]
Expand Down
8 changes: 4 additions & 4 deletions src/dependency.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@ use diesel::row::NamedRow;
use semver;

use git;
use krate::Crate;
use schema::*;
use util::{human, CargoResult};
use version::Version;

use models::{Crate, Version};
use schema::*;

#[derive(Identifiable, Associations, Debug)]
#[belongs_to(Version)]
Expand Down Expand Up @@ -86,7 +86,7 @@ impl ReverseDependency {

pub fn add_dependencies(
conn: &PgConnection,
deps: &[::upload::CrateDependency],
deps: &[::views::EncodableCrateDependency],
target_version_id: i32,
) -> CargoResult<Vec<git::Dependency>> {
use diesel::insert_into;
Expand Down
2 changes: 1 addition & 1 deletion src/download.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ use chrono::NaiveDate;
use diesel;
use diesel::prelude::*;

use models::Version;
use schema::version_downloads;
use version::Version;

#[derive(Queryable, Identifiable, Associations, Debug, Clone, Copy)]
#[belongs_to(Version)]
Expand Down
3 changes: 2 additions & 1 deletion src/git.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,10 @@ use git2;
use serde_json;

use app::App;
use dependency::Kind;
use util::{internal, CargoResult};

use models::Kind;

#[derive(Serialize, Deserialize, Debug)]
pub struct Crate {
pub name: String,
Expand Down
10 changes: 4 additions & 6 deletions src/keyword.rs
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
#[allow(unused_imports)] // TODO: Remove when rustc 1.23 is stable
use std::ascii::AsciiExt;

use chrono::NaiveDateTime;
use conduit::{Request, Response};
use conduit_router::RequestParams;
use diesel::prelude::*;
use diesel;

use Crate;
use db::RequestTransaction;
use pagination::Paginate;
use schema::*;
use controllers::helpers::Paginate;
use util::{CargoResult, RequestUtils};

use models::Crate;
use schema::*;

#[derive(Clone, Identifiable, Queryable, Debug)]
pub struct Keyword {
pub id: i32,
Expand Down
9 changes: 5 additions & 4 deletions src/krate/downloads.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,13 @@ use conduit_router::RequestParams;
use diesel::prelude::*;

use db::RequestTransaction;
use download::{EncodableVersionDownload, VersionDownload};
use schema::*;
use util::{CargoResult, RequestUtils};
use Version;

use super::{to_char, Crate};
use views::EncodableVersionDownload;
use models::{Crate, Version, VersionDownload};
use schema::*;

use super::to_char;

/// Handles the `GET /crates/:crate_id/downloads` route.
pub fn downloads(req: &mut Request) -> CargoResult<Response> {
Expand Down
4 changes: 2 additions & 2 deletions src/krate/follow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ use diesel::prelude::*;
use diesel;

use db::RequestTransaction;
use schema::*;
use user::RequestUser;
use util::{CargoResult, RequestUtils};

use super::{Crate, Follow};
use models::{Crate, Follow};
use schema::*;

fn follow_target(req: &mut Request) -> CargoResult<Follow> {
let user = req.user()?;
Expand Down
13 changes: 6 additions & 7 deletions src/krate/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,15 @@ use conduit_router::RequestParams;
use diesel::prelude::*;

use app::RequestApp;
use category::{CrateCategory, EncodableCategory};
use db::RequestTransaction;
use dependency::EncodableDependency;
use keyword::{CrateKeyword, EncodableKeyword};
use schema::*;
use util::{human, CargoResult, RequestUtils};
use version::EncodableVersion;
use {Category, Keyword, Version};

use super::{Crate, CrateDownload, EncodableCrate, ALL_COLUMNS};
use views::{EncodableCategory, EncodableCrate, EncodableDependency, EncodableKeyword,
EncodableVersion};
use models::{Category, Crate, CrateCategory, CrateDownload, CrateKeyword, Keyword, Version};
use schema::*;

use super::ALL_COLUMNS;

/// Handles the `GET /summary` route.
pub fn summary(req: &mut Request) -> CargoResult<Response> {
Expand Down
16 changes: 7 additions & 9 deletions src/krate/mod.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
#[allow(unused_imports)] // TODO: Remove when rustc 1.23 is stable
use std::ascii::AsciiExt;

use chrono::{NaiveDate, NaiveDateTime};
use diesel::associations::Identifiable;
use diesel::prelude::*;
Expand All @@ -10,14 +7,14 @@ use semver;
use url::Url;

use app::App;
use badge::EncodableBadge;
use crate_owner_invitation::NewCrateOwnerInvitation;
use dependency::ReverseDependency;
use owner::{CrateOwner, Owner, OwnerKind};
use schema::*;
use util::{human, CargoResult};

use views::EncodableBadge;
use models::{Badge, Category, CrateOwner, Keyword, NewCrateOwnerInvitation, Owner, OwnerKind,
ReverseDependency, User, Version};

use schema::*;
use with_count::*;
use {Badge, Category, Keyword, User, Version};

pub mod search;
pub mod publish;
Expand Down Expand Up @@ -560,6 +557,7 @@ mod tests {
use super::*;
use chrono::NaiveDate;
use serde_json;
use models::Crate;

#[test]
fn documentation_blacklist_no_url_provided() {
Expand Down
6 changes: 3 additions & 3 deletions src/krate/owners.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ use serde_json;

use app::RequestApp;
use db::RequestTransaction;
use owner::{rights, EncodableOwner, Owner, Rights, Team};
use owner::rights;
use user::RequestUser;
use util::{human, CargoResult, RequestUtils};
use User;

use super::Crate;
use views::EncodableOwner;
use models::{Crate, Owner, Rights, Team, User};

/// Handles the `GET /crates/:crate_id/owners` route.
pub fn owners(req: &mut Request) -> CargoResult<Response> {
Expand Down
13 changes: 6 additions & 7 deletions src/krate/publish.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,15 @@ use app::RequestApp;
use db::RequestTransaction;
use dependency;
use git;
use owner::{rights, Rights};
use owner::rights;
use render;
use upload;
use user::RequestUser;
use util::{read_fill, read_le_u32};
use util::{human, internal, CargoResult, ChainError, RequestUtils};
use version::NewVersion;
use {Badge, Category, Keyword, User};

use super::{EncodableCrate, NewCrate};
use views::EncodableCrate;
use views::EncodableCrateUpload;
use models::{Badge, Category, Keyword, NewCrate, NewVersion, Rights, User};

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

// Make sure required fields are provided
Expand Down
11 changes: 6 additions & 5 deletions src/krate/search.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@ use diesel::prelude::*;
use diesel_full_text_search::*;

use db::RequestTransaction;
use owner::OwnerKind;
use pagination::Paginate;
use schema::*;
use controllers::helpers::Paginate;
use user::RequestUser;
use util::{CargoResult, RequestUtils};
use {Badge, Version};

use super::{canon_crate_name, Crate, EncodableCrate, ALL_COLUMNS};
use views::EncodableCrate;
use models::{Badge, Crate, OwnerKind, Version};
use schema::*;

use super::{canon_crate_name, ALL_COLUMNS};

/// Handles the `GET /crates` route.
/// Returns a list of crates. Called in a variety of scenarios in the
Expand Down
14 changes: 4 additions & 10 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,15 +51,7 @@ extern crate conduit_static;
extern crate cookie;

pub use app::App;
pub use self::badge::Badge;
pub use self::category::Category;
pub use config::Config;
pub use self::dependency::Dependency;
pub use self::download::VersionDownload;
pub use self::keyword::Keyword;
pub use self::krate::Crate;
pub use self::user::User;
pub use self::version::Version;
pub use self::uploaders::{Bomb, Uploader};

use std::sync::Arc;
Expand Down Expand Up @@ -89,16 +81,18 @@ pub mod owner;
pub mod render;
pub mod schema;
pub mod token;
pub mod upload;
pub mod uploaders;
pub mod user;
pub mod util;
pub mod version;
pub mod email;
pub mod site_metadata;

pub mod controllers;
pub mod models;
pub mod views;

mod local_upload;
mod pagination;
mod with_count;

/// Used for setting different values depending on whether the app is being run in production,
Expand Down
Loading