convert admin_pending_creations to decimal

This commit is contained in:
Ulf Gebhardt 2022-04-06 14:46:45 +02:00
parent 1576787e57
commit c3c3e556a0
Signed by: ulfgebhardt
GPG Key ID: DA6B843E748679C9
3 changed files with 67 additions and 1 deletions

View File

@ -0,0 +1,33 @@
import Decimal from 'decimal.js-light'
import { BaseEntity, Column, Entity, PrimaryGeneratedColumn } from 'typeorm'
import { DecimalTransformer } from '../../src/typeorm/DecimalTransformer'
@Entity('admin_pending_creations')
export class AdminPendingCreation extends BaseEntity {
@PrimaryGeneratedColumn('increment', { unsigned: true })
id: number
@Column({ unsigned: true, nullable: false })
userId: number
@Column({ type: 'datetime', default: () => 'CURRENT_TIMESTAMP' })
created: Date
@Column({ type: 'datetime', nullable: false })
date: Date
@Column({ length: 256, nullable: true, default: null })
memo: string
@Column({
type: 'decimal',
precision: 40,
scale: 20,
nullable: false,
transformer: DecimalTransformer,
})
amount: Decimal
@Column()
moderator: number
}

View File

@ -1 +1 @@
export { AdminPendingCreation } from './0015-admin_pending_creations/AdminPendingCreation'
export { AdminPendingCreation } from './0034-admin_pending_creations_decimal/AdminPendingCreation'

View File

@ -0,0 +1,33 @@
/* MIGRATION TO CHANGE `amount` FIELD TYPE TO `Decimal` ON `admin_pending_creations` */
/* 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<Array<any>>) {
// rename `amount` to `amount_bigint`
await queryFn('ALTER TABLE `admin_pending_creations` RENAME COLUMN `amount` TO `amount_bigint`;')
// add `amount` (decimal)
await queryFn(
'ALTER TABLE `admin_pending_creations` ADD COLUMN `amount` DECIMAL(40,20) DEFAULT NULL AFTER `amount_bigint`;',
)
// fill new `amount` column
await queryFn('UPDATE `admin_pending_creations` SET `amount` = `amount_bigint` DIV 10000;')
// make `amount` not nullable
await queryFn(
'ALTER TABLE `admin_pending_creations` MODIFY COLUMN `amount` DECIMAL(40,20) NOT NULL;',
)
// drop `amount_bitint` column
await queryFn('ALTER TABLE `admin_pending_creations` DROP COLUMN `amount_bigint`;')
}
export async function downgrade(queryFn: (query: string, values?: any[]) => Promise<Array<any>>) {
await queryFn(
'ALTER TABLE `admin_pending_creations` ADD COLUMN `amount_bigint` bigint(20) DEFAULT NULL AFTER `amount`;',
)
await queryFn('UPDATE `admin_pending_creations` SET `amount_bigint` = `amount` * 10000;')
await queryFn(
'ALTER TABLE `admin_pending_creations` MODIFY COLUMN `amount_bigint` bigint(20) NOT NULL;',
)
await queryFn('ALTER TABLE `admin_pending_creations` DROP COLUMN `amount`;')
await queryFn('ALTER TABLE `admin_pending_creations` RENAME COLUMN `amount_bigint` TO `amount`;')
}