From 35670ded960b65eccfec78067576bbe423069276 Mon Sep 17 00:00:00 2001 From: einhorn_b Date: Thu, 7 Dec 2023 14:46:35 +0100 Subject: [PATCH] refactor db --- dlt-database/entity/0001-init_db/Account.ts | 2 +- .../0001-init_db/ConfirmedTransaction.ts | 2 +- .../entity/0001-init_db/TransactionRecipe.ts | 2 +- .../0002-refactor_add_community/Account.ts | 4 +-- .../0002-refactor_add_community/Community.ts | 2 +- .../ConfirmedTransaction.ts | 2 +- .../Account.ts | 12 +++---- .../Community.ts | 8 ++--- .../Transaction.ts | 1 + .../0003-refactor_transaction_recipe/User.ts | 35 +++++++++++++++++++ dlt-database/entity/ConfirmedTransaction.ts | 1 - dlt-database/entity/TransactionRecipe.ts | 1 - dlt-database/entity/User.ts | 2 +- dlt-database/migrations/0001-init_db.ts | 6 ++-- .../0003-refactor_transaction_recipe.ts | 34 +++++++++++++++--- 15 files changed, 83 insertions(+), 31 deletions(-) create mode 100644 dlt-database/entity/0003-refactor_transaction_recipe/User.ts delete mode 100644 dlt-database/entity/ConfirmedTransaction.ts delete mode 100644 dlt-database/entity/TransactionRecipe.ts diff --git a/dlt-database/entity/0001-init_db/Account.ts b/dlt-database/entity/0001-init_db/Account.ts index d6d4a3095..4a7801c0e 100644 --- a/dlt-database/entity/0001-init_db/Account.ts +++ b/dlt-database/entity/0001-init_db/Account.ts @@ -9,7 +9,7 @@ import { } from 'typeorm' import { User } from '../User' import { TransactionRecipe } from './TransactionRecipe' -import { ConfirmedTransaction } from '../ConfirmedTransaction' +import { ConfirmedTransaction } from './ConfirmedTransaction' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' import { Decimal } from 'decimal.js-light' import { AccountCommunity } from '../AccountCommunity' diff --git a/dlt-database/entity/0001-init_db/ConfirmedTransaction.ts b/dlt-database/entity/0001-init_db/ConfirmedTransaction.ts index a5d22dc80..b195e17c2 100644 --- a/dlt-database/entity/0001-init_db/ConfirmedTransaction.ts +++ b/dlt-database/entity/0001-init_db/ConfirmedTransaction.ts @@ -11,7 +11,7 @@ import { Decimal } from 'decimal.js-light' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' import { Account } from './Account' -import { TransactionRecipe } from '../TransactionRecipe' +import { TransactionRecipe } from './TransactionRecipe' @Entity('confirmed_transactions') export class ConfirmedTransaction extends BaseEntity { diff --git a/dlt-database/entity/0001-init_db/TransactionRecipe.ts b/dlt-database/entity/0001-init_db/TransactionRecipe.ts index db311e64f..1222cfbdd 100644 --- a/dlt-database/entity/0001-init_db/TransactionRecipe.ts +++ b/dlt-database/entity/0001-init_db/TransactionRecipe.ts @@ -12,7 +12,7 @@ import { Decimal } from 'decimal.js-light' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' import { Account } from './Account' import { Community } from './Community' -import { ConfirmedTransaction } from '../ConfirmedTransaction' +import { ConfirmedTransaction } from './ConfirmedTransaction' @Entity('transaction_recipes') export class TransactionRecipe extends BaseEntity { diff --git a/dlt-database/entity/0002-refactor_add_community/Account.ts b/dlt-database/entity/0002-refactor_add_community/Account.ts index 9edba933d..644b1b9a8 100644 --- a/dlt-database/entity/0002-refactor_add_community/Account.ts +++ b/dlt-database/entity/0002-refactor_add_community/Account.ts @@ -8,8 +8,8 @@ import { BaseEntity, } from 'typeorm' import { User } from '../User' -import { TransactionRecipe } from '../TransactionRecipe' -import { ConfirmedTransaction } from '../ConfirmedTransaction' +import { TransactionRecipe } from '../0001-init_db/TransactionRecipe' +import { ConfirmedTransaction } from './ConfirmedTransaction' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' import { Decimal } from 'decimal.js-light' import { AccountCommunity } from '../AccountCommunity' diff --git a/dlt-database/entity/0002-refactor_add_community/Community.ts b/dlt-database/entity/0002-refactor_add_community/Community.ts index 25f9e3265..2961d5af3 100644 --- a/dlt-database/entity/0002-refactor_add_community/Community.ts +++ b/dlt-database/entity/0002-refactor_add_community/Community.ts @@ -8,7 +8,7 @@ import { BaseEntity, } from 'typeorm' import { Account } from '../Account' -import { TransactionRecipe } from '../TransactionRecipe' +import { TransactionRecipe } from '../0001-init_db/TransactionRecipe' import { AccountCommunity } from '../AccountCommunity' @Entity('communities') diff --git a/dlt-database/entity/0002-refactor_add_community/ConfirmedTransaction.ts b/dlt-database/entity/0002-refactor_add_community/ConfirmedTransaction.ts index 1b8df403b..33ab13b52 100644 --- a/dlt-database/entity/0002-refactor_add_community/ConfirmedTransaction.ts +++ b/dlt-database/entity/0002-refactor_add_community/ConfirmedTransaction.ts @@ -11,7 +11,7 @@ import { Decimal } from 'decimal.js-light' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' import { Account } from './Account' -import { TransactionRecipe } from '../TransactionRecipe' +import { TransactionRecipe } from '../0001-init_db/TransactionRecipe' @Entity('confirmed_transactions') export class ConfirmedTransaction extends BaseEntity { diff --git a/dlt-database/entity/0003-refactor_transaction_recipe/Account.ts b/dlt-database/entity/0003-refactor_transaction_recipe/Account.ts index c0c8aef98..a6e8a8b7e 100644 --- a/dlt-database/entity/0003-refactor_transaction_recipe/Account.ts +++ b/dlt-database/entity/0003-refactor_transaction_recipe/Account.ts @@ -35,14 +35,10 @@ export class Account extends BaseEntity { @Column({ type: 'tinyint', unsigned: true }) type: number - @Column({ - name: 'created_at', - type: 'datetime', - precision: 3, - default: () => 'CURRENT_TIMESTAMP(3)', - }) + @Column({ name: 'created_at', type: 'datetime', precision: 3 }) createdAt: Date + // use timestamp from iota milestone which is only in seconds precision, so no need to use 3 Bytes extra here @Column({ name: 'confirmed_at', type: 'datetime', nullable: true }) confirmedAt?: Date @@ -56,10 +52,11 @@ export class Account extends BaseEntity { }) balanceConfirmedAt: Decimal + // use timestamp from iota milestone which is only in seconds precision, so no need to use 3 Bytes extra here @Column({ name: 'balance_confirmed_at_date', type: 'datetime', - default: () => 'CURRENT_TIMESTAMP()', + nullable: true, }) balanceConfirmedAtDate: Date @@ -77,7 +74,6 @@ export class Account extends BaseEntity { name: 'balance_created_at_date', type: 'datetime', precision: 3, - default: () => 'CURRENT_TIMESTAMP(3)', }) balanceCreatedAtDate: Date diff --git a/dlt-database/entity/0003-refactor_transaction_recipe/Community.ts b/dlt-database/entity/0003-refactor_transaction_recipe/Community.ts index ade3afc90..f403064b4 100644 --- a/dlt-database/entity/0003-refactor_transaction_recipe/Community.ts +++ b/dlt-database/entity/0003-refactor_transaction_recipe/Community.ts @@ -45,14 +45,10 @@ export class Community extends BaseEntity { @JoinColumn({ name: 'auf_account_id' }) aufAccount?: Account - @Column({ - name: 'created_at', - type: 'datetime', - precision: 3, - default: () => 'CURRENT_TIMESTAMP(3)', - }) + @Column({ name: 'created_at', type: 'datetime', precision: 3 }) createdAt: Date + // use timestamp from iota milestone which is only in seconds precision, so no need to use 3 Bytes extra here @Column({ name: 'confirmed_at', type: 'datetime', nullable: true }) confirmedAt?: Date diff --git a/dlt-database/entity/0003-refactor_transaction_recipe/Transaction.ts b/dlt-database/entity/0003-refactor_transaction_recipe/Transaction.ts index 66c5cf189..e9d8c6a0e 100644 --- a/dlt-database/entity/0003-refactor_transaction_recipe/Transaction.ts +++ b/dlt-database/entity/0003-refactor_transaction_recipe/Transaction.ts @@ -117,6 +117,7 @@ export class Transaction extends BaseEntity { @Column({ name: 'iota_milestone', type: 'bigint', nullable: true }) iotaMilestone?: number + // use timestamp from iota milestone which is only in seconds precision, so no need to use 3 Bytes extra here @Column({ name: 'confirmed_at', type: 'datetime', nullable: true }) confirmedAt?: Date } diff --git a/dlt-database/entity/0003-refactor_transaction_recipe/User.ts b/dlt-database/entity/0003-refactor_transaction_recipe/User.ts new file mode 100644 index 000000000..fdfeb9830 --- /dev/null +++ b/dlt-database/entity/0003-refactor_transaction_recipe/User.ts @@ -0,0 +1,35 @@ +import { BaseEntity, Entity, PrimaryGeneratedColumn, Column, OneToMany, JoinColumn } from 'typeorm' + +import { Account } from '../Account' + +@Entity('users', { engine: 'InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci' }) +export class User extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @Column({ + name: 'gradido_id', + length: 36, + nullable: true, + collation: 'utf8mb4_unicode_ci', + }) + gradidoID?: string + + @Column({ name: 'derive1_pubkey', type: 'binary', length: 32, unique: true }) + derive1Pubkey: Buffer + + @Column({ name: 'created_at', type: 'datetime', precision: 3 }) + createdAt: Date + + // use timestamp from iota milestone which is only in seconds precision, so no need to use 3 Bytes extra here + @Column({ + name: 'confirmed_at', + type: 'datetime', + nullable: true, + }) + confirmedAt?: Date + + @OneToMany(() => Account, (account) => account.user) + @JoinColumn({ name: 'user_id' }) + accounts?: Account[] +} diff --git a/dlt-database/entity/ConfirmedTransaction.ts b/dlt-database/entity/ConfirmedTransaction.ts deleted file mode 100644 index 765e0b2e6..000000000 --- a/dlt-database/entity/ConfirmedTransaction.ts +++ /dev/null @@ -1 +0,0 @@ -export { ConfirmedTransaction } from './0002-refactor_add_community/ConfirmedTransaction' diff --git a/dlt-database/entity/TransactionRecipe.ts b/dlt-database/entity/TransactionRecipe.ts deleted file mode 100644 index e59a09ef9..000000000 --- a/dlt-database/entity/TransactionRecipe.ts +++ /dev/null @@ -1 +0,0 @@ -export { TransactionRecipe } from './0001-init_db/TransactionRecipe' diff --git a/dlt-database/entity/User.ts b/dlt-database/entity/User.ts index 3c803d783..4f1b039ff 100644 --- a/dlt-database/entity/User.ts +++ b/dlt-database/entity/User.ts @@ -1 +1 @@ -export { User } from './0002-refactor_add_community/User' +export { User } from './0003-refactor_transaction_recipe/User' diff --git a/dlt-database/migrations/0001-init_db.ts b/dlt-database/migrations/0001-init_db.ts index 85fed59e0..8188a889d 100644 --- a/dlt-database/migrations/0001-init_db.ts +++ b/dlt-database/migrations/0001-init_db.ts @@ -23,7 +23,7 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis \`confirmed_at\` datetime(3) DEFAULT NULL, PRIMARY KEY (\`id\`), INDEX \`gradido_id\` (\`gradido_id\`), - UNIQUE KEY \`pubkey\` (\`pubkey\`) + UNIQUE KEY \`derive1_pubkey\` (\`derive1_pubkey\`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`) await queryFn(` @@ -38,7 +38,7 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis \`balance\` decimal(40,20) NOT NULL DEFAULT 0, \`balance_date\` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (\`id\`), - UNIQUE KEY \`pubkey\` (\`pubkey\`), + UNIQUE KEY \`derive2_pubkey\` (\`derive2_pubkey\`), FOREIGN KEY (\`user_id\`) REFERENCES users(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; `) @@ -56,7 +56,7 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis \`created_at\` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), \`confirmed_at\` datetime(3) DEFAULT NULL, PRIMARY KEY (\`id\`), - UNIQUE KEY \`pubkey\` (\`pubkey\`), + UNIQUE KEY \`root_pubkey\` (\`root_pubkey\`), FOREIGN KEY (\`gmw_account_id\`) REFERENCES accounts(id), FOREIGN KEY (\`auf_account_id\`) REFERENCES accounts(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`) diff --git a/dlt-database/migrations/0003-refactor_transaction_recipe.ts b/dlt-database/migrations/0003-refactor_transaction_recipe.ts index 5d6f6af41..cf5657485 100644 --- a/dlt-database/migrations/0003-refactor_transaction_recipe.ts +++ b/dlt-database/migrations/0003-refactor_transaction_recipe.ts @@ -9,17 +9,21 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis await queryFn(` ALTER TABLE \`accounts\` RENAME COLUMN \`balance\` TO \`balance_confirmed_at\`, - RENAME COLUMN \`balance_date\` TO \`balance_confirmed_at_date\`, + RENAME COLUMN \`balance_date\` TO \`balance_confirmed_at_date\` + ; `) await queryFn( `ALTER TABLE \`accounts\` MODIFY COLUMN \`derivation_index\` int(10) unsigned NULL DEFAULT NULL;`, ) await queryFn( - `ALTER TABLE \`accounts\` ADD COLUMN \`balance_created_at\` decimal(40,20) NOT NULL DEFAULT 0 AFTER \`balance_date\`;`, + `ALTER TABLE \`accounts\` ADD COLUMN \`balance_created_at\` decimal(40,20) NOT NULL DEFAULT 0 AFTER \`balance_confirmed_at_date\`;`, ) await queryFn( - `ALTER TABLE \`accounts\` ADD COLUMN \`balance_created_at_date\` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) AFTER \`balance_created_at\`;`, + `ALTER TABLE \`accounts\` ADD COLUMN \`balance_created_at_date\` datetime(3) NOT NULL AFTER \`balance_created_at\`;`, + ) + await queryFn( + `ALTER TABLE \`accounts\` MODIFY COLUMN \`balance_confirmed_at_date\` datetime NULL DEFAULT NULL;`, ) await queryFn( @@ -55,6 +59,14 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis ) await queryFn(`ALTER TABLE \`communities\` ADD UNIQUE(\`iota_topic\`);`) + + await queryFn(`ALTER TABLE \`users\` CHANGE \`created_at\` \`created_at\` DATETIME(3) NOT NULL;`) + await queryFn( + `ALTER TABLE \`communities\` CHANGE \`created_at\` \`created_at\` DATETIME(3) NOT NULL;`, + ) + await queryFn( + `ALTER TABLE \`accounts\` CHANGE \`created_at\` \`created_at\` DATETIME(3) NOT NULL;`, + ) } export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) { @@ -94,10 +106,14 @@ export async function downgrade(queryFn: (query: string, values?: any[]) => Prom FOREIGN KEY (\`account_id\`) REFERENCES accounts(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`) + await queryFn( + `ALTER TABLE \`accounts\` MODIFY COLUMN \`balance_confirmed_at_date\` datetime(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3);`, + ) await queryFn(` ALTER TABLE \`accounts\` RENAME COLUMN \`balance_confirmed_at\` TO \`balance\`, - RENAME COLUMN \`balance_confirmed_at_date\` TO \`balance_date\`, + RENAME COLUMN \`balance_confirmed_at_date\` TO \`balance_date\` + ; `) await queryFn( @@ -106,4 +122,14 @@ export async function downgrade(queryFn: (query: string, values?: any[]) => Prom await queryFn(`ALTER TABLE \`accounts\` DROP COLUMN \`balance_created_at\`;`) await queryFn(`ALTER TABLE \`accounts\` DROP COLUMN \`balance_created_at_date\`;`) await queryFn(`DROP TABLE \`transactions\`;`) + + await queryFn( + `ALTER TABLE \`users\` CHANGE \`created_at\` \`created_at\` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3);`, + ) + await queryFn( + `ALTER TABLE \`communities\` CHANGE \`created_at\` \`created_at\` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3);`, + ) + await queryFn( + `ALTER TABLE \`accounts\` CHANGE \`created_at\` \`created_at\` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3);`, + ) }