use actix::{Handler, Message}; use diesel::MysqlConnection; use diesel::{ExpressionMethods, QueryDsl, RunQueryDsl}; use crate::error::ServiceError; use crate::model::DbExecutor; use crate::schema::passwords::{columns as password_columns, dsl::passwords}; pub struct UpdatePasswordRequest { pub user: u64, pub hash: String, } impl UpdatePasswordRequest { pub fn new(user: u64, hash: String) -> Self { Self { user, hash } } } impl Message for UpdatePasswordRequest { type Result = Result<(), ServiceError>; } impl Handler for DbExecutor { type Result = Result<(), ServiceError>; fn handle(&mut self, req: UpdatePasswordRequest, _: &mut Self::Context) -> Self::Result { let conn: &MysqlConnection = &self.0.get().unwrap(); diesel::update(passwords.filter(password_columns::id.eq(req.user))) .set(password_columns::hash.eq(req.hash)) .execute(conn)?; Ok(()) } }