import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, ManyToOne, JoinColumn, Index, } from 'typeorm'; import { Store } from '../../stores/entities/store.entity'; import { Video } from '../../videos/entities/video.entity'; @Entity('inventory_items') @Index(['storeId', 'name']) @Index(['storeId', 'category']) @Index(['storeId', 'barcode']) export class InventoryItem { @PrimaryGeneratedColumn('uuid') id: string; @Column({ type: 'uuid' }) storeId: string; @ManyToOne(() => Store) @JoinColumn({ name: 'storeId' }) store: Store; @Column({ type: 'uuid', nullable: true }) detectedByVideoId: string; @ManyToOne(() => Video, { nullable: true }) @JoinColumn({ name: 'detectedByVideoId' }) detectedByVideo: Video; @Column({ type: 'varchar', length: 255 }) name: string; @Column({ type: 'varchar', length: 100, nullable: true }) category: string; @Column({ type: 'varchar', length: 100, nullable: true }) subcategory: string; @Column({ type: 'varchar', length: 50, nullable: true }) barcode: string; @Column({ type: 'int', default: 0 }) quantity: number; @Column({ type: 'int', nullable: true }) minStock: number; @Column({ type: 'decimal', precision: 10, scale: 2, nullable: true }) price: number; @Column({ type: 'decimal', precision: 10, scale: 2, nullable: true }) cost: number; @Column({ type: 'varchar', length: 500, nullable: true }) imageUrl: string; @Column({ type: 'decimal', precision: 5, scale: 2, nullable: true }) detectionConfidence: number; @Column({ type: 'boolean', default: false }) isManuallyEdited: boolean; @Column({ type: 'jsonb', nullable: true }) metadata: Record; @Column({ type: 'timestamp', nullable: true }) lastCountedAt: Date; @CreateDateColumn() createdAt: Date; @UpdateDateColumn() updatedAt: Date; }