This commit is contained in:
2026-08-28 17:31:02 +02:00
commit 2b30e8bd39
694 changed files with 49243 additions and 0 deletions
@@ -0,0 +1,48 @@
import { Column, CreateDateColumn, Entity, OneToMany, OneToOne, PrimaryGeneratedColumn } from 'typeorm';
import { ColumnBigIntTransformer } from '../../../utils/ColumnBigIntTransformer';
import { ColumnNumericTransformer } from '../../../utils/ColumnNumericTransformer';
import { PaymentMethod } from '../types/PaymentMethod';
import { InvoiceReason } from '../types/InvoiceReason';
import { InvoiceMoneroDetails } from './InvoiceMoneroDetails';
import { InvoicePayment } from './InvoicePayment';
@Entity('invoices')
export class Invoice {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ type: 'enum', enum: InvoiceReason })
reason: InvoiceReason;
@Column({ type: 'enum', enum: PaymentMethod })
paymentMethod: PaymentMethod;
@Column({
type: 'numeric',
precision: 12,
scale: 2,
transformer: new ColumnNumericTransformer()
})
amountFiat: number;
@Column({ length: 3 })
fiatCurrency: string;
@Column({ type: 'timestamptz' })
expiresAt: Date;
@Column({ type: 'varchar', length: 255, unique: true })
paymentAddress: string;
@Column({ type: 'bigint', transformer: new ColumnBigIntTransformer() })
expectedTotalAtomic: string;
@OneToMany(() => InvoicePayment, payment => payment.invoice, { cascade: true })
payments: InvoicePayment[];
@OneToOne(() => InvoiceMoneroDetails, moneroDetails => moneroDetails.invoice, { cascade: true })
moneroDetails: InvoiceMoneroDetails | null;
@CreateDateColumn()
createdAt: Date;
}
@@ -0,0 +1,27 @@
import { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm';
import { ColumnNumericTransformer } from '../../../utils/ColumnNumericTransformer';
import { Invoice } from './Invoice';
@Entity('invoice_monero_details')
export class InvoiceMoneroDetails {
@PrimaryGeneratedColumn('uuid')
id: string;
@OneToOne(() => Invoice, invoice => invoice.moneroDetails, { onDelete: 'CASCADE' })
@JoinColumn()
invoice: Invoice;
@Column({ type: 'int' })
paymentAddressIndex: number;
@Column({
type: 'numeric',
precision: 12,
scale: 2,
transformer: new ColumnNumericTransformer()
})
fiatPerXmrAtCreation: number;
@Column({ type: 'int' })
requiredConfirmations: number;
}
@@ -0,0 +1,25 @@
import { Column, CreateDateColumn, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';
import { ColumnBigIntTransformer } from '../../../utils/ColumnBigIntTransformer';
import { Invoice } from './Invoice';
@Entity('invoice_payments')
export class InvoicePayment {
@PrimaryGeneratedColumn('uuid')
id: string;
@ManyToOne(() => Invoice, invoice => invoice.payments, { onDelete: 'CASCADE' })
@JoinColumn()
invoice: Invoice;
@Column({ length: 64, unique: true })
txHash: string;
@Column({ type: 'bigint', transformer: new ColumnBigIntTransformer() })
amountAtomic: string;
@Column({ type: 'int', default: 0 })
confirmations: number;
@CreateDateColumn()
createdAt: Date;
}