summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSanto Cariotti <santo@dcariotti.me>2022-09-24 16:52:11 +0000
committerSanto Cariotti <santo@dcariotti.me>2022-09-24 16:52:11 +0000
commita17ec8ff642bbf0596030e773d9d6820d2d9fd88 (patch)
tree798762b910dc138eaa137c6d114ad6026ec8e327
parente3e1fb936e807a96e80229bc86d1c4bb385e88da (diff)
User has name field
-rw-r--r--migrations/20220903093057_add-users-table.sql1
-rw-r--r--src/models/auth.rs1
-rw-r--r--src/models/user.rs17
-rw-r--r--src/routes/auth.rs9
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);