penisularhr / src / modules / incentive / incentive-settings.entity.ts
incentive-settings.entity.ts
Raw
import { Column, Entity, OneToMany } from 'typeorm';

import { AbstractEntity } from '../../common/abstract.entity';
import { IncentiveName, IncentivePeriod, IncentiveType } from '../../constants';
import { UseDto } from '../../decorators';
import { NumberTransformer } from '../../transformer/number-transformer';
import { IncentiveSettingDto } from './dtos/incentive-settings.dto';
import { IncentiveRecordEntity } from './incentive-record.entity';

@Entity({ name: 'incentive_settings' })
@UseDto(IncentiveSettingDto)
export class IncentiveSettingEntity extends AbstractEntity<IncentiveSettingDto> {
  @Column({ type: 'enum', enum: IncentiveName })
  name!: IncentiveName;

  @Column({ type: 'boolean', default: true })
  isActive!: boolean;

  @Column({ nullable: true })
  unit?: string;

  @Column({
    type: 'decimal',
    precision: 20,
    scale: 6,
    default: 0,
    transformer: new NumberTransformer(),
  })
  amount!: number;

  @Column({
    type: 'decimal',
    precision: 20,
    scale: 6,
    default: 0,
    transformer: new NumberTransformer(),
  })
  threshold!: number;

  @Column({
    type: 'enum',
    enum: IncentiveType,
    default: IncentiveType.FIXED_AMOUNT,
  })
  type!: IncentiveType;

  @Column({
    type: 'enum',
    enum: IncentivePeriod,
  })
  period!: IncentivePeriod;

  @OneToMany(
    () => IncentiveRecordEntity,
    (incentiveRecordEntity) => incentiveRecordEntity.incentiveSetting,
  )
  incentiveRecord!: IncentiveRecordEntity[];
}