use crate::models::user::User; use mysql::params; use mysql::prelude::Queryable; use r2d2::Pool; use r2d2_mysql::MySqlConnectionManager; pub struct UserRepository<'a> { pub pool: &'a mut Pool, } impl<'a> UserRepository<'a> { pub fn new(pool: &'a mut Pool) -> UserRepository { UserRepository { pool } } /** * 新建用户 */ pub fn create_user(&mut self, user: &User) -> Result<(), mysql::Error> { let mut conn = self.pool.get().unwrap(); conn.exec_drop( r"INSERT INTO users (id, name, age, email, password) VALUES (:id, :name, :age, :email, :password)", params! { "id" => &user.id, "name" => &user.name, "age" => &user.age, "email" => &user.email, "password" => &user.password, }, ) } /** * 删除用户 */ 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, }, ) } }