60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
// File: src/common/entities/audit-log.entity.ts
|
|
import {
|
|
Entity,
|
|
PrimaryGeneratedColumn,
|
|
Column,
|
|
CreateDateColumn,
|
|
ManyToOne,
|
|
JoinColumn,
|
|
PrimaryColumn, // ✅ [Fix] เพิ่ม Import นี้
|
|
} from 'typeorm';
|
|
import { User } from '../../modules/user/entities/user.entity';
|
|
|
|
@Entity('audit_logs')
|
|
export class AuditLog {
|
|
@PrimaryGeneratedColumn({ name: 'audit_id', type: 'bigint' })
|
|
auditId!: string;
|
|
|
|
@Column({ name: 'request_id', nullable: true })
|
|
requestId?: string;
|
|
|
|
// ✅ ต้องมีบรรทัดนี้ (TypeORM ต้องการเพื่อ Map Column)
|
|
@Column({ name: 'user_id', nullable: true })
|
|
userId?: number | null; // ✅ เพิ่ม | null เพื่อรองรับค่า null
|
|
|
|
@Column({ length: 100 })
|
|
action!: string;
|
|
|
|
@Column({
|
|
type: 'enum',
|
|
enum: ['INFO', 'WARN', 'ERROR', 'CRITICAL'],
|
|
default: 'INFO',
|
|
})
|
|
severity!: string;
|
|
|
|
@Column({ name: 'entity_type', length: 50, nullable: true })
|
|
entityType?: string;
|
|
|
|
@Column({ name: 'entity_id', length: 50, nullable: true })
|
|
entityId?: string;
|
|
|
|
@Column({ name: 'details_json', type: 'json', nullable: true })
|
|
detailsJson?: Record<string, unknown>;
|
|
|
|
@Column({ name: 'ip_address', length: 45, nullable: true })
|
|
ipAddress?: string;
|
|
|
|
@Column({ name: 'user_agent', length: 255, nullable: true })
|
|
userAgent?: string;
|
|
|
|
// ✅ [Fix] ทั้งสอง Decorator ต้องระบุ name: 'created_at'
|
|
@CreateDateColumn({ name: 'created_at' })
|
|
@PrimaryColumn({ name: 'created_at' }) // Composite PK คู่กับ auditId
|
|
createdAt!: Date;
|
|
|
|
// Relations
|
|
@ManyToOne(() => User)
|
|
@JoinColumn({ name: 'user_id' })
|
|
user?: User;
|
|
}
|