// /components/payments/transactionModel.js 'use strict'; const mongoose = require('mongoose'); const uniqueCodePlugin = require('../../utils/mongooseUniqueCodePlugin'); const transactionSchema = new mongoose.Schema({ payment: { type: mongoose.Schema.Types.ObjectId, ref: 'Payment', required: true, index: true }, user: { type: mongoose.Schema.Types.ObjectId, ref: 'User', index: true }, amount: { type: Number, required: true, min: 0 }, method: { type: String, enum: ['online', 'card', 'cash'] }, receiptNumber: { type: String, trim: true }, notes: { type: String, trim: true, maxlength: 5000 }, recordedBy: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, date: { type: Date }, dueDate: { type: Date, required: true, index: true }, status: { type: String, enum: ['pending', 'paid', 'cancelled', 'reverted'], default: 'pending', index: true } }, { timestamps: true }); transactionSchema.plugin(uniqueCodePlugin); transactionSchema.index({ payment: 1, dueDate: 1 }); module.exports = mongoose.model('Transaction', transactionSchema);