Skip to content
This repository was archived by the owner on Sep 8, 2019. It is now read-only.

Commit 821321e

Browse files
kluzynickkluzynick
authored andcommitted
Added a user import from csv.
Doesn't check for redundancy. Only meant for an initial startup
1 parent 985482f commit 821321e

File tree

7 files changed

+129
-7
lines changed

7 files changed

+129
-7
lines changed

backend/Cargo.lock

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

backend/Cargo.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,3 +12,8 @@ serde = { version = "1.0", features = ["derive"]}
1212
serde_json = "1.0"
1313
log = "0.4"
1414
simplelog = "0.5"
15+
csv = "1.0.5"
16+
17+
[[bin]]
18+
name = "csv_user_import"
19+
path = "src/bin/csv_user_import.rs"

backend/src/bin/csv_user_import.rs

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
use log::debug;
2+
use log::error;
3+
use log::info;
4+
use log::trace;
5+
use log::warn;
6+
use diesel::prelude::*;
7+
use diesel::MysqlConnection;
8+
use dotenv::dotenv;
9+
use csv;
10+
use web_dev::users::models::{NewUser,UserRequest};
11+
use web_dev::users::requests;
12+
use serde::Deserialize;
13+
use serde::Serialize;
14+
15+
#[derive(Serialize, Deserialize, Debug)]
16+
struct Csv_User {
17+
#[serde(rename = "Banner ID")]
18+
banner_id: i32,
19+
#[serde(rename = "Last Name")]
20+
last_name: String,
21+
#[serde(rename = "First Name")]
22+
first_name: String,
23+
#[serde(rename = "Email")]
24+
email: String,
25+
#[serde(rename = "Year")]
26+
year: String,
27+
#[serde(rename = "Department")]
28+
department: String,
29+
}
30+
31+
fn main(){
32+
dotenv().ok();
33+
34+
simplelog::TermLogger::init(simplelog::LevelFilter::Trace, simplelog::Config::default())
35+
.unwrap();
36+
37+
info!("Connecting to database");
38+
39+
let database_url = match env::var("DATABASE_URL") {
40+
Ok(url) => url,
41+
Err(e) => {
42+
error!("Could not read DATABASE_URL environment variable");
43+
return;
44+
}
45+
};
46+
47+
debug!("Connecting to {}", database_url);
48+
49+
let connection = match MysqlConnection::establish(&database_url) {
50+
Ok(c) => c,
51+
Err(e) => {
52+
error!("Could not connect to database: {}", e);
53+
return;
54+
}
55+
};
56+
57+
debug!("Connected to database");
58+
59+
use std::env;
60+
let arg = env::args().nth(1);
61+
let filename = match arg {
62+
Some(name) => name,
63+
None => {
64+
println!("Needs a filename");
65+
return;
66+
}
67+
};
68+
println!("{}", filename);
69+
70+
let all_users_result = csv::Reader::from_path(filename);
71+
let mut all_users = match all_users_result{
72+
Ok(data) => data,
73+
Err(e) => {
74+
println!("Bad file. Error {}",e);
75+
return;
76+
}
77+
};
78+
for result in all_users.deserialize(){
79+
let csv_user: Csv_User = match result{
80+
Ok(data) => data,
81+
Err(e) => {
82+
println!("Bad data, {:?}", e);
83+
return;
84+
}
85+
};
86+
let new_user:NewUser = NewUser{
87+
first_name: csv_user.first_name,
88+
last_name: csv_user.last_name,
89+
email: Some(csv_user.email),
90+
banner_id: csv_user.banner_id as u32,
91+
};
92+
93+
requests::create_user(new_user, &connection);
94+
}
95+
}
96+

backend/src/lib.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#[macro_use]
2+
extern crate diesel;
3+
4+
5+
pub mod errors;
6+
pub mod users;

backend/src/main.rs

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
#[macro_use]
2-
extern crate diesel;
3-
41
use std::env;
52
use std::sync::Mutex;
63

@@ -18,8 +15,6 @@ use dotenv::dotenv;
1815
use self::errors::WebdevError;
1916
use self::errors::WebdevErrorKind;
2017

21-
mod errors;
22-
mod users;
2318

2419
use self::users::models::UserRequest;
2520
use self::users::requests::handle_user;

backend/src/users/models.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub struct User {
2323
pub email: Option<String>,
2424
}
2525

26-
#[derive(Insertable, Serialize, Deserialize)]
26+
#[derive(Insertable, Serialize, Deserialize, Debug)]
2727
#[table_name = "users"]
2828
pub struct NewUser {
2929
pub first_name: String,

backend/src/users/requests.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ fn get_user(id: u64, database_connection: &MysqlConnection) -> Result<User, Webd
8181
}
8282
}
8383

84-
fn create_user(user: NewUser, database_connection: &MysqlConnection) -> Result<User, WebdevError> {
84+
pub fn create_user(user: NewUser, database_connection: &MysqlConnection) -> Result<User, WebdevError> {
8585
diesel::insert_into(users_schema::table)
8686
.values(user)
8787
.execute(database_connection)?;

0 commit comments

Comments
 (0)