From 437da5eedaaa9ad13dc9a6c08b44e859217d8645 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 11:05:01 +0100 Subject: [PATCH 01/14] feat: Transaction Link Model --- backend/src/graphql/model/TransactionLink.ts | 33 ++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 backend/src/graphql/model/TransactionLink.ts diff --git a/backend/src/graphql/model/TransactionLink.ts b/backend/src/graphql/model/TransactionLink.ts new file mode 100644 index 000000000..4511c5cdd --- /dev/null +++ b/backend/src/graphql/model/TransactionLink.ts @@ -0,0 +1,33 @@ +import { ObjectType, Field } from 'type-graphql' +import Decimal from 'decimal.js-light' +import { User } from './User' + +@ObjectType() +export class TransactionLink { + @Field(() => Number) + id: number + + @Field(() => User) + user: User + + @Field(() => Decimal) + amount: Decimal + + @Field(() => String) + memo: string + + @Field(() => Date) + createdAt: Date + + @Field(() => Date) + validUntil: Date + + @Field(() => Boolean) + showEmail: boolean + + @Field(() => Date, { nullable: true }) + redeemedAt: Date | null + + @Field(() => User, { nullable: true }) + redeemedBy: User | null +} From 5f5bde2f0f336cc43fef7da40b31861583e4bfd1 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 11:38:24 +0100 Subject: [PATCH 02/14] migration to create transaction_links table --- database/migrations/0030-transaction_link.ts | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 database/migrations/0030-transaction_link.ts diff --git a/database/migrations/0030-transaction_link.ts b/database/migrations/0030-transaction_link.ts new file mode 100644 index 000000000..ca0f0cfa5 --- /dev/null +++ b/database/migrations/0030-transaction_link.ts @@ -0,0 +1,25 @@ +/* MIGRATION TO CREATE TRANSACTION_LINK TABLE */ + +/* eslint-disable @typescript-eslint/explicit-module-boundary-types */ +/* eslint-disable @typescript-eslint/no-explicit-any */ + +export async function upgrade(queryFn: (query: string, values?: any[]) => Promise>) { + await queryFn(` + CREATE TABLE \`transaction_links\` ( + \`id\` int UNSIGNED NOT NULL AUTO_INCREMENT, + \`userId\` int UNSIGNED NOT NULL, + \`amount\` DECIMAL(40,20) NOT NULL, + \`memo\` varchar(255) NOT NULL, + \`createdAt\` datetime NOT NULL, + \`validUntil\` datetime NOT NULL, + \`showEmail\` boolean NOT NULL DEFAULT false, + \`redeemedAt\` datetime, + \`redeemedBy\` int UNSIGNED, + PRIMARY KEY (\`id\`) + ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; + `) +} + +export async function downgrade(queryFn: (query: string, values?: any[]) => Promise>) { + await queryFn(`DROP TABLE \`transaction_links\`;`) +} From 19084d75140f0bff041a91441dd51a11a2365e9f Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 11:55:36 +0100 Subject: [PATCH 03/14] entity transaction link --- .../0030-transaction_link/TransactionLink.ts | 55 +++++++++++++++++++ database/entity/TransactionLink.ts | 1 + database/entity/index.ts | 2 + 3 files changed, 58 insertions(+) create mode 100644 database/entity/0030-transaction_link/TransactionLink.ts create mode 100644 database/entity/TransactionLink.ts diff --git a/database/entity/0030-transaction_link/TransactionLink.ts b/database/entity/0030-transaction_link/TransactionLink.ts new file mode 100644 index 000000000..11f1be6a3 --- /dev/null +++ b/database/entity/0030-transaction_link/TransactionLink.ts @@ -0,0 +1,55 @@ +import Decimal from 'decimal.js-light' +import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from 'typeorm' +import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' + +@Entity('transaction_links') +export class Transaction extends BaseEntity { + @PrimaryGeneratedColumn('increment', { unsigned: true }) + id: number + + @Column({ unsigned: true, nullable: false }) + userId: number + + @Column({ + type: 'decimal', + precision: 40, + scale: 20, + nullable: false, + transformer: DecimalTransformer, + }) + amount: Decimal + + @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) + memo: string + + @Column({ + type: 'datetime', + default: () => 'CURRENT_TIMESTAMP', + nullable: false, + }) + createdAt: Date + + @Column({ + type: 'datetime', + default: () => 'CURRENT_TIMESTAMP', + nullable: false, + }) + validUntil: Date + + @Column({ + type: 'datetime', + default: () => 'CURRENT_TIMESTAMP', + nullable: true, + }) + redeemedAt: Date + + @Column({ + type: 'boolean', + default: () => false, + nullable: false, + }) + showEmail: boolean + + @Column({ unsigned: true, nullable: true }) + redeemedBy: number +} diff --git a/database/entity/TransactionLink.ts b/database/entity/TransactionLink.ts new file mode 100644 index 000000000..fde2ba9e0 --- /dev/null +++ b/database/entity/TransactionLink.ts @@ -0,0 +1 @@ +export { TransactionLink } from './0030-transaction_link/TransactionLink' diff --git a/database/entity/index.ts b/database/entity/index.ts index bee4e2b77..cb6f56ab0 100644 --- a/database/entity/index.ts +++ b/database/entity/index.ts @@ -3,6 +3,7 @@ import { LoginEmailOptIn } from './LoginEmailOptIn' import { Migration } from './Migration' import { ServerUser } from './ServerUser' import { Transaction } from './Transaction' +import { TransactionLink } from './TransactionLink' import { User } from './User' import { UserSetting } from './UserSetting' import { AdminPendingCreation } from './AdminPendingCreation' @@ -14,6 +15,7 @@ export const entities = [ Migration, ServerUser, Transaction, + TransactionLink, User, UserSetting, ] From eb5b19e6d6e01babe373fc8309621b7996d566f4 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 12:02:10 +0100 Subject: [PATCH 04/14] add code column to model and entity --- backend/src/graphql/model/TransactionLink.ts | 3 +++ database/entity/0030-transaction_link/TransactionLink.ts | 5 ++++- database/migrations/0030-transaction_link.ts | 1 + 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/backend/src/graphql/model/TransactionLink.ts b/backend/src/graphql/model/TransactionLink.ts index 4511c5cdd..c46728407 100644 --- a/backend/src/graphql/model/TransactionLink.ts +++ b/backend/src/graphql/model/TransactionLink.ts @@ -16,6 +16,9 @@ export class TransactionLink { @Field(() => String) memo: string + @Field(() => String) + code: string + @Field(() => Date) createdAt: Date diff --git a/database/entity/0030-transaction_link/TransactionLink.ts b/database/entity/0030-transaction_link/TransactionLink.ts index 11f1be6a3..d04c00d7b 100644 --- a/database/entity/0030-transaction_link/TransactionLink.ts +++ b/database/entity/0030-transaction_link/TransactionLink.ts @@ -3,7 +3,7 @@ import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' @Entity('transaction_links') -export class Transaction extends BaseEntity { +export class TransactionLink extends BaseEntity { @PrimaryGeneratedColumn('increment', { unsigned: true }) id: number @@ -22,6 +22,9 @@ export class Transaction extends BaseEntity { @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string + @Column({ length: 96, nullable: false, collation: 'utf8mb4_unicode_ci' }) + code: string + @Column({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP', diff --git a/database/migrations/0030-transaction_link.ts b/database/migrations/0030-transaction_link.ts index ca0f0cfa5..59eba1090 100644 --- a/database/migrations/0030-transaction_link.ts +++ b/database/migrations/0030-transaction_link.ts @@ -10,6 +10,7 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis \`userId\` int UNSIGNED NOT NULL, \`amount\` DECIMAL(40,20) NOT NULL, \`memo\` varchar(255) NOT NULL, + \`code\` varchar(96) NOT NULL, \`createdAt\` datetime NOT NULL, \`validUntil\` datetime NOT NULL, \`showEmail\` boolean NOT NULL DEFAULT false, From 9550c31cac7bf51f8e05694a2b8eebc26fe0eff7 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 14:27:53 +0100 Subject: [PATCH 05/14] set type for redeemed by, change order --- .../0030-transaction_link/TransactionLink.ts | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/database/entity/0030-transaction_link/TransactionLink.ts b/database/entity/0030-transaction_link/TransactionLink.ts index d04c00d7b..a3ab5cd1a 100644 --- a/database/entity/0030-transaction_link/TransactionLink.ts +++ b/database/entity/0030-transaction_link/TransactionLink.ts @@ -39,13 +39,6 @@ export class TransactionLink extends BaseEntity { }) validUntil: Date - @Column({ - type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', - nullable: true, - }) - redeemedAt: Date - @Column({ type: 'boolean', default: () => false, @@ -53,6 +46,13 @@ export class TransactionLink extends BaseEntity { }) showEmail: boolean - @Column({ unsigned: true, nullable: true }) - redeemedBy: number + @Column({ + type: 'datetime', + default: () => 'CURRENT_TIMESTAMP', + nullable: true, + }) + redeemedAt?: Date | null + + @Column({ type: 'int', unsigned: true, nullable: true }) + redeemedBy?: number | null } From f78f2d5977df4fa0a0b98671102ff94dc46775ef Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 15:00:34 +0100 Subject: [PATCH 06/14] remove default dates --- database/entity/0030-transaction_link/TransactionLink.ts | 3 --- 1 file changed, 3 deletions(-) diff --git a/database/entity/0030-transaction_link/TransactionLink.ts b/database/entity/0030-transaction_link/TransactionLink.ts index a3ab5cd1a..5e8690270 100644 --- a/database/entity/0030-transaction_link/TransactionLink.ts +++ b/database/entity/0030-transaction_link/TransactionLink.ts @@ -27,14 +27,12 @@ export class TransactionLink extends BaseEntity { @Column({ type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', nullable: false, }) createdAt: Date @Column({ type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', nullable: false, }) validUntil: Date @@ -48,7 +46,6 @@ export class TransactionLink extends BaseEntity { @Column({ type: 'datetime', - default: () => 'CURRENT_TIMESTAMP', nullable: true, }) redeemedAt?: Date | null From 14a0a4344d542c4738c578063b803d121c4aa827 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 15:07:55 +0100 Subject: [PATCH 07/14] Add hold_available_amount column --- .../entity/0030-transaction_link/TransactionLink.ts | 10 ++++++++++ database/migrations/0030-transaction_link.ts | 1 + 2 files changed, 11 insertions(+) diff --git a/database/entity/0030-transaction_link/TransactionLink.ts b/database/entity/0030-transaction_link/TransactionLink.ts index 5e8690270..620f19903 100644 --- a/database/entity/0030-transaction_link/TransactionLink.ts +++ b/database/entity/0030-transaction_link/TransactionLink.ts @@ -19,6 +19,16 @@ export class TransactionLink extends BaseEntity { }) amount: Decimal + @Column({ + type: 'decimal', + name: 'hold_available_amount', + precision: 40, + scale: 20, + nullable: false, + transformer: DecimalTransformer, + }) + holdAvailableAmount: Decimal + @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string diff --git a/database/migrations/0030-transaction_link.ts b/database/migrations/0030-transaction_link.ts index 59eba1090..83d7b072d 100644 --- a/database/migrations/0030-transaction_link.ts +++ b/database/migrations/0030-transaction_link.ts @@ -9,6 +9,7 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis \`id\` int UNSIGNED NOT NULL AUTO_INCREMENT, \`userId\` int UNSIGNED NOT NULL, \`amount\` DECIMAL(40,20) NOT NULL, + \`hold_available_amount\` DECIMAL(40,20) NOT NULL, \`memo\` varchar(255) NOT NULL, \`code\` varchar(96) NOT NULL, \`createdAt\` datetime NOT NULL, From 8bdd25cd0157752321acbbfa7a697184a275fb46 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 15:09:01 +0100 Subject: [PATCH 08/14] add hold available amount to model --- backend/src/graphql/model/TransactionLink.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/src/graphql/model/TransactionLink.ts b/backend/src/graphql/model/TransactionLink.ts index c46728407..f449a6f9e 100644 --- a/backend/src/graphql/model/TransactionLink.ts +++ b/backend/src/graphql/model/TransactionLink.ts @@ -13,6 +13,9 @@ export class TransactionLink { @Field(() => Decimal) amount: Decimal + @Field(() => Decimal) + holdAvailableAmount: Decimal + @Field(() => String) memo: string From 54dee861dd84e8e21ce75b9a27118c51a45e7381 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 15:12:25 +0100 Subject: [PATCH 09/14] reduce length of code --- database/entity/0030-transaction_link/TransactionLink.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/entity/0030-transaction_link/TransactionLink.ts b/database/entity/0030-transaction_link/TransactionLink.ts index 620f19903..bb12277d1 100644 --- a/database/entity/0030-transaction_link/TransactionLink.ts +++ b/database/entity/0030-transaction_link/TransactionLink.ts @@ -32,7 +32,7 @@ export class TransactionLink extends BaseEntity { @Column({ length: 255, nullable: false, collation: 'utf8mb4_unicode_ci' }) memo: string - @Column({ length: 96, nullable: false, collation: 'utf8mb4_unicode_ci' }) + @Column({ length: 24, nullable: false, collation: 'utf8mb4_unicode_ci' }) code: string @Column({ From 55e50b10c7d0c5e6bc80a32167d327316ec2634e Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 15:14:15 +0100 Subject: [PATCH 10/14] reduce length of code in migration --- database/migrations/0030-transaction_link.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/database/migrations/0030-transaction_link.ts b/database/migrations/0030-transaction_link.ts index 83d7b072d..4d72cf43b 100644 --- a/database/migrations/0030-transaction_link.ts +++ b/database/migrations/0030-transaction_link.ts @@ -11,7 +11,7 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis \`amount\` DECIMAL(40,20) NOT NULL, \`hold_available_amount\` DECIMAL(40,20) NOT NULL, \`memo\` varchar(255) NOT NULL, - \`code\` varchar(96) NOT NULL, + \`code\` varchar(24) NOT NULL, \`createdAt\` datetime NOT NULL, \`validUntil\` datetime NOT NULL, \`showEmail\` boolean NOT NULL DEFAULT false, From d4ce46b271bc2e859b629f93feea9cddc2069dde Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 16:34:54 +0100 Subject: [PATCH 11/14] update db version --- backend/src/config/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/config/index.ts b/backend/src/config/index.ts index 82fb9ff2b..4cd428153 100644 --- a/backend/src/config/index.ts +++ b/backend/src/config/index.ts @@ -10,7 +10,7 @@ Decimal.set({ }) const constants = { - DB_VERSION: '0029-clean_transaction_table', + DB_VERSION: '0030-transaction_link', DECAY_START_TIME: new Date('2021-05-13 17:46:31'), // GMT+0 } From 01648aaa0d5d84676bbede8cc9c8a7c4ac313ce9 Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 16:51:17 +0100 Subject: [PATCH 12/14] add soft delete for transaction links --- database/entity/0030-transaction_link/TransactionLink.ts | 5 ++++- database/migrations/0030-transaction_link.ts | 1 + 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/database/entity/0030-transaction_link/TransactionLink.ts b/database/entity/0030-transaction_link/TransactionLink.ts index bb12277d1..6ea708547 100644 --- a/database/entity/0030-transaction_link/TransactionLink.ts +++ b/database/entity/0030-transaction_link/TransactionLink.ts @@ -1,5 +1,5 @@ import Decimal from 'decimal.js-light' -import { BaseEntity, Entity, PrimaryGeneratedColumn, Column } from 'typeorm' +import { BaseEntity, Entity, PrimaryGeneratedColumn, Column, DeleteDateColumn } from 'typeorm' import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer' @Entity('transaction_links') @@ -41,6 +41,9 @@ export class TransactionLink extends BaseEntity { }) createdAt: Date + @DeleteDateColumn() + deletedAt?: Date | null + @Column({ type: 'datetime', nullable: false, diff --git a/database/migrations/0030-transaction_link.ts b/database/migrations/0030-transaction_link.ts index 4d72cf43b..ee76c980d 100644 --- a/database/migrations/0030-transaction_link.ts +++ b/database/migrations/0030-transaction_link.ts @@ -13,6 +13,7 @@ export async function upgrade(queryFn: (query: string, values?: any[]) => Promis \`memo\` varchar(255) NOT NULL, \`code\` varchar(24) NOT NULL, \`createdAt\` datetime NOT NULL, + \`deletedAt\` datetime DEFAULT NULL, \`validUntil\` datetime NOT NULL, \`showEmail\` boolean NOT NULL DEFAULT false, \`redeemedAt\` datetime, From f96177285471bac61f8533cdc203873ea1ee1f0d Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 16:51:56 +0100 Subject: [PATCH 13/14] add soft delete to transaction link model --- backend/src/graphql/model/TransactionLink.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/backend/src/graphql/model/TransactionLink.ts b/backend/src/graphql/model/TransactionLink.ts index f449a6f9e..0f19df466 100644 --- a/backend/src/graphql/model/TransactionLink.ts +++ b/backend/src/graphql/model/TransactionLink.ts @@ -25,6 +25,9 @@ export class TransactionLink { @Field(() => Date) createdAt: Date + @Field(() => Date, { nullable: true }) + deletedAt: Date | null + @Field(() => Date) validUntil: Date From dbb42c30ec988e82de161f1886a838af808a076c Mon Sep 17 00:00:00 2001 From: Moriz Wahl Date: Wed, 9 Mar 2022 17:07:32 +0100 Subject: [PATCH 14/14] increase timeout by factoe 100 --- backend/src/graphql/resolver/UserResolver.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/src/graphql/resolver/UserResolver.test.ts b/backend/src/graphql/resolver/UserResolver.test.ts index 9f3d7265f..05ff2b302 100644 --- a/backend/src/graphql/resolver/UserResolver.test.ts +++ b/backend/src/graphql/resolver/UserResolver.test.ts @@ -12,7 +12,7 @@ import CONFIG from '@/config' import { sendAccountActivationEmail } from '@/mailer/sendAccountActivationEmail' // import { klicktippSignIn } from '@/apis/KlicktippController' -jest.setTimeout(10000) +jest.setTimeout(1000000) jest.mock('@/mailer/sendAccountActivationEmail', () => { return {