This repository has been archived on 2025-04-22. You can view files and clone it, but cannot push or open issues or pull requests.
rust-demo/src/repositories/user_repository.rs

132 lines
3.9 KiB
Rust

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<MySqlConnectionManager>,
}
impl UserRepository {
pub fn new(pool: Pool<MySqlConnectionManager>) -> 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<Vec<User>, 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<Option<User>, mysql::Error> {
// let mut conn = self.pool.get().unwrap();
// let result: Option<User> = 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<Option<User>, 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<Option<User>, 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,
// },
// )
// }
}