Added airport data to map
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
use chrono::{DateTime, Utc};
|
||||
use serde::{Deserialize, Serialize};
|
||||
|
||||
use sqlx::{Postgres, QueryBuilder};
|
||||
use crate::{auth::hash, error::ApiResult};
|
||||
use crate::db;
|
||||
|
||||
@@ -8,9 +8,6 @@ pub const ADMIN_ROLE: &str = "ADMIN";
|
||||
pub const USER_ROLE: &str = "USER";
|
||||
const TABLE_NAME: &str = "users";
|
||||
|
||||
/**
|
||||
* RegisterRequest
|
||||
*/
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct RegisterRequest {
|
||||
pub email: String,
|
||||
@@ -34,18 +31,12 @@ impl RegisterRequest {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* LoginRequest
|
||||
*/
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct LoginRequest {
|
||||
pub email: String,
|
||||
pub password: String,
|
||||
}
|
||||
|
||||
/**
|
||||
* UserResponse
|
||||
*/
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct UserResponse {
|
||||
pub email: String,
|
||||
@@ -65,6 +56,75 @@ impl From<User> for UserResponse {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, sqlx::FromRow)]
|
||||
pub struct UpdateUser {
|
||||
pub email: Option<String>,
|
||||
pub password: Option<String>,
|
||||
pub role: Option<String>,
|
||||
pub first_name: Option<String>,
|
||||
pub last_name: Option<String>,
|
||||
}
|
||||
|
||||
impl UpdateUser {
|
||||
pub async fn update(&self, email: &str) -> ApiResult<User> {
|
||||
let pool = db::pool();
|
||||
|
||||
let mut query_builder: QueryBuilder<Postgres> =
|
||||
QueryBuilder::new(&format!("UPDATE {} SET ", TABLE_NAME));
|
||||
|
||||
let mut first_clause = true;
|
||||
|
||||
let mut push_comma = |query_builder: &mut QueryBuilder<Postgres>| {
|
||||
if !first_clause {
|
||||
query_builder.push(", ");
|
||||
} else {
|
||||
first_clause = false;
|
||||
}
|
||||
};
|
||||
|
||||
if let Some(ref email) = self.email {
|
||||
push_comma(&mut query_builder);
|
||||
query_builder.push("email = ");
|
||||
query_builder.push_bind(email);
|
||||
}
|
||||
if let Some(ref password) = self.password {
|
||||
push_comma(&mut query_builder);
|
||||
let password_hash = hash(password)?;
|
||||
query_builder.push("password_hash = ");
|
||||
query_builder.push_bind(password_hash);
|
||||
}
|
||||
if let Some(ref role) = self.role {
|
||||
push_comma(&mut query_builder);
|
||||
query_builder.push("role = ");
|
||||
query_builder.push_bind(role);
|
||||
}
|
||||
if let Some(ref first_name) = self.first_name {
|
||||
push_comma(&mut query_builder);
|
||||
query_builder.push("first_name = ");
|
||||
query_builder.push_bind(first_name);
|
||||
}
|
||||
if let Some(ref last_name) = self.last_name {
|
||||
push_comma(&mut query_builder);
|
||||
query_builder.push("last_name = ");
|
||||
query_builder.push_bind(last_name);
|
||||
}
|
||||
push_comma(&mut query_builder);
|
||||
query_builder.push("updated_at = ");
|
||||
query_builder.push_bind(Utc::now());
|
||||
|
||||
query_builder.push(" WHERE email = ");
|
||||
query_builder.push_bind(email.to_string());
|
||||
query_builder.push(" RETURNING *");
|
||||
|
||||
dbg!(&query_builder.sql());
|
||||
|
||||
let query = query_builder.build_query_as::<User>();
|
||||
let user = query.fetch_one(pool).await?;
|
||||
|
||||
Ok(user)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize, sqlx::FromRow, Debug)]
|
||||
pub struct User {
|
||||
pub email: String,
|
||||
|
||||
Reference in New Issue
Block a user