import { bigintTransformer } from "../common/entity"; import { User, UserArchive } from "./user.entity"; import { License, LicenseArchive } from "./license.entity"; import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn, OneToOne, JoinColumn, OneToMany, } from "typeorm"; import { FILE_RETENTION_DAYS_DEFAULT } from "../constants"; @Entity({ name: "accounts" }) export class Account { @PrimaryGeneratedColumn() id: number; @Column({ nullable: true, type: "bigint", transformer: bigintTransformer }) parent_account_id: number | null; @Column() tier: number; @Column() country: string; @Column({ default: false }) delegation_permission: boolean; @Column({ default: false }) locked: boolean; @Column() company_name: string; @Column({ default: false }) verified: boolean; @Column({ nullable: true, type: "bigint", transformer: bigintTransformer }) primary_admin_user_id: number | null; @Column({ nullable: true, type: "bigint", transformer: bigintTransformer }) secondary_admin_user_id: number | null; @Column({ nullable: true, type: "bigint", transformer: bigintTransformer }) active_worktype_id: number | null; @Column({ default: false }) auto_file_delete: boolean; @Column({ default: FILE_RETENTION_DAYS_DEFAULT }) file_retention_days: number; @Column({ nullable: true, type: "datetime" }) deleted_at: Date | null; @Column({ nullable: true, type: "varchar" }) created_by: string | null; @CreateDateColumn({ default: () => "datetime('now', 'localtime')", type: "datetime", }) // defaultはSQLite用設定値.本番用は別途migrationで設定 created_at: Date; @Column({ nullable: true, type: "varchar"}) updated_by: string | null; @UpdateDateColumn({ default: () => "datetime('now', 'localtime')", type: "datetime", }) // defaultはSQLite用設定値.本番用は別途migrationで設定 updated_at: Date; @OneToOne(() => User, (user) => user.id) @JoinColumn({ name: "primary_admin_user_id" }) primaryAdminUser: User | null; @OneToOne(() => User, (user) => user.id) @JoinColumn({ name: "secondary_admin_user_id" }) secondaryAdminUser: User | null; @OneToMany(() => User, (user) => user.account) @JoinColumn({ name: "id" }) user: User[] | null; @OneToMany(() => UserArchive, (userArchive) => userArchive.account) @JoinColumn({ name: "id" }) userArchive: UserArchive[] | null; @OneToMany(() => License, (license) => license.account) licenses: License[] | null; } @Entity({ name: "accounts_archive" }) export class AccountArchive { @PrimaryGeneratedColumn() id: number; @Column({ nullable: true, type: "bigint", transformer: bigintTransformer }) parent_account_id: number | null; @Column() tier: number; @Column() country: string; @Column({ default: false }) delegation_permission: boolean; @Column({ default: false }) locked: boolean; @Column({ default: false }) verified: boolean; @Column({ nullable: true, type: "bigint", transformer: bigintTransformer }) primary_admin_user_id: number | null; @Column({ nullable: true, type: "bigint", transformer: bigintTransformer }) secondary_admin_user_id: number | null; @Column({ nullable: true, type: "bigint", transformer: bigintTransformer }) active_worktype_id: number | null; @Column({ nullable: true, type: "datetime" }) deleted_at: Date | null; @Column({ nullable: true, type: "datetime" }) created_by: string | null; @CreateDateColumn({ default: () => "datetime('now', 'localtime')", type: "datetime", }) // defaultはSQLite用設定値.本番用は別途migrationで設定 created_at: Date; @Column({ nullable: true, type: "datetime" }) updated_by: string | null; @UpdateDateColumn({ default: () => "datetime('now', 'localtime')", type: "datetime", }) // defaultはSQLite用設定値.本番用は別途migrationで設定 updated_at: Date; @OneToOne(() => UserArchive, (userArchive) => userArchive.id) @JoinColumn({ name: "primary_admin_user_id" }) primaryAdminUser: UserArchive | null; @OneToOne(() => UserArchive, (userArchive) => userArchive.id) @JoinColumn({ name: "secondary_admin_user_id" }) secondaryAdminUser: UserArchive | null; @OneToMany(() => UserArchive, (userArchive) => userArchive.account) @JoinColumn({ name: "id" }) userArchive: UserArchive[] | null; @OneToMany( () => LicenseArchive, (licenseArchive) => licenseArchive.accountArchive ) licensesArchive: LicenseArchive[] | null; }