Make title optional in db

This commit is contained in:
Joshua Coles 2024-06-03 17:33:20 +01:00
parent 4bb9f2813d
commit 6c5d3910dc
4 changed files with 62 additions and 1 deletions

View File

@ -11,7 +11,7 @@ pub struct Model {
pub transaction_type: String,
pub total_amount: Decimal,
pub timestamp: DateTime,
pub title: String,
pub title: Option<String>,
pub emoji: Option<String>,
pub notes: Option<String>,
pub receipt: Option<String>,

12
justfile Executable file
View File

@ -0,0 +1,12 @@
#!/usr/bin/env just --justfile
generate-migration:
sea-orm-cli migrate generate $1
migrate:
sea-orm-cli migrate up
generate-entities:
sea-orm-cli generate entity --with-serde both \
-l -o entity/src \
--ignore-tables monzo_ingestion_seaql_migrations

View File

@ -2,6 +2,7 @@ pub use sea_orm_migration::prelude::*;
pub mod m20230904_141851_create_monzo_tables;
mod m20240529_195030_add_transaction_identity_hash;
mod m20240603_162500_make_title_optional;
pub struct Migrator;
@ -15,6 +16,7 @@ impl MigratorTrait for Migrator {
vec![
Box::new(m20230904_141851_create_monzo_tables::Migration),
Box::new(m20240529_195030_add_transaction_identity_hash::Migration),
Box::new(m20240603_162500_make_title_optional::Migration),
]
}
}

View File

@ -0,0 +1,47 @@
use sea_orm_migration::prelude::*;
#[derive(DeriveMigrationName)]
pub struct Migration;
#[async_trait::async_trait]
impl MigrationTrait for Migration {
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
manager.alter_table(
TableAlterStatement::new()
.table(Transaction::Table)
.modify_column(ColumnDef::new(Transaction::Title).string().null())
.to_owned()
).await?;
// Set all empty string titles to null
manager.get_connection().execute_unprepared(r#"
update transaction
set title = null
where title = ''
"#).await?;
Ok(())
}
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
// Set all null titles to empty string when reverting
manager.get_connection().execute_unprepared(r#"
update transaction
set title = ''
where title is null
"#).await?;
manager.alter_table(
TableAlterStatement::new()
.table(Transaction::Table)
.modify_column(ColumnDef::new(Transaction::Title).string().not_null())
.to_owned()
).await
}
}
#[derive(DeriveIden)]
enum Transaction {
Table,
Title,
}