refactor(bill): 重构 bank card 路由删除逻辑以支持 ID 参数

- 修改 DELETE 路由以接收 ID 参数
- 移除了冗余的 HTTP 请求示例文件
- 将 bill 包从主应用中解耦为库模块
- 更新 Cargo.toml 依赖关系以包含 bill 模块
- 升级多个工作区依赖版本
- 移除了已弃用的 docker-watcher 包及相关测试代码
- 修正数据库执行语句引用方式
- 添加 EntityTrait 引用以支持模型操作
This commit is contained in:
hz
2025-12-05 14:31:37 +08:00
parent 770e84d53b
commit bb01f99fc0
14 changed files with 40 additions and 67 deletions

View File

@@ -1,24 +1,26 @@
[workspace] [workspace]
resolver = "2" resolver = "2"
members = [ "packages/docker-watcher","packages/gotify-ws", "packages/model", "packages/serv", "packages/hutils", "packages/bill"] members = ["packages/model", "packages/serv", "packages/hutils", "packages/bill"]
#default-members = ["packages/gotify-ws"] #default-members = ["packages/gotify-ws"]
[workspace.dependencies] [workspace.dependencies]
gotify-ws = { path = "./packages/gotify-ws" } gotify-ws = { path = "./packages/gotify-ws" }
tokio = { version = "1.47.1", features = ["full"] } tokio = { version = "1.48.0", features = ["full"] }
# 这个和 sea-orm 的 feature 兼容性有点问题,所以只能用这个
rusqlite = { version = "0.32.1", features = ["bundled"] } rusqlite = { version = "0.32.1", features = ["bundled"] }
serde = { version = "1.0.219", features = ["derive"] } serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.143" serde_json = "1.0.145"
regex = "1.11.2" regex = "1.12.2"
sea-orm = { version = "1.1.14", features = [ sea-orm = { version = "2.0.0-rc.20", features = [
"sqlx-sqlite", "sqlx-sqlite",
"runtime-tokio-rustls", "runtime-tokio-rustls",
"macros", "macros",
] } ] }
chrono = "0.4.41" chrono = "0.4.42"
env_logger = "0.11.8" env_logger = "0.11.8"
futures = "0.3.31" futures = "0.3.31"
log = "0.4.27" log = "0.4.29"
actix-web = { version = "4.11.0" , features = ["rustls"]} actix-web = { version = "4.12.1", features = ["rustls"] }
hutils = { path = "./packages/hutils"} hutils = { path = "./packages/hutils" }
model = { path = "./packages/model"} model = { path = "./packages/model" }
bill = { path = "./packages/bill" }

View File

@@ -1,8 +0,0 @@
### 请求 card 数据
GET http://localhost:8080/bank-card
### 添加 card 数据
POST http://localhost:8080/bank-card
### 删除 card 数据
DELETE http://localhost:8080/bank-card

1
packages/bill/src/lib.rs Normal file
View File

@@ -0,0 +1 @@
pub mod router;

View File

@@ -1,19 +0,0 @@
mod router;
use actix_web::middleware::Logger;
use actix_web::{App, HttpServer, main};
use hutils::logger::init_logger;
#[main]
async fn main() -> std::io::Result<()> {
init_logger();
HttpServer::new(move || {
let app = App::new();
let app = app.configure(router::router_register);
let app = app.wrap(Logger::default());
app
})
.bind("0.0.0.0:8080")?
.run()
.await
}

View File

@@ -18,7 +18,7 @@ pub async fn post_bank_card() -> String {
String::from("Bill Post") String::from("Bill Post")
} }
#[delete("/bank-card")] #[delete("/bank-card/{id}")]
pub async fn delete_bank_card() -> String { pub async fn delete_bank_card() -> String {
info!("this is delete bank card"); info!("this is delete bank card");
String::from("Bill Delete") String::from("Bill Delete")

View File

@@ -1,5 +1,7 @@
pub mod bank_card;
use actix_web::web; use actix_web::web;
pub mod bank_card;
pub fn router_register(cfg: &mut web::ServiceConfig) { pub fn router_register(cfg: &mut web::ServiceConfig) {
cfg.configure(bank_card::bank_card_router_configure); cfg.configure(bank_card::bank_card_router_configure);
} }

View File

@@ -1,9 +0,0 @@
[package]
name = "docker-watcher"
version = "0.1.0"
edition = "2024"
[dependencies]
bollard = "0.19.2"
tokio.workspace = true
hutils.workspace = true

View File

@@ -1,3 +0,0 @@
mod test;
fn main() {}

View File

@@ -1 +0,0 @@
mod docker;

View File

@@ -1,7 +0,0 @@
use bollard::Docker;
#[tokio::test]
async fn docker_version() {
let docker = Docker::connect_with_local_defaults().expect("连接 docker 失败");
println!("{:#?}", docker.version().await.expect("获取 docker 版本失败"));
}

View File

@@ -1,4 +1,5 @@
use crate::utils::time::get_current_time; use crate::utils::time::get_current_time;
use sea_orm::EntityTrait;
use sea_orm::prelude::DeriveEntityModel; use sea_orm::prelude::DeriveEntityModel;
use sea_orm::{ActiveModelBehavior, DeriveRelation, EnumIter}; use sea_orm::{ActiveModelBehavior, DeriveRelation, EnumIter};
use sea_orm::{DerivePrimaryKey, PrimaryKeyTrait}; use sea_orm::{DerivePrimaryKey, PrimaryKeyTrait};

View File

@@ -1,8 +1,6 @@
use crate::model::ssh_connection::{ActiveModel, Entity}; use crate::model::ssh_connection::{ActiveModel, Entity};
use log::{info, warn}; use log::{info, warn};
use sea_orm::{ use sea_orm::{ActiveModelTrait, ConnectionTrait, Database, DatabaseBackend, DatabaseConnection, Schema};
ActiveModelTrait, ConnectionTrait, Database, DatabaseBackend, DatabaseConnection, Schema,
};
use std::sync::OnceLock; use std::sync::OnceLock;
static DB: OnceLock<Option<DatabaseConnection>> = OnceLock::new(); static DB: OnceLock<Option<DatabaseConnection>> = OnceLock::new();
@@ -31,7 +29,7 @@ pub async fn create_ssh_connection_table() -> bool {
let statement = Schema::new(DatabaseBackend::Sqlite).create_table_from_entity(Entity); let statement = Schema::new(DatabaseBackend::Sqlite).create_table_from_entity(Entity);
let sql = db.get_database_backend().build(&statement); let sql = db.get_database_backend().build(&statement);
match db.execute(sql).await { match db.execute(&sql).await {
Ok(_) => { Ok(_) => {
info!("创建表成功!"); info!("创建表成功!");
true true

View File

@@ -12,3 +12,4 @@ regex.workspace = true
actix-web.workspace = true actix-web.workspace = true
model.workspace = true model.workspace = true
hutils.workspace = true hutils.workspace = true
bill.workspace = true

View File

@@ -1,5 +1,20 @@
mod handler; mod handler;
mod test; mod test;
#[tokio::main] use actix_web::middleware::Logger;
async fn main() {} use actix_web::{App, HttpServer, main};
use hutils::logger::init_logger;
#[main]
async fn main() -> std::io::Result<()> {
init_logger();
HttpServer::new(move || {
let app = App::new();
let app = app.configure(bill::router::router_register);
let app = app.wrap(Logger::default());
app
})
.bind("0.0.0.0:8080")?
.run()
.await
}