import { BelongsTo, BelongsToMany, Column, DataType, ForeignKey, HasMany, HasOne, Index, Model, Table, } from 'sequelize-typescript'; import { TokenType } from '../utils/enums'; import { EvmAccount } from './evmAccount'; import { EvmAccountERC20TokenBalance } from './evmAccountERC20TokenBalance'; import { EvmAccountERC721TokenBalance } from './evmAccountERC721TokenBalance'; import { EvmAccountERC1155TokenBalance } from './evmAccountERC1155TokenBalance'; import { EvmContract } from './evmContract'; import { EvmTokenEvent } from './evmTokenEvent'; import { EvmTokenType } from './evmTokenType'; @Table({ timestamps: true }) export class EvmToken extends Model { @Index({ name: 'evmToken-address-index', using: 'HASH', }) @Column({ type: DataType.STRING }) address: string; @Index({ name: 'evmToken-symbol-index', using: 'HASH', }) @Column(DataType.STRING(128)) symbol: string; @Column(DataType.STRING(128)) title: string; @Column(DataType.INTEGER) decimals: number; @Column(DataType.STRING) totalSupply: string; // relations 1-1 @Index({ name: 'evmToken-EvmContract-index', using: 'HASH', }) @ForeignKey(() => EvmContract) @Column(DataType.INTEGER) evmContractId: number; @BelongsTo(() => EvmContract, 'evmContractId') evmContract: EvmContract; // relations M-1 @ForeignKey(() => EvmTokenType) @Column(DataType.STRING) evmTokenTypeName: TokenType; @BelongsTo(() => EvmTokenType, 'evmTokenTypeName') evmTokenType: EvmTokenType; // relations 1-M @HasMany(() => EvmTokenEvent, { foreignKey: 'evmTokenId' }) evmTokenEvents: EvmTokenEvent[]; @HasOne(() => EvmAccountERC20TokenBalance) evmERC20TokenBalance: EvmAccountERC20TokenBalance; @HasOne(() => EvmAccountERC721TokenBalance) evmERC721TokenBalance: EvmAccountERC721TokenBalance; @HasOne(() => EvmAccountERC1155TokenBalance) evmERC1155TokenBalance: EvmAccountERC1155TokenBalance; @BelongsToMany(() => EvmAccount, () => EvmAccountERC20TokenBalance) evmAccountBalances: EvmAccount[]; }