import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, ManyToOne, JoinColumn, Index, } from 'typeorm'; import { PosIntegration } from './pos-integration.entity'; export enum SyncLogType { WEBHOOK_RECEIVED = 'WEBHOOK_RECEIVED', MANUAL_SYNC = 'MANUAL_SYNC', SCHEDULED_SYNC = 'SCHEDULED_SYNC', } export enum SyncLogStatus { SUCCESS = 'SUCCESS', PARTIAL = 'PARTIAL', FAILED = 'FAILED', } @Entity('pos_sync_logs') @Index(['integrationId', 'createdAt']) export class PosSyncLog { @PrimaryGeneratedColumn('uuid') id: string; @Column({ type: 'uuid' }) integrationId: string; @ManyToOne(() => PosIntegration, { onDelete: 'CASCADE' }) @JoinColumn({ name: 'integrationId' }) integration: PosIntegration; @Column({ type: 'enum', enum: SyncLogType, }) type: SyncLogType; @Column({ type: 'enum', enum: SyncLogStatus, }) status: SyncLogStatus; @Column({ type: 'int', default: 0 }) itemsProcessed: number; @Column({ type: 'int', default: 0 }) itemsCreated: number; @Column({ type: 'int', default: 0 }) itemsUpdated: number; @Column({ type: 'int', default: 0 }) itemsSkipped: number; @Column({ type: 'int', default: 0 }) itemsFailed: number; @Column({ type: 'jsonb', nullable: true }) details: { webhookEventType?: string; webhookEventId?: string; errors?: { itemId: string; error: string }[]; duration?: number; }; @Column({ type: 'text', nullable: true }) errorMessage: string; @CreateDateColumn() createdAt: Date; }