Files
edr-platform/apps/edr-freight-api/src/modules/verifayda/entities/fayda-verification-session.entity.ts
2026-07-03 09:10:05 +00:00

50 lines
1.5 KiB
TypeScript

import { Column, Entity, Index } from 'typeorm';
import { BaseEntity } from '@edr/api-common';
/**
* One row per started Fayda verification. Mirrors the passenger-api Prisma
* model `FaydaVerificationSession`, but stored in the freight schema via
* TypeORM. `state` is the single-use CSRF token that links the eSignet
* redirect back to this session.
*/
@Entity({ name: 'fayda_verification_sessions', schema: 'freight' })
@Index(['expiresAt'])
@Index(['iamUserId'])
export class FaydaVerificationSession extends BaseEntity {
@Column({ name: 'state', unique: true })
state!: string;
@Column({ name: 'code_verifier' })
codeVerifier!: string;
/** VERIFY | LOGIN */
@Column({ name: 'purpose', default: 'VERIFY' })
purpose!: string;
/** WEB | MOBILE — recorded for audit */
@Column({ name: 'platform', default: 'WEB' })
platform!: string;
@Column({ name: 'save_to_account', type: 'boolean', default: false })
saveToAccount!: boolean;
/** PENDING | COMPLETED | FAILED */
@Column({ name: 'status', default: 'PENDING' })
status!: string;
@Column({ name: 'error_code', type: 'varchar', nullable: true })
errorCode?: string | null;
@Column({ name: 'error_description', type: 'text', nullable: true })
errorDescription?: string | null;
@Column({ name: 'iam_user_id', type: 'uuid', nullable: true })
iamUserId?: string | null;
@Column({ name: 'expires_at', type: 'timestamptz' })
expiresAt!: Date;
@Column({ name: 'completed_at', type: 'timestamptz', nullable: true })
completedAt?: Date | null;
}