[MCH-BE] feat: Add missing delivery entities (driver, status_history)

- Created driver.entity.ts with DriverStatus enum
- Created delivery-status-history.entity.ts with Delivery relation
- Updated delivery.module.ts imports for TypeOrmModule

Resolves: TASK-2026-01-20-002 audit P0 gap

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
rckrdmrd 2026-01-20 03:29:20 -06:00
parent b3eaebb54c
commit db34a3ddf2
3 changed files with 111 additions and 1 deletions

View File

@ -4,9 +4,11 @@ import { DeliveryController } from './delivery.controller';
import { DeliveryService } from './delivery.service';
import { Delivery } from './entities/delivery.entity';
import { DeliveryZone } from './entities/delivery-zone.entity';
import { DeliveryStatusHistory } from './entities/delivery-status-history.entity';
import { Driver } from './entities/driver.entity';
@Module({
imports: [TypeOrmModule.forFeature([Delivery, DeliveryZone])],
imports: [TypeOrmModule.forFeature([Delivery, DeliveryZone, DeliveryStatusHistory, Driver])],
controllers: [DeliveryController],
providers: [DeliveryService],
exports: [DeliveryService],

View File

@ -0,0 +1,46 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
ManyToOne,
JoinColumn,
Index,
} from 'typeorm';
import { Delivery } from './delivery.entity';
@Entity({ schema: 'delivery', name: 'delivery_status_history' })
@Index(['deliveryId', 'createdAt'])
export class DeliveryStatusHistory {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ name: 'delivery_id' })
deliveryId: string;
@Column({ length: 20 })
status: string;
@Column({ name: 'previous_status', length: 20, nullable: true })
previousStatus: string;
@Column({ name: 'changed_by', nullable: true })
changedBy: string;
@Column({ name: 'changed_by_name', length: 100, nullable: true })
changedByName: string;
@Column({ type: 'text', nullable: true })
notes: string;
@Column({ type: 'jsonb', nullable: true })
location: { lat: number; lng: number };
@CreateDateColumn({ name: 'created_at' })
createdAt: Date;
// Relations
@ManyToOne(() => Delivery)
@JoinColumn({ name: 'delivery_id' })
delivery: Delivery;
}

View File

@ -0,0 +1,62 @@
import {
Entity,
PrimaryGeneratedColumn,
Column,
CreateDateColumn,
UpdateDateColumn,
Index,
} from 'typeorm';
export enum DriverStatus {
AVAILABLE = 'available',
BUSY = 'busy',
OFFLINE = 'offline',
INACTIVE = 'inactive',
}
@Entity({ schema: 'delivery', name: 'drivers' })
@Index(['tenantId', 'status'])
@Index(['tenantId', 'active'])
export class Driver {
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ name: 'tenant_id' })
tenantId: string;
@Column({ name: 'user_id', nullable: true })
userId: string;
@Column({ length: 100 })
name: string;
@Column({ length: 20 })
phone: string;
@Column({ name: 'vehicle_type', length: 50, nullable: true })
vehicleType: string;
@Column({ name: 'vehicle_plate', length: 20, nullable: true })
vehiclePlate: string;
@Column({ name: 'photo_url', type: 'text', nullable: true })
photoUrl: string;
@Column({ type: 'varchar', length: 20, default: DriverStatus.AVAILABLE })
status: DriverStatus;
@Column({ name: 'current_location', type: 'jsonb', nullable: true })
currentLocation: { lat: number; lng: number };
@Column({ name: 'last_seen_at', type: 'timestamptz', nullable: true })
lastSeenAt: Date;
@Column({ default: true })
active: boolean;
@CreateDateColumn({ name: 'created_at' })
createdAt: Date;
@UpdateDateColumn({ name: 'updated_at' })
updatedAt: Date;
}