feat: add dal dao
This commit is contained in:
1
src/dal/mod.rs
Normal file
1
src/dal/mod.rs
Normal file
@@ -0,0 +1 @@
|
||||
pub mod transaction;
|
||||
0
src/dal/transaction.rs
Normal file
0
src/dal/transaction.rs
Normal file
1
src/dao/mod.rs
Normal file
1
src/dao/mod.rs
Normal file
@@ -0,0 +1 @@
|
||||
pub mod transaction_tag_rel;
|
||||
130
src/dao/transaction_tag_rel.rs
Normal file
130
src/dao/transaction_tag_rel.rs
Normal file
@@ -0,0 +1,130 @@
|
||||
use sea_orm::{DatabaseConnection, EntityTrait, ActiveModelTrait, Set, QueryFilter, ColumnTrait, DbErr};
|
||||
use sea_orm::sqlx::types::chrono::{Local};
|
||||
use crate::model::db::prelude::TransactionTagRel as TransactionTagRelPrelude;
|
||||
use crate::model::db::transaction_tag_rel::{
|
||||
ActiveModel as TransactionTagRelActiveModel,
|
||||
Model as TransactionTagRelModel,
|
||||
Column as TransactionTagRelColumn,
|
||||
};
|
||||
|
||||
// DAO struct for TransactionTagRel
|
||||
pub struct TransactionTagRelDAO {
|
||||
db: DatabaseConnection,
|
||||
}
|
||||
|
||||
impl TransactionTagRelDAO {
|
||||
// Constructor
|
||||
pub fn new(db: DatabaseConnection) -> Self {
|
||||
Self { db }
|
||||
}
|
||||
|
||||
// Create a new TransactionTagRel
|
||||
pub async fn create(
|
||||
&self,
|
||||
uid: i64,
|
||||
transaction_id: i64,
|
||||
tag_id: i64,
|
||||
) -> Result<TransactionTagRelModel, DbErr> {
|
||||
let active_model = TransactionTagRelActiveModel {
|
||||
uid: Set(uid),
|
||||
transaction_id: Set(transaction_id),
|
||||
tag_id: Set(tag_id),
|
||||
is_deleted: Set(false),
|
||||
// created_at: Set(Utc::now()),
|
||||
// updated_at: Set(Utc::now()),
|
||||
..Default::default() // id is auto-incremented
|
||||
};
|
||||
|
||||
active_model.insert(&self.db).await
|
||||
}
|
||||
|
||||
// Find by ID
|
||||
pub async fn find_by_id(&self, id: i64, uid:i64) -> Result<Option<TransactionTagRelModel>, DbErr> {
|
||||
TransactionTagRelPrelude::find_by_id(id)
|
||||
.filter(TransactionTagRelColumn::Uid.eq(uid))
|
||||
.filter(TransactionTagRelColumn::IsDeleted.eq(false))
|
||||
.one(&self.db)
|
||||
.await
|
||||
}
|
||||
|
||||
// Find all by transaction_id
|
||||
pub async fn find_by_transaction_id(
|
||||
&self,
|
||||
transaction_id: i64,
|
||||
uid: i64,
|
||||
) -> Result<Vec<TransactionTagRelModel>, DbErr> {
|
||||
TransactionTagRelPrelude::find()
|
||||
.filter(TransactionTagRelColumn::Uid.eq(uid))
|
||||
.filter(TransactionTagRelColumn::TransactionId.eq(transaction_id))
|
||||
.filter(TransactionTagRelColumn::IsDeleted.eq(false))
|
||||
.all(&self.db)
|
||||
.await
|
||||
}
|
||||
|
||||
// Find all by tag_id
|
||||
pub async fn find_by_tag_id(
|
||||
&self,
|
||||
tag_id: i64,
|
||||
uid: i64,
|
||||
) -> Result<Vec<TransactionTagRelModel>, DbErr> {
|
||||
TransactionTagRelPrelude::find()
|
||||
.filter(TransactionTagRelColumn::Uid.eq(uid))
|
||||
.filter(TransactionTagRelColumn::TagId.eq(tag_id))
|
||||
.filter(TransactionTagRelColumn::IsDeleted.eq(false))
|
||||
.all(&self.db)
|
||||
.await
|
||||
}
|
||||
|
||||
// Update a TransactionTagRel
|
||||
pub async fn update(
|
||||
&self,
|
||||
id: i64,
|
||||
uid: Option<i64>,
|
||||
transaction_id: Option<i64>,
|
||||
tag_id: Option<i64>,
|
||||
) -> Result<TransactionTagRelModel, DbErr> {
|
||||
let mut active_model: TransactionTagRelActiveModel = TransactionTagRelPrelude::find_by_id(id)
|
||||
.filter(TransactionTagRelColumn::Uid.eq(uid))
|
||||
.filter(TransactionTagRelColumn::IsDeleted.eq(false))
|
||||
.one(&self.db)
|
||||
.await?
|
||||
.ok_or(DbErr::RecordNotFound("TransactionTagRel not found".into()))?
|
||||
.into();
|
||||
|
||||
if let Some(uid) = uid {
|
||||
active_model.uid = Set(uid);
|
||||
}
|
||||
if let Some(transaction_id) = transaction_id {
|
||||
active_model.transaction_id = Set(transaction_id);
|
||||
}
|
||||
if let Some(tag_id) = tag_id {
|
||||
active_model.tag_id = Set(tag_id);
|
||||
}
|
||||
active_model.updated_at = Set(Local::now().naive_utc());
|
||||
|
||||
active_model.update(&self.db).await
|
||||
}
|
||||
|
||||
// Soft delete (set is_deleted = true)
|
||||
pub async fn soft_delete(&self, id: i64, uid: i64) -> Result<(), DbErr> {
|
||||
let mut active_model: TransactionTagRelActiveModel = TransactionTagRelPrelude::find_by_id(id)
|
||||
.filter(TransactionTagRelColumn::Uid.eq(uid))
|
||||
.filter(TransactionTagRelColumn::IsDeleted.eq(false))
|
||||
.one(&self.db)
|
||||
.await?
|
||||
.ok_or(DbErr::RecordNotFound("TransactionTagRel not found".into()))?
|
||||
.into();
|
||||
|
||||
active_model.is_deleted = Set(true);
|
||||
active_model.updated_at = Set(Local::now().naive_utc());
|
||||
active_model.update(&self.db).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
// Hard delete (optional, use with caution)
|
||||
pub async fn hard_delete(&self, id: i64, uid: i64) -> Result<(), DbErr> {
|
||||
TransactionTagRelPrelude::delete_by_id(id)
|
||||
.exec(&self.db).await?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@@ -15,6 +15,8 @@ mod middleware;
|
||||
mod model;
|
||||
mod util;
|
||||
mod query;
|
||||
mod dao;
|
||||
mod dal;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() {
|
||||
|
||||
Reference in New Issue
Block a user