diff options
| -rw-r--r-- | migrations/20220903093057_add-users-table.sql | 1 | ||||
| -rw-r--r-- | src/models/auth.rs | 1 | ||||
| -rw-r--r-- | src/models/user.rs | 17 | ||||
| -rw-r--r-- | src/routes/auth.rs | 9 |
4 files changed, 19 insertions, 9 deletions
diff --git a/migrations/20220903093057_add-users-table.sql b/migrations/20220903093057_add-users-table.sql index 58be825..d0b669d 100644 --- a/migrations/20220903093057_add-users-table.sql +++ b/migrations/20220903093057_add-users-table.sql @@ -1,5 +1,6 @@ CREATE TABLE users ( id SERIAL PRIMARY KEY, + name VARCHAR(100), email VARCHAR(100) UNIQUE NOT NULL, username VARCHAR(100) UNIQUE NOT NULL, password VARCHAR(100) NOT NULL, diff --git a/src/models/auth.rs b/src/models/auth.rs index 651bf26..8a673dd 100644 --- a/src/models/auth.rs +++ b/src/models/auth.rs @@ -42,6 +42,7 @@ pub struct LoginCredentials { /// Paylod used for user creation #[derive(Deserialize)] pub struct SignUpForm { + pub name: String, pub email: String, pub username: String, pub password1: String, diff --git a/src/models/user.rs b/src/models/user.rs index 7c08075..56bc5da 100644 --- a/src/models/user.rs +++ b/src/models/user.rs @@ -14,6 +14,7 @@ use validator::Validate; #[derive(Deserialize, Serialize, Validate)] pub struct User { id: i32, + name: String, #[validate(length(min = 4, message = "Can not be empty"))] email: String, #[validate(length(min = 2, message = "Can not be empty"))] @@ -28,8 +29,8 @@ pub struct User { #[serde_as] #[derive(Deserialize, Serialize, sqlx::FromRow)] pub struct UserList { - // It is public because it used by `Claims` creation pub id: i32, + name: String, email: String, username: String, pub is_staff: Option<bool>, @@ -39,9 +40,10 @@ pub struct UserList { impl User { /// By default an user has id = 0. It is not created yet - pub fn new(email: String, username: String, password: String) -> Self { + pub fn new(name: String, email: String, username: String, password: String) -> Self { Self { id: 0, + name, email, username, password, @@ -61,11 +63,12 @@ impl User { let rec: UserList = sqlx::query_as( r#" - INSERT INTO users (email, username, password) - VALUES ( $1, $2, $3) + INSERT INTO users (name, email, username, password) + VALUES ( $1, $2, $3, $4) RETURNING id, email, username, is_staff, avatar "#, ) + .bind(user.name) .bind(user.email) .bind(user.username) .bind(crypted_password) @@ -83,7 +86,7 @@ impl User { let rec: UserList = sqlx::query_as( r#" - SELECT id, email, username, is_staff, avatar FROM "users" + SELECT id, name, email, username, is_staff, avatar FROM "users" WHERE username = $1 AND password = $2 "#, ) @@ -101,7 +104,7 @@ impl User { let rec: UserList = sqlx::query_as( r#" - SELECT id, email, username, is_staff, avatar FROM "users" + SELECT id, name, email, username, is_staff, avatar FROM "users" WHERE id = $1 "#, ) @@ -116,7 +119,7 @@ impl User { pub async fn list(page: i64) -> Result<Vec<UserList>, AppError> { let pool = unsafe { get_client() }; let rows: Vec<UserList> = sqlx::query_as( - r#"SELECT id, email, username, is_staff, avatar FROM users + r#"SELECT id, name, email, username, is_staff, avatar FROM users LIMIT $1 OFFSET $2 "#, ) diff --git a/src/routes/auth.rs b/src/routes/auth.rs index 0fe92fc..a7191e2 100644 --- a/src/routes/auth.rs +++ b/src/routes/auth.rs @@ -18,7 +18,7 @@ pub fn create_route() -> Router { /// Make login. Check if a user with the email and password passed in request body exists into the /// database async fn make_login(Json(payload): Json<LoginCredentials>) -> Result<Json<AuthBody>, AppError> { - let user = User::new(String::new(), payload.username, payload.password); + let user = User::new(String::new(), String::new(), payload.username, payload.password); match User::find(user).await { Ok(user) => { let claims = Claims::new(user.id); @@ -49,7 +49,12 @@ async fn signup(Json(payload): Json<SignUpForm>) -> Result<JsonCreate<AuthBody>, )); } - let user = User::new(payload.email, payload.username, payload.password1); + let user = User::new( + payload.name, + payload.email, + payload.username, + payload.password1, + ); let user = User::create(user).await?; let claims = Claims::new(user.id); |
