rust16-职位管理模块

rust16-职位管理模块

1、职位管理模块表的创建

🍎创建职位表jobs

javascript 复制代码
CREATE TABLE `jobs` (
  `job_id` int NOT NULL AUTO_INCREMENT COMMENT '职位ID',
  `job_title` varchar(100) NOT NULL COMMENT '职位名称',
  `department` varchar(50) NOT NULL COMMENT '部门',
  `location` varchar(100) NOT NULL COMMENT '工作地点',
  `job_type` enum('full-time','part-time','contract','internship') NOT NULL DEFAULT 'full-time' COMMENT '职位类型',
  `salary_range` varchar(50) NOT NULL COMMENT '薪资范围',
  `job_status` enum('active','closed','draft') NOT NULL DEFAULT 'draft' COMMENT '职位状态',
  `job_requirements` text COMMENT '职位要求',
  `job_responsibilities` text COMMENT '工作职责',
  `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `created_by` int DEFAULT NULL COMMENT '创建人ID',
  `updated_by` int DEFAULT NULL COMMENT '更新人ID',
  PRIMARY KEY (`job_id`),
  KEY `idx_department` (`department`),
  KEY `idx_job_status` (`job_status`),
  KEY `idx_job_type` (`job_type`),
  KEY `idx_create_time` (`create_time`),
  CONSTRAINT `fk_jobs_created_by` FOREIGN KEY (`created_by`) REFERENCES `sys_user` (`user_id`),
  CONSTRAINT `fk_jobs_updated_by` FOREIGN KEY (`updated_by`) REFERENCES `sys_user` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='职位管理表';

2、接口开发

👉路由入口引入申明

接下来我们完成职位模块,在完成功能之前我们需要先添加模块入口,这样rust才能认识到是哪个模块

🍎src\main.rs

先在入口引入我们的模块

javascript 复制代码
  .service(
      web::scope("/api") // 这里加上 /api 前缀
        .configure(modules::job::routes::config)
  )

🍎模块申明

全局文件之中职位模块申明

我们的文件结构如下所示,mod.rs作为入口文件进行申明文件暴露

javascript 复制代码
// src\modules\mod.rs
pub mod job;

建立文件结构如下图所示:

javascript 复制代码
// src\modules\job


📦job
 ┣ 📜handlers.rs
 ┣ 📜mod.rs
 ┗ 📜routes.rs

基础模块申明

src\modules\job下面搭建模块

mod.rs模块

javascript 复制代码
// mod.rs
pub mod handlers;
pub mod routes;

routes.rs模块

javascript 复制代码
//routes.rs
use actix_web::web;
pub fn config(cfg: &mut web::ServiceConfig) {
  cfg.route("/system/jobs", web::get().to(crate::modules::role::handlers::get_list));
  cfg.route("/system/jobs", web::post().to(crate::modules::role::handlers::post_add));
  cfg.route("/system/jobs/{id}", web::get().to(crate::modules::role::handlers::get_detail));
  cfg.route("/system/jobs", web::put().to(crate::modules::role::handlers::put_update));
  cfg.route("/system/jobs/{id}", web::delete().to(crate::modules::role::handlers::del_delete));
}

handlers.rs方法逻辑

javascript 复制代码
// handlers.rs方法逻辑

use actix_web::{HttpResponse};
use crate::common::response::ApiResponse; // 导入 ApiResponse 模型

// 通用查询
pub async fn get_list() -> HttpResponse {
    HttpResponse::Ok().json(ApiResponse {
        code: 200,
        msg: "接口信息",
        data:  None::<()>,
    })
}

// 通用新增
pub async fn post_add() -> HttpResponse {
    HttpResponse::Ok().json(ApiResponse {
        code: 200,
        msg: "接口信息",
        data:  None::<()>,
    })
}
// 通用详情
pub async fn get_detail() -> HttpResponse {
    HttpResponse::Ok().json(ApiResponse {
        code: 200,
        msg: "接口信息",
        data:  None::<()>,
    })
}
// 通用更新
pub async fn put_update() -> HttpResponse {
    HttpResponse::Ok().json(ApiResponse {
        code: 200,
        msg: "接口信息",
        data:  None::<()>,
    })
}
// 通用更新
pub async fn del_delete() -> HttpResponse {
    HttpResponse::Ok().json(ApiResponse {
        code: 200,
        msg: "接口信息",
        data:  None::<()>,
    })
}

3、功能实现

🍎新增功能

接下来我们实现职位模块的新增部分

javascript 复制代码
// 新增
pub async fn post_add(
    pool: web::Data<MySqlPool>,
    form: web::Json<AddRoleRequest>,
) -> HttpResponse {
    let mut data = std::collections::HashMap::new();
    data.insert("role_name".to_string(), form.roleName.clone());
    data.insert("role_key".to_string(), form.roleKey.clone());
    data.insert("role_sort".to_string(), form.jobsort.to_string());
    data.insert("status".to_string(), form.status.clone());
    data.insert("remark".to_string(), form.remark.clone());

     // 处理布尔值字段
     data.insert("menu_check_strictly".to_string(), if form.menuCheckStrictly { "1" } else { "0" }.to_string());
     data.insert("dept_check_strictly".to_string(), if form.deptCheckStrictly { "1" } else { "0" }.to_string());

    crate::common::apimethods::create_api(
        pool.get_ref(),
        "sys_role",
        &data,
        &[ 
            "role_name".to_string(),
            "role_key".to_string()
        ],
    ).await
}

测试接口

javascript 复制代码
{
    "department": "产品部",
    "location": "职位名称",
    "jobTitle": "职位名称",
    "jobType": "internship",
    "salaryRange": "职位名称",
    "jobRequirements": "职位名称",
    "jobResponsibilities": "职位名称",
    "jobStatus": "active"
}

返回信息

javascript 复制代码
{
    "code": 200,
    "msg": "新增成功"
}

测试功能ok

🍎查询功能

这里查询我们直接引我们之前的查询部分的参数和方法

javascript 复制代码
// 通过方法
#[allow(unused_imports)]
use crate::common::apimethods::list_api_page; // 引入公共分页查询方法


// 通用查询
pub async fn get_list(
    pool: web::Data<MySqlPool>,
    query: web::Query<QueryParams>,
    filter: Option<web::Query<HashMap<String, String>>>
) -> impl Responder {
    // 调试:打印查询参数
    if let Some(ref filter_params) = filter {
        println!("查询参数: {:?}", filter_params);
    }
    // 精确查询字段(exact query)
    let exactquery = vec![
        "status".to_string(),
    ];
    // 模糊查询字段(like query) "role_name".to_string()
    let likequery = vec![
        "role_name".to_string(),
    ];

   // 调用 list_api_page 传入查询条件
   list_api_page(pool, query, filter, "sys_role", exactquery, likequery).await
}

测试功能ok

🍎详情功能

javascript 复制代码
// 通用详情
pub async fn get_detail(
    pool: web::Data<MySqlPool>,
    path: web::Path<i32>,
) -> HttpResponse {
    crate::common::apimethods::detail_api::<Role>(pool, "sys_role", "role_id", path.into_inner()).await
}

🍎删除功能

javascript 复制代码
// 通用真删除
pub async fn del_delete(
    pool: web::Data<MySqlPool>,
    id: web::Path<i32>
) -> HttpResponse {
    crate::common::apimethods::delete_api(
        pool.get_ref(),
        "sys_role",
        "role_id",
        *id,
        false, // 软删除,isDeleted=1
    ).await
}

测试功能ok,到这里我们的功能就ok了,然后我们继续做导出和导出模块,并且进一步进行优化和完善

相关推荐
canonical_entropy2 小时前
Nop平台到底有什么独特之处,它能用在什么场景?
java·后端·领域驱动设计
国服第二切图仔3 小时前
Rust开发实战之简单游戏开发(piston游戏引擎)
开发语言·rust·游戏引擎
不是株3 小时前
JavaWeb(后端进阶)
java·开发语言·后端
IT_陈寒3 小时前
5个Python 3.12新特性让你的代码效率提升50%,第3个太实用了!
前端·人工智能·后端
Victor3563 小时前
Redis(109)Redis的Pipeline如何使用?
后端
NPE~3 小时前
[手写系列]Go手写db — — 第七版(实现Disk存储引擎、Docker化支持)
数据库·后端·docker·golang·教程·手写数据库
Victor3563 小时前
Redis(108)Redis的事务机制如何实现?
后端
JaguarJack3 小时前
PHP 开发中 你可能不知道的非常好用 PhpStorm 插件
后端·php