refactor(bill): 重构 bank card 路由删除逻辑以支持 ID 参数
- 修改 DELETE 路由以接收 ID 参数 - 移除了冗余的 HTTP 请求示例文件 - 将 bill 包从主应用中解耦为库模块 - 更新 Cargo.toml 依赖关系以包含 bill 模块 - 升级多个工作区依赖版本 - 移除了已弃用的 docker-watcher 包及相关测试代码 - 修正数据库执行语句引用方式 - 添加 EntityTrait 引用以支持模型操作
This commit is contained in:
24
Cargo.toml
24
Cargo.toml
@@ -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" }
|
||||||
|
|||||||
@@ -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
1
packages/bill/src/lib.rs
Normal file
@@ -0,0 +1 @@
|
|||||||
|
pub mod router;
|
||||||
@@ -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
|
|
||||||
}
|
|
||||||
@@ -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")
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
mod test;
|
|
||||||
|
|
||||||
fn main() {}
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
mod docker;
|
|
||||||
@@ -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 版本失败"));
|
|
||||||
}
|
|
||||||
@@ -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};
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user