import { BelongsTo, Column, DataType, ForeignKey, HasMany, Model, Table, } from 'sequelize-typescript'; import { validatorKind, validatorStatus } from '../utils/enums'; import { Address } from './address'; import { Block } from './block'; import { Reward } from './reward'; import { Stake } from './stake'; import { StakeNft } from './stakeNft'; @Table export class Validator extends Model { @Column(DataType.STRING) address: string; @Column(DataType.STRING) consensusAddress: string; @ForeignKey(() => Address) @Column(DataType.INTEGER) rewardAddressId: number; @BelongsTo(() => Address) rewardAddress: Address; @BelongsTo(() => Block) block: Block; @Column(DataType.STRING) moniker: string; @Column(DataType.STRING) website: string; @Column(DataType.STRING) details: string; @Column(DataType.TEXT) identity: string; @Column(DataType.STRING) security_contact: string; @ForeignKey(() => Block) @Column(DataType.INTEGER) blockId: number; @Column(DataType.INTEGER) skippedBlocks: number; @Column(DataType.INTEGER) delegators: number; @Column(DataType.STRING) fee: string; @Column(DataType.INTEGER) slots: number; @Column(DataType.STRING) mins: string; @Column(DataType.STRING) stake: string; @Column(DataType.STRING) power: string; @Column(DataType.STRING) rating: string; @HasMany(() => Stake) stakes: Stake[]; @HasMany(() => StakeNft) nftStakes: Stake[]; @HasMany(() => Block, { foreignKey: 'proposerId', constraints: false, }) blocks: Block[]; @Column(DataType.ENUM({ values: Object.values(validatorStatus) })) status: validatorStatus; @Column(DataType.ENUM({ values: Object.values(validatorKind) })) kind: validatorKind; @HasMany(() => Reward) rewards: Reward[]; }