From 4e4042e075e46ba650e3ad91c51bf4213164cba5 Mon Sep 17 00:00:00 2001 From: Wini_Fy Date: Thu, 19 Mar 2026 09:39:53 +0700 Subject: [PATCH] feat: Create new file --- models/auditLog.js | 64 ++++++++++++++++++++++++++++++++++++++++++++ models/headerMenu.js | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 models/auditLog.js create mode 100644 models/headerMenu.js diff --git a/models/auditLog.js b/models/auditLog.js new file mode 100644 index 0000000..eb5e545 --- /dev/null +++ b/models/auditLog.js @@ -0,0 +1,64 @@ +const mongoose = require("mongoose"); +const AUDIT_ACTIONS = require("../constants/auditAction"); + +const auditLogSchema = new mongoose.Schema({ + model: { + type: String, + required: true, + }, + + documentId: { + type: mongoose.Schema.Types.ObjectId, + required: true, + }, + + action: { + type: String, + enum: Object.values(AUDIT_ACTIONS), + required: true, + }, + + before: { + type: mongoose.Schema.Types.Mixed, + default: null, + }, + + after: { + type: mongoose.Schema.Types.Mixed, + default: null, + }, + + changes: { + type: [ + { + field: String, + before: mongoose.Schema.Types.Mixed, + after: mongoose.Schema.Types.Mixed, + }, + ], + default: [], + }, + + ipAddress: { + type: String, + required: true, + }, + + userAgent: { + type: String, + default: "", + }, + + performedBy: { + type: mongoose.Schema.Types.ObjectId, + ref: "User", + default: null, + }, + + createdAt: { + type: Date, + default: Date.now, + }, +}); + +module.exports = mongoose.model("AuditLog", auditLogSchema); // Index for faster queries diff --git a/models/headerMenu.js b/models/headerMenu.js new file mode 100644 index 0000000..13c8d3c --- /dev/null +++ b/models/headerMenu.js @@ -0,0 +1,48 @@ +const mongoose = require('mongoose'); + +const HeaderMenuSchema = new mongoose.Schema({ + title: { + type: String, + required: true, + trim: true + }, + slug: { + type: String, + required: true, + trim: true, + lowercase: true + }, + url: { + type: String, + required: true, + trim: true + }, + parentId: { + type: mongoose.Schema.Types.ObjectId, + ref: 'HeaderMenu', + default: null + }, + order: { + type: Number, + default: 0 + }, + status: { + type: String, + enum: ['active', 'inactive'], + default: 'active' + }, + type: { + type: String, + enum: ['internal', 'external'], + default: 'internal' + } +}, { + timestamps: true +}); + +// Indexes for optimization +HeaderMenuSchema.index({ order: 1 }); +HeaderMenuSchema.index({ status: 1 }); +HeaderMenuSchema.index({ parentId: 1, order: 1 }); + +module.exports = mongoose.model('HeaderMenu', HeaderMenuSchema);