mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-26 18:42:49 +00:00
49 lines
1.7 KiB
TypeScript
49 lines
1.7 KiB
TypeScript
import { BaseEntity } from '@edr/api-common';
|
|
import { Column, Entity, Index, JoinColumn, ManyToOne } from 'typeorm';
|
|
import { ApprovalRule } from '../../rule-engine/entities/approval-rule.entity';
|
|
import { Booking } from './booking.entity';
|
|
|
|
export const APPROVAL_STEP_STATUSES = ['PENDING', 'APPROVED', 'REJECTED', 'SKIPPED'] as const;
|
|
export type ApprovalStepStatus = typeof APPROVAL_STEP_STATUSES[number];
|
|
|
|
@Entity({ schema: 'freight', name: 'booking_approval_step' })
|
|
@Index(['bookingId'])
|
|
@Index(['status'])
|
|
@Index(['bookingId', 'stepOrder'])
|
|
export class BookingApprovalStep extends BaseEntity {
|
|
@Column({ name: 'booking_id', type: 'uuid' })
|
|
bookingId!: string;
|
|
|
|
@ManyToOne(() => Booking, (b) => b.approvalSteps, { onDelete: 'CASCADE' })
|
|
@JoinColumn({ name: 'booking_id' })
|
|
booking?: Booking;
|
|
|
|
@Column({ name: 'approval_rule_id', type: 'uuid' })
|
|
approvalRuleId!: string;
|
|
|
|
@ManyToOne(() => ApprovalRule)
|
|
@JoinColumn({ name: 'approval_rule_id' })
|
|
approvalRule?: ApprovalRule;
|
|
|
|
@Column({ name: 'step_order', type: 'smallint' })
|
|
stepOrder!: number;
|
|
|
|
@Column({ name: 'required_role', type: 'varchar', length: 30 })
|
|
requiredRole!: string;
|
|
|
|
@Column({ name: 'blocks_role', type: 'varchar', length: 30, nullable: true })
|
|
blocksRole?: string | null;
|
|
|
|
@Column({ name: 'status', type: 'varchar', length: 20, default: 'PENDING' })
|
|
status!: ApprovalStepStatus;
|
|
|
|
@Column({ name: 'actioned_by_staff_id', type: 'uuid', nullable: true })
|
|
actionedByStaffId?: string | null;
|
|
|
|
@Column({ name: 'actioned_at', type: 'timestamptz', nullable: true })
|
|
actionedAt?: Date | null;
|
|
|
|
@Column({ name: 'remarks', type: 'text', nullable: true })
|
|
remarks?: string | null;
|
|
}
|