use crate::models::user::User; use mysql::prelude::Queryable; use mysql::{params, Error as MysqlError}; use r2d2::{Error as R2D2Error, Pool}; use r2d2_mysql::MySqlConnectionManager; use thiserror::Error; #[derive(Error, Debug)] pub enum UserRepositoryError { #[error("mysql error: {0}")] MySqlError(#[from] MysqlError), #[error("Connection pool error: {0}")] PoolError(#[from] R2D2Error), } pub struct UserRepository { pool: Pool, } impl UserRepository { pub fn new(pool: Pool) -> Self { UserRepository { pool } } /** * 新建用户 */ pub fn create_user(&self, user: &User) -> Result<(), UserRepositoryError> { let mut conn = self.pool.get().unwrap(); let sql = r"INSERT INTO users (id, name, age, email, password) VALUES (:id, :name, :age, :email, :password)"; conn.exec_drop( sql, params! { "id" => &user.id, "name" => &user.name, "age" => &user.age, "email" => &user.email, "password" => &user.password, }, )?; Ok(()) } // /** // * 删除用户 // */ // pub fn delete_user(&mut self, user: &User) -> Result<(), mysql::Error> { // let mut conn = self.pool.get().unwrap(); // conn.exec_drop( // r"DELETE FROM users WHERE id = :id", // params! { // "id" => &user.id, // }, // ) // } // /** // * 更新用户 // */ // pub fn update_user(&mut self, user: &User) -> Result<(), mysql::Error> { // let mut conn = self.pool.get().unwrap(); // conn.exec_drop( // r"UPDATE users SET name = :name, age = :age, email = :email, password = :password WHERE id = :id", // params! { // "id" => &user.id, // "name" => &user.name, // "age" => &user.age, // "email" => &user.email, // "password" => &user.password, // }, // ) // } // /** // * 查询所有用户 // */ // pub fn query_all_user(&mut self) -> Result, mysql::Error> { // let mut conn = self.pool.get().unwrap(); // conn.query_map( // "SELECT id, name, age, email, password FROM users", // |(id, name, age, email, password)| User { // id, // name, // age, // email, // password, // }, // ) // } // /** // * 根据ID查询用户 // */ // pub fn query_user_by_id(&mut self, id: i32) -> Result, mysql::Error> { // let mut conn = self.pool.get().unwrap(); // let result: Option = conn.exec_first( // "SELECT id, name, age, email, password FROM users WHERE id = :id", // params! { // "id" => id, // }, // )?; // Ok(result) // } // /** // * 根据用户名查询用户 // */ // pub fn query_user_by_name(&mut self, name: &str) -> Result, mysql::Error> { // let mut conn = self.pool.get().unwrap(); // conn.exec_first( // "SELECT id, name, age, email, password FROM users WHERE name = :name", // params! { // "name" => name, // }, // ) // } // /** // * 根据邮箱查询用户 // */ // pub fn query_user_by_email(&mut self, email: &str) -> Result, mysql::Error> { // let mut conn = self.pool.get().unwrap(); // conn.exec_first( // "SELECT id, name, age, email, password FROM users WHERE email = :email", // params! { // "email" => email, // }, // ) // } }