From 890cb8d1669b59b9d9e11e0f542bc42fa4d0c6bb Mon Sep 17 00:00:00 2001 From: "fazri.is" Date: Tue, 14 Oct 2025 10:36:23 +0700 Subject: [PATCH] update trx-portal --- src/entity/trx_authenticators.ts | 40 +++++++ src/entity/trx_cifs.ts | 4 - src/entity/trx_company_users.ts | 3 - src/entity/trx_config_levels.ts | 5 +- src/entity/trx_otp_email.ts | 17 ++- src/entity/trx_otp_number.ts | 17 ++- src/entity/trx_partner_accounts.ts | 49 +++++++++ src/entity/trx_partner_user_activities.ts | 63 +++++++++++ src/entity/trx_partner_user_refresh_tokens.ts | 64 +++++++++++ src/entity/trx_partner_users.ts | 90 ++++++++++++++++ ...ecepient_remittance.ts => trx_partners.ts} | 47 ++++---- ...x_recepient_swift.ts => trx_recepients.ts} | 46 ++++---- src/entity/trx_sender_domestic.ts | 72 ------------- src/entity/trx_sender_remittance.ts | 72 ------------- src/entity/trx_sender_swift.ts | 72 ------------- ...x_recepient_domestic.ts => trx_senders.ts} | 39 ++++--- src/entity/trx_swifts.ts | 50 +++++++++ ...domestic.ts => trx_transaction_amounts.ts} | 21 +--- src/entity/trx_transaction_remittance.ts | 82 -------------- src/entity/trx_transaction_swift.ts | 100 ------------------ src/entity/trx_transactions.ts | 79 +++++++------- src/schema/trx.ts | 19 ++-- src/types/trx.ts | 5 + 23 files changed, 522 insertions(+), 534 deletions(-) create mode 100644 src/entity/trx_authenticators.ts create mode 100644 src/entity/trx_partner_accounts.ts create mode 100644 src/entity/trx_partner_user_activities.ts create mode 100644 src/entity/trx_partner_user_refresh_tokens.ts create mode 100644 src/entity/trx_partner_users.ts rename src/entity/{trx_recepient_remittance.ts => trx_partners.ts} (50%) rename src/entity/{trx_recepient_swift.ts => trx_recepients.ts} (80%) delete mode 100644 src/entity/trx_sender_domestic.ts delete mode 100644 src/entity/trx_sender_remittance.ts delete mode 100644 src/entity/trx_sender_swift.ts rename src/entity/{trx_recepient_domestic.ts => trx_senders.ts} (73%) create mode 100644 src/entity/trx_swifts.ts rename src/entity/{trx_transaction_domestic.ts => trx_transaction_amounts.ts} (70%) delete mode 100644 src/entity/trx_transaction_remittance.ts delete mode 100644 src/entity/trx_transaction_swift.ts diff --git a/src/entity/trx_authenticators.ts b/src/entity/trx_authenticators.ts new file mode 100644 index 0000000..add0a04 --- /dev/null +++ b/src/entity/trx_authenticators.ts @@ -0,0 +1,40 @@ +import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, Index, JoinColumn, ManyToOne, JoinTable } from "typeorm"; + +import { Status } from "../types/status"; + +@Entity("trx_authenticators", { schema: "trx" }) +export class TrxAuthenticator { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ + nullable: false, + unique: true, + length: 256, + }) + authenticator: string; + + @Column({ nullable: false }) + generated_at: Date; + + @Column({ type: "boolean", nullable: true }) + is_valid: boolean; + + @Column({ + nullable: false, + length: 64, + }) + status: Status; + + @Column() + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true }) + @UpdateDateColumn() + updated_at: Date; + + @Column({ nullable: true }) + @DeleteDateColumn() + deleted_at: Date; +} diff --git a/src/entity/trx_cifs.ts b/src/entity/trx_cifs.ts index a8e17a5..36ed442 100644 --- a/src/entity/trx_cifs.ts +++ b/src/entity/trx_cifs.ts @@ -23,10 +23,6 @@ export class TrxCif { }) status: Status; - @ManyToOne(() => TrxCompanyUser, (company_user) => company_user.id, { onDelete: "RESTRICT" }) - @JoinColumn() - company_user: TrxCompanyUser; - @Column() @CreateDateColumn() created_at: Date; diff --git a/src/entity/trx_company_users.ts b/src/entity/trx_company_users.ts index 8cfae04..7b2ac5c 100644 --- a/src/entity/trx_company_users.ts +++ b/src/entity/trx_company_users.ts @@ -45,9 +45,6 @@ export class TrxCompanyUser { }) name: string; - @OneToMany(() => TrxConfigLevel, (configLevel) => configLevel.user, { cascade: true }) - level: TrxConfigLevel[]; - @ManyToOne(() => TrxCompany, { onDelete: "NO ACTION" }) @JoinTable() company: TrxCompany; diff --git a/src/entity/trx_config_levels.ts b/src/entity/trx_config_levels.ts index 60949c7..52a259d 100644 --- a/src/entity/trx_config_levels.ts +++ b/src/entity/trx_config_levels.ts @@ -1,6 +1,6 @@ import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, Index, JoinColumn, ManyToOne } from "typeorm"; import { Status } from "../types/status"; -import { TrxCompanyUser } from "./trx_company_users"; +import { TrxPartnerUser } from "./trx_partner_users"; @Entity("trx_config_levels", { schema: "trx" }) export class TrxConfigLevel { @@ -22,9 +22,6 @@ export class TrxConfigLevel { }) status: Status; - @ManyToOne(() => TrxCompanyUser, (user) => user.level, { onDelete: "CASCADE" }) - user: TrxCompanyUser; - @Column() @CreateDateColumn() created_at: Date; diff --git a/src/entity/trx_otp_email.ts b/src/entity/trx_otp_email.ts index a4d8abe..38c18eb 100644 --- a/src/entity/trx_otp_email.ts +++ b/src/entity/trx_otp_email.ts @@ -1,3 +1,4 @@ +import bcrypt from "bcryptjs"; import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from "typeorm"; @Entity("trx_otp_emails", { schema: "trx" }) @@ -5,6 +6,13 @@ export class TrxOtpEmail { @PrimaryGeneratedColumn("uuid") id: string; + @Column({ + nullable: true, + unique: true, + length: 64, + }) + codeid: string; + @Column({ nullable: false, length: 64, @@ -13,7 +21,6 @@ export class TrxOtpEmail { @Column({ nullable: false, - unique: true, length: 64, }) email: string; @@ -40,4 +47,12 @@ export class TrxOtpEmail { @Column({ nullable: true }) @DeleteDateColumn() deleted_at: Date; + + hashOtp() { + this.otp = bcrypt.hashSync(this.otp, 8); + } + + checkIfOtpMatch(unencryptedOtp: string) { + return bcrypt.compareSync(unencryptedOtp, this.otp); + } } diff --git a/src/entity/trx_otp_number.ts b/src/entity/trx_otp_number.ts index bd8a8e0..ede1a6d 100644 --- a/src/entity/trx_otp_number.ts +++ b/src/entity/trx_otp_number.ts @@ -1,3 +1,4 @@ +import bcrypt from "bcryptjs"; import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn } from "typeorm"; @Entity("trx_otp_numbers", { schema: "trx" }) @@ -5,6 +6,13 @@ export class TrxOtpNumber { @PrimaryGeneratedColumn("uuid") id: string; + @Column({ + nullable: true, + unique: true, + length: 64, + }) + codeid: string; + @Column({ nullable: false, length: 64, @@ -13,7 +21,6 @@ export class TrxOtpNumber { @Column({ nullable: false, - unique: true, length: 64, }) number: string; @@ -39,4 +46,12 @@ export class TrxOtpNumber { @Column({ nullable: true }) @DeleteDateColumn() deleted_at: Date; + + hashOtp() { + this.otp = bcrypt.hashSync(this.otp, 8); + } + + checkIfOtpMatch(unencryptedOtp: string) { + return bcrypt.compareSync(unencryptedOtp, this.otp); + } } diff --git a/src/entity/trx_partner_accounts.ts b/src/entity/trx_partner_accounts.ts new file mode 100644 index 0000000..508f452 --- /dev/null +++ b/src/entity/trx_partner_accounts.ts @@ -0,0 +1,49 @@ +import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, Index, JoinColumn, ManyToOne, JoinTable } from "typeorm"; + +import { Status } from "../types/status"; +import { TrxPartner } from "./trx_partners"; +import { TrxCif } from "./trx_cifs"; + +@Entity("trx_partner_accounts", { schema: "trx" }) +export class TrxPartnerAccount { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ + nullable: true, + length: 256, + }) + name: string; + + @Column({ + nullable: false, + length: 256, + }) + account_number: string; + + @ManyToOne(() => TrxPartner, (partner) => partner.partner_account, { onDelete: "RESTRICT" }) + @JoinColumn() + partner: TrxPartner; + + @ManyToOne(() => TrxCif, { onDelete: "RESTRICT", nullable: true }) + @JoinTable() + cif: TrxCif; + + @Column({ + nullable: false, + length: 64, + }) + status: Status; + + @Column() + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true }) + @UpdateDateColumn() + updated_at: Date; + + @Column({ nullable: true }) + @DeleteDateColumn() + deleted_at: Date; +} diff --git a/src/entity/trx_partner_user_activities.ts b/src/entity/trx_partner_user_activities.ts new file mode 100644 index 0000000..b19c494 --- /dev/null +++ b/src/entity/trx_partner_user_activities.ts @@ -0,0 +1,63 @@ +import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, Index, JoinColumn, ManyToOne } from "typeorm"; + +import { ActivityType } from "../types/action"; +import { TrxPartnerUser } from "./trx_partner_users"; + +@Entity("trx_partner_user_activities", { schema: "trx" }) +export class TrxPartnerUserActivity { + @PrimaryGeneratedColumn("uuid") + id: string; + + @ManyToOne(() => TrxPartnerUser, { onDelete: "NO ACTION", nullable: false }) + @JoinColumn() + user: TrxPartnerUser; + + @Index() + @Column({ + type: "uuid", + }) + refresh_token: string; + + @Index() + @Column({ + nullable: false, + length: 512, + }) + module: string; + + @Column({ + nullable: false, + length: 2048, + }) + description: string; + + @Column({ + nullable: true, + length: 1, + }) + action: ActivityType; + + @Column({ + nullable: false, + length: 2048, + }) + url: String; + + @Column({ + type: "text", + nullable: true, + }) + data_body: String; + + @Column() + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true }) + @UpdateDateColumn() + updated_at: Date; + + @Column({ nullable: true }) + @DeleteDateColumn() + deleted_at: Date; +} diff --git a/src/entity/trx_partner_user_refresh_tokens.ts b/src/entity/trx_partner_user_refresh_tokens.ts new file mode 100644 index 0000000..ff6e98a --- /dev/null +++ b/src/entity/trx_partner_user_refresh_tokens.ts @@ -0,0 +1,64 @@ +import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, Index } from "typeorm"; + +@Entity("trx_partner_user_refresh_tokens", { schema: "trx" }) +export class TrxPartnerUserRefreshToken { + @PrimaryGeneratedColumn("uuid") + refresh_token: string; + + @Index() + @Column({ + type: "uuid", + }) + id_user: string; + + @Column({ + nullable: false, + length: 4096, + }) + user_agent: string; + + @Column({ + nullable: true, + length: 128, + }) + os: string; + + @Column({ + nullable: true, + length: 256, + }) + device: string; + + @Column({ + nullable: true, + length: 64, + }) + platform: string; + + @Column({ + nullable: true, + length: 64, + }) + browser: string; + + @Column({ + nullable: true, + length: 32, + }) + remote_addr: string; + + @Column("timestamp") + expired_at: Date; + + @Column() + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true }) + @UpdateDateColumn() + updated_at: Date; + + @Column({ nullable: true }) + @DeleteDateColumn() + deleted_at: Date; +} diff --git a/src/entity/trx_partner_users.ts b/src/entity/trx_partner_users.ts new file mode 100644 index 0000000..129361a --- /dev/null +++ b/src/entity/trx_partner_users.ts @@ -0,0 +1,90 @@ +import bcrypt from "bcryptjs"; +import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, DeleteDateColumn, Index, ManyToOne, OneToMany, JoinTable } from "typeorm"; + +import { Status } from "../types/status"; +import { TrxPartner } from "./trx_partners"; + +@Entity("trx_partner_users", { schema: "trx" }) +export class TrxPartnerUser { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ + nullable: false, + unique: true, + length: 64, + }) + email: string; + + @Column({ + nullable: false, + unique: true, + length: 256, + }) + phone: string; + + @Column({ + nullable: false, + length: 64, + select: false, + }) + password: string; + + @Column({ + nullable: false, + unique: true, + length: 64, + }) + username: string; + + @Column({ + nullable: false, + length: 64, + unique: false, + }) + name: string; + + @ManyToOne(() => TrxPartner, { onDelete: "RESTRICT" }) + @JoinTable() + partner: TrxPartner; + + @Column({ + type: "jsonb", + nullable: true, + }) + level: string[]; + + @Index() + @Column({ + nullable: true, + type: "uuid", + select: false, + }) + reset_token: string; + + @Column({ + nullable: false, + length: 64, + }) + status: Status; + + @Column() + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true }) + @UpdateDateColumn() + updated_at: Date; + + @Column({ nullable: true }) + @DeleteDateColumn() + deleted_at: Date; + + hashPassword() { + this.password = bcrypt.hashSync(this.password, 8); + } + + checkIfPasswordMatch(unencryptedPassword: string) { + return bcrypt.compareSync(unencryptedPassword, this.password); + } +} diff --git a/src/entity/trx_recepient_remittance.ts b/src/entity/trx_partners.ts similarity index 50% rename from src/entity/trx_recepient_remittance.ts rename to src/entity/trx_partners.ts index 8adf949..9685002 100644 --- a/src/entity/trx_recepient_remittance.ts +++ b/src/entity/trx_partners.ts @@ -1,19 +1,34 @@ -import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; +import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; +import { TrxCompany } from "./trx_companies"; import { Status } from "../types/status"; -import { TrxConfigNationality } from "./trx_config_nationalities"; -import { TrxTransactionRemittance } from "./trx_transaction_remittance"; -import { TrxConfigBank } from "./trx_config_banks"; +import { TrxCif } from "./trx_cifs"; +import { TrxPartnerType } from "../types/trx"; +import { TrxPartnerAccount } from "./trx_partner_accounts"; -@Entity("trx_recepient_remittances", { schema: "trx" }) -export class TrxRecepientRemittance { +@Entity("trx_partners", { schema: "trx" }) +export class TrxPartner { @PrimaryGeneratedColumn("uuid") id: string; - @OneToOne(() => TrxTransactionRemittance, (transaction_remittance) => transaction_remittance.recepient_remittance, { onDelete: "CASCADE" }) - transaction_remittance: TrxTransactionRemittance; + @OneToMany(() => TrxPartnerAccount, (partner_account) => partner_account.partner, { cascade: true, nullable: false }) + partner_account: TrxPartnerAccount[]; @Column({ nullable: false, + length: 4096, + }) + type: TrxPartnerType; + + @Column({ + nullable: false, + unique: true, + length: 256, + }) + code: string; + + @Column({ + nullable: false, + unique: true, length: 256, }) name: string; @@ -22,23 +37,21 @@ export class TrxRecepientRemittance { nullable: false, length: 256, }) - iban: string; + pic_name: string; @Column({ nullable: false, + unique: true, length: 256, }) - phone: string; - - @ManyToOne(() => TrxConfigBank, { onDelete: "NO ACTION", nullable: false }) - @JoinColumn() - recepient_bank: TrxConfigBank; + pic_phone: string; @Column({ nullable: false, + unique: false, length: 256, }) - account_number: string; + pic_email: string; @Column({ nullable: true, @@ -46,10 +59,6 @@ export class TrxRecepientRemittance { }) address: string; - @ManyToOne(() => TrxConfigNationality, { onDelete: "NO ACTION", nullable: true }) - @JoinColumn() - nationality: TrxConfigNationality; - @Column({ nullable: false, length: 64, diff --git a/src/entity/trx_recepient_swift.ts b/src/entity/trx_recepients.ts similarity index 80% rename from src/entity/trx_recepient_swift.ts rename to src/entity/trx_recepients.ts index d62a200..176d3d4 100644 --- a/src/entity/trx_recepient_swift.ts +++ b/src/entity/trx_recepients.ts @@ -1,16 +1,36 @@ import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; import { Status } from "../types/status"; import { TrxConfigNationality } from "./trx_config_nationalities"; -import { TrxTransactionSwift } from "./trx_transaction_swift"; import { TrxConfigBank } from "./trx_config_banks"; +import { TrxTransaction } from "./trx_transactions"; -@Entity("trx_recepient_swifts", { schema: "trx" }) -export class TrxRecepientSwift { +@Entity("trx_recepients", { schema: "trx" }) +export class TrxRecepient { @PrimaryGeneratedColumn("uuid") id: string; - @OneToOne(() => TrxTransactionSwift, (transaction_swift) => transaction_swift.recepient_swift, { onDelete: "CASCADE" }) - transaction_swift: TrxTransactionSwift; + @OneToOne(() => TrxTransaction, (transaction) => transaction.recepient, { onDelete: "CASCADE" }) + transaction: TrxTransaction; + + @ManyToOne(() => TrxConfigBank, { onDelete: "NO ACTION", nullable: false }) + @JoinColumn() + bank: TrxConfigBank; + + @ManyToOne(() => TrxConfigNationality, { onDelete: "NO ACTION", nullable: true }) + @JoinColumn() + nationality: TrxConfigNationality; + + @Column({ + nullable: false, + length: 256, + }) + account_number: string; + + @Column({ + nullable: true, + length: 256, + }) + iban: string; @Column({ nullable: false, @@ -18,27 +38,17 @@ export class TrxRecepientSwift { }) name: string; - @Column({ - nullable: false, - length: 256, - }) - iban: string; - @Column({ nullable: false, length: 256, }) phone: string; - @ManyToOne(() => TrxConfigBank, { onDelete: "NO ACTION", nullable: false }) - @JoinColumn() - recepient_bank: TrxConfigBank; - @Column({ nullable: false, length: 256, }) - account_number: string; + email: string; @Column({ nullable: true, @@ -46,10 +56,6 @@ export class TrxRecepientSwift { }) address: string; - @ManyToOne(() => TrxConfigNationality, { onDelete: "NO ACTION", nullable: true }) - @JoinColumn() - nationality: TrxConfigNationality; - @Column({ nullable: false, length: 64, diff --git a/src/entity/trx_sender_domestic.ts b/src/entity/trx_sender_domestic.ts deleted file mode 100644 index 66e09b4..0000000 --- a/src/entity/trx_sender_domestic.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; -import { Status } from "../types/status"; -import { TrxConfigNationality } from "./trx_config_nationalities"; -import { TrxCompanyAccount } from "./trx_company_accounts"; -import { TrxTransactionDomestic } from "./trx_transaction_domestic"; -import { TrxConfigBank } from "./trx_config_banks"; - -@Entity("trx_sender_domestics", { schema: "trx" }) -export class TrxSenderDomestic { - @PrimaryGeneratedColumn("uuid") - id: string; - - @OneToOne(() => TrxTransactionDomestic, (transaction) => transaction.sender_domestic, { onDelete: "CASCADE" }) - transaction_domestic: TrxTransactionDomestic; - - @Column({ - nullable: false, - length: 256, - }) - name: string; - - @Column({ - nullable: false, - length: 256, - }) - phone: string; - - @Column({ - nullable: true, - length: 4096, - }) - address: string; - - @ManyToOne(() => TrxConfigNationality, { onDelete: "NO ACTION", nullable: true }) - @JoinColumn() - nationality: TrxConfigNationality; - - @ManyToOne(() => TrxCompanyAccount, { onDelete: "NO ACTION", nullable: true }) - @JoinColumn() - company_account: TrxCompanyAccount; - - @ManyToOne(() => TrxConfigBank, { onDelete: "NO ACTION", nullable: false }) - @JoinColumn() - sender_bank: TrxConfigBank; - - @Column({ - nullable: false, - length: 64, - }) - status: Status; - - @Column() - @CreateDateColumn() - created_at: Date; - - @Column({ nullable: true, length: 256 }) - created_by: string; - - @Column({ nullable: true }) - @UpdateDateColumn() - updated_at: Date; - - @Column({ nullable: true, length: 256 }) - updated_by: string; - - @Column({ nullable: true }) - @DeleteDateColumn() - deleted_at: Date; - - @Column({ nullable: true, length: 256 }) - deleted_by: string; -} diff --git a/src/entity/trx_sender_remittance.ts b/src/entity/trx_sender_remittance.ts deleted file mode 100644 index c518366..0000000 --- a/src/entity/trx_sender_remittance.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; -import { Status } from "../types/status"; -import { TrxConfigNationality } from "./trx_config_nationalities"; -import { TrxCompanyAccount } from "./trx_company_accounts"; -import { TrxTransactionRemittance } from "./trx_transaction_remittance"; -import { TrxConfigBank } from "./trx_config_banks"; - -@Entity("trx_sender_remittances", { schema: "trx" }) -export class TrxSenderRemittance { - @PrimaryGeneratedColumn("uuid") - id: string; - - @OneToOne(() => TrxTransactionRemittance, (transaction) => transaction.sender_remittance, { onDelete: "CASCADE" }) - transaction_remittance: TrxTransactionRemittance; - - @Column({ - nullable: false, - length: 256, - }) - name: string; - - @Column({ - nullable: false, - length: 256, - }) - phone: string; - - @Column({ - nullable: true, - length: 4096, - }) - address: string; - - @ManyToOne(() => TrxConfigNationality, { onDelete: "NO ACTION", nullable: true }) - @JoinColumn() - nationality: TrxConfigNationality; - - @ManyToOne(() => TrxCompanyAccount, { onDelete: "NO ACTION", nullable: true }) - @JoinColumn() - company_account: TrxCompanyAccount; - - @ManyToOne(() => TrxConfigBank, { onDelete: "NO ACTION", nullable: false }) - @JoinColumn() - sender_bank: TrxConfigBank; - - @Column({ - nullable: false, - length: 64, - }) - status: Status; - - @Column() - @CreateDateColumn() - created_at: Date; - - @Column({ nullable: true, length: 256 }) - created_by: string; - - @Column({ nullable: true }) - @UpdateDateColumn() - updated_at: Date; - - @Column({ nullable: true, length: 256 }) - updated_by: string; - - @Column({ nullable: true }) - @DeleteDateColumn() - deleted_at: Date; - - @Column({ nullable: true, length: 256 }) - deleted_by: string; -} diff --git a/src/entity/trx_sender_swift.ts b/src/entity/trx_sender_swift.ts deleted file mode 100644 index af95161..0000000 --- a/src/entity/trx_sender_swift.ts +++ /dev/null @@ -1,72 +0,0 @@ -import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; -import { Status } from "../types/status"; -import { TrxConfigNationality } from "./trx_config_nationalities"; -import { TrxCompanyAccount } from "./trx_company_accounts"; -import { TrxTransactionSwift } from "./trx_transaction_swift"; -import { TrxConfigBank } from "./trx_config_banks"; - -@Entity("trx_sender_swifts", { schema: "trx" }) -export class TrxSenderSwift { - @PrimaryGeneratedColumn("uuid") - id: string; - - @OneToOne(() => TrxTransactionSwift, (transaction) => transaction.sender_swift, { onDelete: "CASCADE" }) - transaction_swift: TrxTransactionSwift; - - @Column({ - nullable: false, - length: 256, - }) - name: string; - - @Column({ - nullable: false, - length: 256, - }) - phone: string; - - @Column({ - nullable: true, - length: 4096, - }) - address: string; - - @ManyToOne(() => TrxConfigNationality, { onDelete: "NO ACTION", nullable: true }) - @JoinColumn() - nationality: TrxConfigNationality; - - @ManyToOne(() => TrxCompanyAccount, { onDelete: "NO ACTION", nullable: true }) - @JoinColumn() - company_account: TrxCompanyAccount; - - @ManyToOne(() => TrxConfigBank, { onDelete: "NO ACTION", nullable: false }) - @JoinColumn() - sender_bank: TrxConfigBank; - - @Column({ - nullable: false, - length: 64, - }) - status: Status; - - @Column() - @CreateDateColumn() - created_at: Date; - - @Column({ nullable: true, length: 256 }) - created_by: string; - - @Column({ nullable: true }) - @UpdateDateColumn() - updated_at: Date; - - @Column({ nullable: true, length: 256 }) - updated_by: string; - - @Column({ nullable: true }) - @DeleteDateColumn() - deleted_at: Date; - - @Column({ nullable: true, length: 256 }) - deleted_by: string; -} diff --git a/src/entity/trx_recepient_domestic.ts b/src/entity/trx_senders.ts similarity index 73% rename from src/entity/trx_recepient_domestic.ts rename to src/entity/trx_senders.ts index 2f41885..1097b52 100644 --- a/src/entity/trx_recepient_domestic.ts +++ b/src/entity/trx_senders.ts @@ -1,16 +1,29 @@ import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; import { Status } from "../types/status"; import { TrxConfigNationality } from "./trx_config_nationalities"; -import { TrxTransactionDomestic } from "./trx_transaction_domestic"; +import { TrxPartnerAccount } from "./trx_partner_accounts"; +import { TrxTransaction } from "./trx_transactions"; import { TrxConfigBank } from "./trx_config_banks"; -@Entity("trx_recepient_domestics", { schema: "trx" }) -export class TrxRecepientDomestic { +@Entity("trx_senders", { schema: "trx" }) +export class TrxSender { @PrimaryGeneratedColumn("uuid") id: string; - @OneToOne(() => TrxTransactionDomestic, (transaction_domestic) => transaction_domestic.recepient_domestic, { onDelete: "CASCADE" }) - transaction_domestic: TrxTransactionDomestic; + @OneToOne(() => TrxTransaction, (transaction) => transaction.sender, { onDelete: "CASCADE" }) + transaction: TrxTransaction; + + @ManyToOne(() => TrxConfigNationality, { onDelete: "NO ACTION", nullable: true }) + @JoinColumn() + nationality: TrxConfigNationality; + + @ManyToOne(() => TrxPartnerAccount, { onDelete: "NO ACTION", nullable: true }) + @JoinColumn() + partner_account: TrxPartnerAccount; + + @ManyToOne(() => TrxConfigBank, { onDelete: "NO ACTION", nullable: false }) + @JoinColumn() + bank: TrxConfigBank; @Column({ nullable: false, @@ -24,21 +37,11 @@ export class TrxRecepientDomestic { }) phone: string; - @ManyToOne(() => TrxConfigBank, { onDelete: "NO ACTION", nullable: false }) - @JoinColumn() - recepient_bank: TrxConfigBank; - @Column({ nullable: false, length: 256, }) - account_number: string; - - @Column({ - nullable: true, - length: 256, - }) - iban: string; + email: string; @Column({ nullable: true, @@ -46,10 +49,6 @@ export class TrxRecepientDomestic { }) address: string; - @ManyToOne(() => TrxConfigNationality, { onDelete: "NO ACTION", nullable: true }) - @JoinColumn() - nationality: TrxConfigNationality; - @Column({ nullable: false, length: 64, diff --git a/src/entity/trx_swifts.ts b/src/entity/trx_swifts.ts new file mode 100644 index 0000000..16bb3cf --- /dev/null +++ b/src/entity/trx_swifts.ts @@ -0,0 +1,50 @@ +import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; +import { TrxTransaction } from "./trx_transactions"; + +@Entity("trx_swifts", { schema: "trx" }) +export class TrxSwift { + @PrimaryGeneratedColumn("uuid") + id: string; + + @Column({ + nullable: true, + length: 256, + }) + invoice: string; + + @Column({ + nullable: true, + length: 256, + }) + bic: string; + + @Column({ + nullable: true, + length: 4096, + }) + file: string; + + @OneToOne(() => TrxTransaction, (transaction) => transaction.swift, { onDelete: "CASCADE" }) + transaction: TrxTransaction; + + @Column() + @CreateDateColumn() + created_at: Date; + + @Column({ nullable: true, length: 256 }) + created_by: string; + + @Column({ nullable: true }) + @UpdateDateColumn() + updated_at: Date; + + @Column({ nullable: true, length: 256 }) + updated_by: string; + + @Column({ nullable: true }) + @DeleteDateColumn() + deleted_at: Date; + + @Column({ nullable: true, length: 256 }) + deleted_by: string; +} diff --git a/src/entity/trx_transaction_domestic.ts b/src/entity/trx_transaction_amounts.ts similarity index 70% rename from src/entity/trx_transaction_domestic.ts rename to src/entity/trx_transaction_amounts.ts index 9429285..28d91b4 100644 --- a/src/entity/trx_transaction_domestic.ts +++ b/src/entity/trx_transaction_amounts.ts @@ -1,13 +1,10 @@ import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; -import { TrxCompany } from "./trx_companies"; import { TrxConfigSourceIncome } from "./trx_config_source_incomes"; -import { TrxSenderDomestic } from "./trx_sender_domestic"; -import { TrxRecepientDomestic } from "./trx_recepient_domestic"; import { TrxTransaction } from "./trx_transactions"; -import { TrxTransactionTypeStatus, TrxTransactionCorrespondentFees, TrxTransactionStatus } from "./../types/trx"; +import { TrxTransactionTypeStatus, TrxTransactionCorrespondentFees, TrxTransactionStatus } from "../types/trx"; -@Entity("trx_transaction_domestics", { schema: "trx" }) -export class TrxTransactionDomestic { +@Entity("trx_transaction_amounts", { schema: "trx" }) +export class TrxTransactionAmount { @PrimaryGeneratedColumn("uuid") id: string; @@ -42,23 +39,15 @@ export class TrxTransactionDomestic { sub_total: number; @Column({ type: "float8", nullable: false, default: 0 }) - rate_idr: number; + rate: number; - @OneToOne(() => TrxTransaction, (transaction) => transaction.transaction_domestic, { onDelete: "CASCADE" }) + @OneToOne(() => TrxTransaction, (transaction) => transaction.transaction_amount, { onDelete: "CASCADE" }) transaction: TrxTransaction; @ManyToOne(() => TrxConfigSourceIncome, { onDelete: "NO ACTION", nullable: true }) @JoinColumn() source_income: TrxConfigSourceIncome; - @OneToOne(() => TrxSenderDomestic, (sender) => sender.transaction_domestic, { cascade: true }) - @JoinColumn() - sender_domestic: TrxSenderDomestic; - - @OneToOne(() => TrxRecepientDomestic, (recepient) => recepient.transaction_domestic, { cascade: true }) - @JoinColumn() - recepient_domestic: TrxRecepientDomestic; - @Column() @CreateDateColumn() created_at: Date; diff --git a/src/entity/trx_transaction_remittance.ts b/src/entity/trx_transaction_remittance.ts deleted file mode 100644 index 546577d..0000000 --- a/src/entity/trx_transaction_remittance.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; -import { TrxCompany } from "./trx_companies"; -import { TrxConfigSourceIncome } from "./trx_config_source_incomes"; -import { TrxSenderRemittance } from "./trx_sender_remittance"; -import { TrxRecepientRemittance } from "./trx_recepient_remittance"; -import { TrxTransaction } from "./trx_transactions"; -import { TrxTransactionTypeStatus, TrxTransactionCorrespondentFees, TrxTransactionStatus } from "./../types/trx"; - -@Entity("trx_transaction_remittances", { schema: "trx" }) -export class TrxTransactionRemittance { - @PrimaryGeneratedColumn("uuid") - id: string; - - @Column({ - nullable: false, - length: 256, - }) - type_transaction: TrxTransactionTypeStatus; - - @Column({ - nullable: true, - length: 256, - }) - correspondent_fees: string; - - @Column({ type: "float8" }) - amount_overbooking: number; - - @Column({ type: "float8", nullable: true }) - transfer_amount: number; - - @Column({ type: "float8", nullable: true }) - transfer_total: number; - - @Column({ type: "float8", nullable: true }) - commission: number; - - @Column({ type: "float8", nullable: true }) - cost_of_sender: number; - - @Column({ type: "float8", nullable: true }) - sub_total: number; - - @Column({ type: "float8", nullable: false, default: 0 }) - rate_idr: number; - - @OneToOne(() => TrxTransaction, (transaction) => transaction.transaction_remittance, { onDelete: "CASCADE" }) - transaction: TrxTransaction; - - @ManyToOne(() => TrxConfigSourceIncome, { onDelete: "NO ACTION", nullable: true }) - @JoinColumn() - source_income: TrxConfigSourceIncome; - - @OneToOne(() => TrxSenderRemittance, (sender) => sender.transaction_remittance, { cascade: true }) - @JoinColumn() - sender_remittance: TrxSenderRemittance; - - @OneToOne(() => TrxRecepientRemittance, (recepient) => recepient.transaction_remittance, { cascade: true }) - @JoinColumn() - recepient_remittance: TrxRecepientRemittance; - - @Column() - @CreateDateColumn() - created_at: Date; - - @Column({ nullable: true, length: 256 }) - created_by: string; - - @Column({ nullable: true }) - @UpdateDateColumn() - updated_at: Date; - - @Column({ nullable: true, length: 256 }) - updated_by: string; - - @Column({ nullable: true }) - @DeleteDateColumn() - deleted_at: Date; - - @Column({ nullable: true, length: 256 }) - deleted_by: string; -} diff --git a/src/entity/trx_transaction_swift.ts b/src/entity/trx_transaction_swift.ts deleted file mode 100644 index c8c4123..0000000 --- a/src/entity/trx_transaction_swift.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToOne, OneToMany, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; -import { TrxCompany } from "./trx_companies"; -import { TrxConfigSourceIncome } from "./trx_config_source_incomes"; -import { TrxSenderSwift } from "./trx_sender_swift"; -import { TrxRecepientSwift } from "./trx_recepient_swift"; -import { TrxTransaction } from "./trx_transactions"; -import { TrxTransactionTypeStatus, TrxTransactionCorrespondentFees, TrxTransactionStatus } from "./../types/trx"; - -@Entity("trx_transaction_swifts", { schema: "trx" }) -export class TrxTransactionSwift { - @PrimaryGeneratedColumn("uuid") - id: string; - - @Column({ - nullable: false, - length: 256, - }) - type_transaction: TrxTransactionTypeStatus; - - @Column({ - nullable: true, - length: 256, - }) - correspondent_fees: string; - - @Column({ type: "float8" }) - amount_overbooking: number; - - @Column({ type: "float8", nullable: true }) - transfer_amount: number; - - @Column({ type: "float8", nullable: true }) - transfer_total: number; - - @Column({ type: "float8", nullable: true }) - commission: number; - - @Column({ type: "float8", nullable: true }) - cost_of_sender: number; - - @Column({ type: "float8", nullable: true }) - sub_total: number; - - @Column({ type: "float8", nullable: false, default: 0 }) - rate_idr: number; - - @OneToOne(() => TrxTransaction, (transaction) => transaction.transaction_swift, { onDelete: "CASCADE" }) - transaction: TrxTransaction; - - @ManyToOne(() => TrxConfigSourceIncome, { onDelete: "NO ACTION", nullable: true }) - @JoinColumn() - source_income: TrxConfigSourceIncome; - - @OneToOne(() => TrxSenderSwift, (sender) => sender.transaction_swift, { cascade: true }) - @JoinColumn() - sender_swift: TrxSenderSwift; - - @OneToOne(() => TrxRecepientSwift, (recepient) => recepient.transaction_swift, { cascade: true }) - @JoinColumn() - recepient_swift: TrxRecepientSwift; - - @Column({ - nullable: true, - length: 4096, - }) - file: String; - - @Column({ - nullable: true, - length: 256, - }) - bic: String; - - @Column({ - nullable: true, - length: 4096, - }) - invoice: String; - - @Column() - @CreateDateColumn() - created_at: Date; - - @Column({ nullable: true, length: 256 }) - created_by: string; - - @Column({ nullable: true }) - @UpdateDateColumn() - updated_at: Date; - - @Column({ nullable: true, length: 256 }) - updated_by: string; - - @Column({ nullable: true }) - @DeleteDateColumn() - deleted_at: Date; - - @Column({ nullable: true, length: 256 }) - deleted_by: string; -} diff --git a/src/entity/trx_transactions.ts b/src/entity/trx_transactions.ts index 8711aa9..3465a22 100644 --- a/src/entity/trx_transactions.ts +++ b/src/entity/trx_transactions.ts @@ -1,30 +1,40 @@ import { Column, CreateDateColumn, DeleteDateColumn, Entity, JoinColumn, ManyToOne, OneToOne, PrimaryGeneratedColumn, UpdateDateColumn } from "typeorm"; -import { TrxCompany } from "./trx_companies"; -import { TrxTransactionDomestic } from "./trx_transaction_domestic"; -import { TrxTransactionTransferStatus, TrxTransactionStatus } from "./../types/trx"; -import { TrxTransactionRemittance } from "./trx_transaction_remittance"; -import { TrxTransactionSwift } from "./trx_transaction_swift"; +import { TrxTransactionTransferStatus, TrxTransactionStatus } from "../types/trx"; +import { TrxPartner } from "./trx_partners"; +import { TrxAuthenticator } from "./trx_authenticators"; +import { TrxSender } from "./trx_senders"; +import { TrxRecepient } from "./trx_recepients"; +import { TrxSwift } from "./trx_swifts"; +import { TrxTransactionAmount } from "./trx_transaction_amounts"; @Entity("trx_transactions", { schema: "trx" }) export class TrxTransaction { @PrimaryGeneratedColumn("uuid") id: string; - @ManyToOne(() => TrxCompany, { onDelete: "NO ACTION", nullable: false }) + @ManyToOne(() => TrxAuthenticator, { onDelete: "RESTRICT", nullable: true }) @JoinColumn() - company: TrxCompany; + authenticator: TrxAuthenticator; - @OneToOne(() => TrxTransactionDomestic, (transaction_domestic) => transaction_domestic.transaction, { cascade: true }) + @ManyToOne(() => TrxPartner, { onDelete: "RESTRICT", nullable: false }) @JoinColumn() - transaction_domestic: TrxTransactionDomestic; + partner: TrxPartner; - @OneToOne(() => TrxTransactionRemittance, (transaction_remittance) => transaction_remittance.transaction, { cascade: true }) + @OneToOne(() => TrxSender, (sender) => sender.transaction, { cascade: true }) @JoinColumn() - transaction_remittance: TrxTransactionRemittance; + sender: TrxSender; - @OneToOne(() => TrxTransactionSwift, (transaction_swift) => transaction_swift.transaction, { cascade: true }) + @OneToOne(() => TrxRecepient, (recepient) => recepient.transaction, { cascade: true }) @JoinColumn() - transaction_swift: TrxTransactionSwift; + recepient: TrxRecepient; + + @OneToOne(() => TrxTransactionAmount, (transaction_amount) => transaction_amount.transaction, { cascade: true }) + @JoinColumn() + transaction_amount: TrxTransactionAmount; + + @OneToOne(() => TrxSwift, (swift) => swift.transaction, { cascade: true }) + @JoinColumn() + swift: TrxSwift; @Column({ nullable: false, @@ -40,12 +50,9 @@ export class TrxTransaction { type_transfer: TrxTransactionTransferStatus; @Column({ - nullable: true, - length: 4096, + nullable: false, + default: false, }) - signatures: String; - - @Column({ type: "boolean", nullable: true }) is_maker_approved: boolean; @Column({ type: "varchar", length: 100, nullable: true }) @@ -57,7 +64,10 @@ export class TrxTransaction { @Column({ nullable: true }) maker_approved_at: Date; - @Column({ type: "boolean", nullable: true }) + @Column({ + nullable: false, + default: false, + }) is_checker_approved: boolean; @Column({ type: "varchar", length: 100, nullable: true }) @@ -69,7 +79,10 @@ export class TrxTransaction { @Column({ nullable: true }) checker_approved_at: Date; - @Column({ type: "boolean", nullable: true }) + @Column({ + nullable: false, + default: false, + }) is_signer_approved: boolean; @Column({ type: "varchar", length: 100, nullable: true }) @@ -81,41 +94,29 @@ export class TrxTransaction { @Column({ nullable: true }) signer_approved_at: Date; - @Column({ type: "boolean", nullable: true }) - is_tl_approved: boolean; - - @Column({ type: "varchar", length: 100, nullable: true }) - tl_approved_by: string; - - @Column({ type: "varchar", length: 4096, nullable: true }) - tl_note: string; - - @Column({ nullable: true }) - tl_approved_at: Date; - @Column({ nullable: true, length: 4096, }) - tl_signatures: String; + is_valid_otp: String; @Column({ type: "boolean", nullable: true }) - is_spv_approved: boolean; + is_release: boolean; @Column({ type: "varchar", length: 100, nullable: true }) - spv_approved_by: string; + release_by: string; @Column({ type: "varchar", length: 4096, nullable: true }) - spv_note: string; + release_note: string; @Column({ nullable: true }) - spv_approved_at: Date; + release_at: Date; @Column({ nullable: true, - length: 4096, + length: 256, }) - spv_signatures: String; + release_file: string; @Column({ type: "varchar", length: 4096, nullable: true }) remark: string; diff --git a/src/schema/trx.ts b/src/schema/trx.ts index c803cb5..7d1d2e0 100644 --- a/src/schema/trx.ts +++ b/src/schema/trx.ts @@ -31,14 +31,15 @@ export * from "../entity/trx_region_administrativus"; export * from "../entity/trx_region_aldeias"; export * from "../entity/trx_region_sucos"; export * from "../entity/trx_registration"; -export * from "../entity/trx_sender_remittance"; -export * from "../entity/trx_recepient_remittance"; -export * from "../entity/trx_sender_domestic"; -export * from "../entity/trx_recepient_domestic"; -export * from "../entity/trx_transaction_domestic"; -export * from "../entity/trx_transaction_remittance"; export * from "../entity/trx_transactions"; -export * from "../entity/trx_transaction_swift"; -export * from "../entity/trx_sender_swift"; -export * from "../entity/trx_recepient_swift"; +export * from "../entity/trx_transaction_amounts"; +export * from "../entity/trx_senders"; +export * from "../entity/trx_recepients"; +export * from "../entity/trx_swifts"; +export * from "../entity/trx_authenticators"; +export * from "../entity/trx_partners"; +export * from "../entity/trx_partner_accounts"; +export * from "../entity/trx_partner_user_activities"; +export * from "../entity/trx_partner_user_refresh_tokens"; +export * from "../entity/trx_partner_users"; export * from "../types/trx"; diff --git a/src/types/trx.ts b/src/types/trx.ts index f30925e..7d98131 100644 --- a/src/types/trx.ts +++ b/src/types/trx.ts @@ -15,6 +15,11 @@ export enum TrxTransactionTypeStatus { "rtgs" = "rtgs", } +export enum TrxPartnerType { + "company" = "company", + "personal" = "personal", +} + export enum TrxTransactionTransferStatus { "remittance" = "remittance", "swift" = "swift",