import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; import { HydratedDocument } from 'mongoose'; import { InquiryStatus } from '../../common/enums/inquiry-status.enum'; import { InquiryType } from '../../common/enums/inquiry-type.enum'; import { ProviderName } from '../../common/enums/provider-name.enum'; export type InquiryLogDocument = HydratedDocument; /** * MongoDB audit trail for every inquiry attempt. */ @Schema({ timestamps: { createdAt: true, updatedAt: false }, collection: 'inquiry_logs' }) export class InquiryLog { @Prop({ required: true, enum: InquiryType }) inquiryType!: InquiryType; @Prop({ required: true, enum: ProviderName }) provider!: ProviderName; @Prop({ type: Object, required: true }) requestPayload!: Record; @Prop({ type: Object, required: true }) maskedRequest!: Record; @Prop({ type: Object }) responsePayload?: Record; @Prop({ required: true, enum: InquiryStatus }) status!: InquiryStatus; @Prop({ required: true }) duration!: number; @Prop({ required: true, index: true }) requestId!: string; @Prop({ required: true, index: true }) trackingCode!: string; @Prop({ type: Object }) error?: Record; createdAt?: Date; } export const InquiryLogSchema = SchemaFactory.createForClass(InquiryLog); InquiryLogSchema.index({ createdAt: -1, provider: 1, inquiryType: 1, status: 1 }); InquiryLogSchema.index({ provider: 1, inquiryType: 1, createdAt: -1 }); InquiryLogSchema.index({ 'error.code': 1, createdAt: -1 });