mirror of
https://github.com/actix/examples
synced 2025-06-26 17:17:42 +02:00
update diesel to v2
This commit is contained in:
@ -9,7 +9,7 @@ actix-identity = "0.4"
|
||||
|
||||
chrono = { version = "0.4", features = ["serde"] }
|
||||
derive_more = "0.99.5"
|
||||
diesel = { version = "1.4", features = ["postgres", "uuidv07", "r2d2", "chrono"] }
|
||||
diesel = { version = "2", features = ["postgres", "r2d2", "uuid", "chrono"] }
|
||||
dotenv = "0.15"
|
||||
env_logger = "0.9"
|
||||
r2d2 = "0.8"
|
||||
@ -18,5 +18,5 @@ lazy_static = "1.4"
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
serde_json = "1"
|
||||
sparkpost = "0.5"
|
||||
uuid = { version = "0.8", features = ["v4", "serde"] }
|
||||
uuid = { version = "1", features = ["v4", "serde"] }
|
||||
time = "0.3"
|
||||
|
@ -2,7 +2,7 @@ use std::future::{ready, Ready};
|
||||
|
||||
use actix_identity::Identity;
|
||||
use actix_web::{dev::Payload, web, Error, FromRequest, HttpRequest, HttpResponse};
|
||||
use diesel::{prelude::*, PgConnection};
|
||||
use diesel::prelude::*;
|
||||
use serde::Deserialize;
|
||||
|
||||
use crate::{
|
||||
@ -52,6 +52,7 @@ pub async fn login(
|
||||
|
||||
let user_string = serde_json::to_string(&user).unwrap();
|
||||
id.remember(user_string);
|
||||
|
||||
Ok(HttpResponse::Ok().finish())
|
||||
}
|
||||
|
||||
@ -61,10 +62,12 @@ pub async fn get_me(logged_user: LoggedUser) -> HttpResponse {
|
||||
/// Diesel query
|
||||
fn query(auth_data: AuthData, pool: web::Data<Pool>) -> Result<SlimUser, ServiceError> {
|
||||
use crate::schema::users::dsl::{email, users};
|
||||
let conn: &PgConnection = &pool.get().unwrap();
|
||||
|
||||
let mut conn = pool.get().unwrap();
|
||||
|
||||
let mut items = users
|
||||
.filter(email.eq(&auth_data.email))
|
||||
.load::<User>(conn)?;
|
||||
.load::<User>(&mut conn)?;
|
||||
|
||||
if let Some(user) = items.pop() {
|
||||
if let Ok(matching) = verify(&user.hash, &auth_data.password) {
|
||||
|
@ -1,5 +1,5 @@
|
||||
use actix_web::{web, HttpResponse};
|
||||
use diesel::{prelude::*, PgConnection};
|
||||
use diesel::prelude::*;
|
||||
use serde::Deserialize;
|
||||
|
||||
use crate::{
|
||||
@ -34,12 +34,13 @@ fn create_invitation(
|
||||
fn query(eml: String, pool: web::Data<Pool>) -> Result<Invitation, crate::errors::ServiceError> {
|
||||
use crate::schema::invitations::dsl::invitations;
|
||||
|
||||
let new_invitation: Invitation = eml.into();
|
||||
let conn: &PgConnection = &pool.get().unwrap();
|
||||
let mut conn = pool.get().unwrap();
|
||||
|
||||
let new_invitation = Invitation::from(eml);
|
||||
|
||||
let inserted_invitation = diesel::insert_into(invitations)
|
||||
.values(&new_invitation)
|
||||
.get_result(conn)?;
|
||||
.get_result(&mut conn)?;
|
||||
|
||||
Ok(inserted_invitation)
|
||||
}
|
||||
|
@ -9,7 +9,7 @@ use super::schema::*;
|
||||
pub type Pool = r2d2::Pool<ConnectionManager<PgConnection>>;
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, Queryable, Insertable)]
|
||||
#[table_name = "users"]
|
||||
#[diesel(table_name = users)]
|
||||
pub struct User {
|
||||
pub email: String,
|
||||
pub hash: String,
|
||||
@ -27,7 +27,7 @@ impl User {
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize, Queryable, Insertable)]
|
||||
#[table_name = "invitations"]
|
||||
#[diesel(table_name = invitations)]
|
||||
pub struct Invitation {
|
||||
pub id: uuid::Uuid,
|
||||
pub email: String,
|
||||
|
@ -36,16 +36,15 @@ fn query(
|
||||
password: String,
|
||||
pool: web::Data<Pool>,
|
||||
) -> Result<SlimUser, crate::errors::ServiceError> {
|
||||
use crate::schema::{
|
||||
invitations::dsl::{id, invitations},
|
||||
users::dsl::users,
|
||||
};
|
||||
use crate::schema::{invitations::dsl::*, users::dsl::*};
|
||||
|
||||
let mut conn = pool.get().unwrap();
|
||||
|
||||
let invitation_id = uuid::Uuid::parse_str(&invitation_id)?;
|
||||
|
||||
let conn: &PgConnection = &pool.get().unwrap();
|
||||
invitations
|
||||
.filter(id.eq(invitation_id))
|
||||
.load::<Invitation>(conn)
|
||||
.load::<Invitation>(&mut conn)
|
||||
.map_err(|_db_error| ServiceError::BadRequest("Invalid Invitation".into()))
|
||||
.and_then(|mut result| {
|
||||
if let Some(invitation) = result.pop() {
|
||||
@ -54,10 +53,13 @@ fn query(
|
||||
// try hashing the password, else return the error that will be converted to ServiceError
|
||||
let password: String = hash_password(&password)?;
|
||||
dbg!(&password);
|
||||
|
||||
let user = User::from_details(invitation.email, password);
|
||||
let inserted_user: User =
|
||||
diesel::insert_into(users).values(&user).get_result(conn)?;
|
||||
let inserted_user: User = diesel::insert_into(users)
|
||||
.values(&user)
|
||||
.get_result(&mut conn)?;
|
||||
dbg!(&inserted_user);
|
||||
|
||||
return Ok(inserted_user.into());
|
||||
}
|
||||
}
|
||||
|
@ -1,11 +1,3 @@
|
||||
table! {
|
||||
invitations (id) {
|
||||
id -> Uuid,
|
||||
email -> Varchar,
|
||||
expires_at -> Timestamp,
|
||||
}
|
||||
}
|
||||
|
||||
table! {
|
||||
users (email) {
|
||||
email -> Varchar,
|
||||
@ -14,4 +6,12 @@ table! {
|
||||
}
|
||||
}
|
||||
|
||||
allow_tables_to_appear_in_same_query!(invitations, users,);
|
||||
table! {
|
||||
invitations (id) {
|
||||
id -> Uuid,
|
||||
email -> Varchar,
|
||||
expires_at -> Timestamp,
|
||||
}
|
||||
}
|
||||
|
||||
allow_tables_to_appear_in_same_query!(users, invitations);
|
||||
|
Reference in New Issue
Block a user