82 lines
1.8 KiB
Rust
82 lines
1.8 KiB
Rust
use diesel::prelude::*;
|
|
use serde::{Serialize, Deserialize};
|
|
use siren::ServiceError;
|
|
|
|
use crate::db::schema::users;
|
|
|
|
use super::hash_password;
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
pub struct RegisterUser {
|
|
pub email: String,
|
|
pub password: String,
|
|
pub first_name: String,
|
|
pub last_name: String,
|
|
}
|
|
|
|
impl RegisterUser {
|
|
pub fn convert_to_insert(self) -> Result<InsertUser, ServiceError> {
|
|
let hash = hash_password(self.password.as_bytes())?;
|
|
Ok(InsertUser {
|
|
email: self.email.to_lowercase(),
|
|
hash,
|
|
role: "user".to_string(),
|
|
first_name: self.first_name,
|
|
last_name: self.last_name,
|
|
})
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
pub struct LoginRequest {
|
|
pub email: String,
|
|
pub password: String,
|
|
}
|
|
|
|
#[derive(Debug, Serialize, Deserialize)]
|
|
pub struct LoginResponse {
|
|
pub token: String,
|
|
}
|
|
|
|
#[derive(Debug, Queryable, QueryableByName, Serialize, Deserialize)]
|
|
#[diesel(table_name = users)]
|
|
pub struct QueryUser {
|
|
pub email: String,
|
|
pub hash: String,
|
|
pub role: String,
|
|
pub first_name: String,
|
|
pub last_name: String,
|
|
}
|
|
|
|
impl QueryUser {
|
|
pub fn get_by_email(email: &str) -> Result<QueryUser, ServiceError> {
|
|
let mut conn = crate::db::connection()?;
|
|
// Check if the user exists by email, case insensitive
|
|
|
|
let user = users::table
|
|
.filter(users::email.eq(email.to_lowercase()))
|
|
.first(&mut conn)?;
|
|
Ok(user)
|
|
}
|
|
}
|
|
|
|
#[derive(Debug, Insertable, AsChangeset, Serialize, Deserialize)]
|
|
#[diesel(table_name = users)]
|
|
pub struct InsertUser {
|
|
pub email: String,
|
|
pub hash: String,
|
|
pub role: String,
|
|
pub first_name: String,
|
|
pub last_name: String,
|
|
}
|
|
|
|
impl InsertUser {
|
|
pub fn insert(user: Self) -> Result<QueryUser, ServiceError> {
|
|
let mut conn = crate::db::connection()?;
|
|
let user = diesel::insert_into(users::table)
|
|
.values(user)
|
|
.get_result(&mut conn)?;
|
|
Ok(user)
|
|
}
|
|
}
|