1
0
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:
Rob Ede
2022-09-10 23:33:09 +01:00
parent fd86b650f1
commit ed04cc97b3
11 changed files with 68 additions and 50 deletions

View File

@ -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"

View File

@ -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) {

View File

@ -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)
}

View File

@ -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,

View File

@ -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());
}
}

View File

@ -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);