1
0
mirror of https://github.com/actix/examples synced 2024-11-28 00:12:57 +01:00
examples/auth/simple-auth-server/src/invitation_handler.rs

47 lines
1.2 KiB
Rust
Raw Normal View History

use actix_web::{web, HttpResponse};
2022-09-11 00:33:09 +02:00
use diesel::prelude::*;
use serde::Deserialize;
2022-08-28 19:39:28 +02:00
use crate::{
email_service::send_invitation,
models::{Invitation, Pool},
};
2019-03-29 21:43:03 +01:00
#[derive(Deserialize)]
pub struct InvitationData {
pub email: String,
}
2019-12-07 18:59:24 +01:00
pub async fn post_invitation(
invitation_data: web::Json<InvitationData>,
pool: web::Data<Pool>,
) -> Result<HttpResponse, actix_web::Error> {
// run diesel blocking code
2022-02-18 03:44:02 +01:00
web::block(move || create_invitation(invitation_data.into_inner().email, pool)).await??;
Ok(HttpResponse::Ok().finish())
}
fn create_invitation(
eml: String,
pool: web::Data<Pool>,
) -> Result<(), crate::errors::ServiceError> {
let invitation = dbg!(query(eml, pool)?);
send_invitation(&invitation)
}
/// Diesel query
2022-02-18 03:44:02 +01:00
fn query(eml: String, pool: web::Data<Pool>) -> Result<Invitation, crate::errors::ServiceError> {
use crate::schema::invitations::dsl::invitations;
2022-09-11 00:33:09 +02:00
let mut conn = pool.get().unwrap();
let new_invitation = Invitation::from(eml);
let inserted_invitation = diesel::insert_into(invitations)
.values(&new_invitation)
2022-09-11 00:33:09 +02:00
.get_result(&mut conn)?;
Ok(inserted_invitation)
}