From 7e5e9cb32fcc0b5f69083e3934cf84b3b9658e6f Mon Sep 17 00:00:00 2001 From: brian Date: Sun, 21 Sep 2025 22:56:46 +0800 Subject: [PATCH] feat: add transaction tag rel model --- migration/src/lib.rs | 2 + ...create_ledger_table_transaction_tag_rel.rs | 71 +++++++++++++++++++ src/model/db/account.rs | 4 +- src/model/db/book.rs | 2 +- src/model/db/category.rs | 2 +- src/model/db/mod.rs | 3 +- src/model/db/prelude.rs | 3 +- src/model/db/tag.rs | 2 +- src/model/db/transaction.rs | 4 +- src/model/db/transaction_tag_rel.rs | 22 ++++++ 10 files changed, 106 insertions(+), 9 deletions(-) create mode 100644 migration/src/m20250921_000001_create_ledger_table_transaction_tag_rel.rs create mode 100644 src/model/db/transaction_tag_rel.rs diff --git a/migration/src/lib.rs b/migration/src/lib.rs index 9d8afdb..f0d97b0 100644 --- a/migration/src/lib.rs +++ b/migration/src/lib.rs @@ -5,6 +5,7 @@ mod m20250525_000002_create_ledger_table_book; mod m20250525_000003_create_ledger_table_tag; mod m20250525_000004_create_ledger_table_account; mod m20250525_000005_create_ledger_table_transaction; +mod m20250921_000001_create_ledger_table_transaction_tag_rel; pub struct Migrator; @@ -17,6 +18,7 @@ impl MigratorTrait for Migrator { Box::new(m20250525_000003_create_ledger_table_tag::Migration), Box::new(m20250525_000004_create_ledger_table_account::Migration), Box::new(m20250525_000005_create_ledger_table_transaction::Migration), + Box::new(m20250921_000001_create_ledger_table_transaction_tag_rel::Migration), ] } } diff --git a/migration/src/m20250921_000001_create_ledger_table_transaction_tag_rel.rs b/migration/src/m20250921_000001_create_ledger_table_transaction_tag_rel.rs new file mode 100644 index 0000000..48ac93d --- /dev/null +++ b/migration/src/m20250921_000001_create_ledger_table_transaction_tag_rel.rs @@ -0,0 +1,71 @@ +use crate::sea_query; +use sea_orm_migration::{MigrationName, MigrationTrait, SchemaManager}; +use crate::{async_trait, ColumnDef, DbErr, Expr, Iden, Table}; + +pub struct Migration; + +impl MigrationName for crate::m20250921_000001_create_ledger_table_transaction_tag_rel::Migration { + fn name(&self) -> &str { + "m20250921_000001_create_ledger_table_transaction_tag_rel" // Make sure this matches with the file name + } +} + +#[async_trait::async_trait] +impl MigrationTrait for crate::m20250921_000001_create_ledger_table_transaction_tag_rel::Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .create_table( + Table::create() + .table(crate::m20250921_000001_create_ledger_table_transaction_tag_rel::TransactionTagRel::Table) + .col( + ColumnDef::new(crate::m20250921_000001_create_ledger_table_transaction_tag_rel::TransactionTagRel::Id) + .big_integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(crate::m20250921_000001_create_ledger_table_transaction_tag_rel::TransactionTagRel::Uid).big_integer().not_null()) + .col(ColumnDef::new(crate::m20250921_000001_create_ledger_table_transaction_tag_rel::TransactionTagRel::TransactionId).big_integer().not_null()) + .col(ColumnDef::new(crate::m20250921_000001_create_ledger_table_transaction_tag_rel::TransactionTagRel::TagId).big_integer().not_null()) + .col( + ColumnDef::new(crate::m20250921_000001_create_ledger_table_transaction_tag_rel::TransactionTagRel::IsDeleted) + .boolean() + .default(false) + .not_null(), + ) + .col( + ColumnDef::new(crate::m20250921_000001_create_ledger_table_transaction_tag_rel::TransactionTagRel::CreatedAt) + .date_time() + .default(Expr::current_timestamp()) + .not_null(), + ) + .col( + ColumnDef::new(crate::m20250921_000001_create_ledger_table_transaction_tag_rel::TransactionTagRel::UpdatedAt) + .date_time() + .default(Expr::current_timestamp()) + .not_null(), + ) + .to_owned(), + ) + .await + } + + // Define how to rollback this migration: Drop the Bakery table. + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(crate::m20250921_000001_create_ledger_table_transaction_tag_rel::TransactionTagRel::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum TransactionTagRel { + Table, + Id, + Uid, + TransactionId, + TagId, + IsDeleted, + CreatedAt, + UpdatedAt, +} diff --git a/src/model/db/account.rs b/src/model/db/account.rs index 4923ba8..e728c6b 100644 --- a/src/model/db/account.rs +++ b/src/model/db/account.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.11 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.16 use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; @@ -9,7 +9,7 @@ pub struct Model { #[sea_orm(primary_key)] pub id: i64, pub name: String, - pub r#type: i32, + pub account_type: i32, pub uid: i64, pub is_deleted: bool, pub created_at: DateTime, diff --git a/src/model/db/book.rs b/src/model/db/book.rs index 80018c9..b5fc0e0 100644 --- a/src/model/db/book.rs +++ b/src/model/db/book.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.11 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.16 use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; diff --git a/src/model/db/category.rs b/src/model/db/category.rs index 112c63d..6885210 100644 --- a/src/model/db/category.rs +++ b/src/model/db/category.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.11 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.16 use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; diff --git a/src/model/db/mod.rs b/src/model/db/mod.rs index 99c7b55..27eb667 100644 --- a/src/model/db/mod.rs +++ b/src/model/db/mod.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.11 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.16 pub mod prelude; @@ -7,3 +7,4 @@ pub mod book; pub mod category; pub mod tag; pub mod transaction; +pub mod transaction_tag_rel; diff --git a/src/model/db/prelude.rs b/src/model/db/prelude.rs index 11ddeb1..270ed49 100644 --- a/src/model/db/prelude.rs +++ b/src/model/db/prelude.rs @@ -1,7 +1,8 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.11 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.16 pub use super::account::Entity as Account; pub use super::book::Entity as Book; pub use super::category::Entity as Category; pub use super::tag::Entity as Tag; pub use super::transaction::Entity as Transaction; +pub use super::transaction_tag_rel::Entity as TransactionTagRel; diff --git a/src/model/db/tag.rs b/src/model/db/tag.rs index 6a7ab19..d65605a 100644 --- a/src/model/db/tag.rs +++ b/src/model/db/tag.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.11 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.16 use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; diff --git a/src/model/db/transaction.rs b/src/model/db/transaction.rs index 8b668eb..87f4b61 100644 --- a/src/model/db/transaction.rs +++ b/src/model/db/transaction.rs @@ -1,4 +1,4 @@ -//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.11 +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.16 use sea_orm::entity::prelude::*; use serde::{Deserialize, Serialize}; @@ -9,7 +9,7 @@ pub struct Model { #[sea_orm(primary_key)] pub id: i64, pub uid: i64, - pub r#type: i32, + pub transaction_type: i32, pub book_id: i64, pub category_id: i64, pub description: String, diff --git a/src/model/db/transaction_tag_rel.rs b/src/model/db/transaction_tag_rel.rs new file mode 100644 index 0000000..3048d5c --- /dev/null +++ b/src/model/db/transaction_tag_rel.rs @@ -0,0 +1,22 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.1.16 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[sea_orm(table_name = "transaction_tag_rel")] +pub struct Model { + #[sea_orm(primary_key)] + pub id: i64, + pub uid: i64, + pub transaction_id: i64, + pub tag_id: i64, + pub is_deleted: bool, + pub created_at: DateTime, + pub updated_at: DateTime, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} + +impl ActiveModelBehavior for ActiveModel {}