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 model;
|
||||||
mod util;
|
mod util;
|
||||||
mod query;
|
mod query;
|
||||||
|
mod dao;
|
||||||
|
mod dal;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
|
|||||||
Reference in New Issue
Block a user