67 lines
1.9 KiB
JavaScript
67 lines
1.9 KiB
JavaScript
const mongoose = require('mongoose')
|
|
const mongoosePaginate = require('mongoose-paginate-v2')
|
|
const timestamp = require('mongoose-timestamp')
|
|
|
|
const offerSchema = new mongoose.Schema({
|
|
sender: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: 'User',
|
|
required: true
|
|
},
|
|
receiver: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: 'User',
|
|
required: true
|
|
},
|
|
status: {
|
|
type: String,
|
|
enum: ['pending', 'accepted', 'rejected'], // وضعیت درخواست
|
|
default: 'pending'
|
|
},
|
|
transaction_id: {
|
|
type: mongoose.Schema.Types.ObjectId,
|
|
ref: 'Payment',
|
|
default: null
|
|
},
|
|
// مبلغی که فرستنده با تیکِ «استفاده از کیف پول» از سبدِ charged پرداخت کرده (نگاه کن
|
|
// به utils/walletSplit.js) — بقیهی مبلغ (اگه مونده باشه) از درگاه گرفته شده
|
|
walletAmountUsed: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
// سهم ۳۰٪ گیرنده که فقط با پاسخگویی ظرف ۱۲ ساعت به اولین پیام دایرکت واریز میشود —
|
|
pendingCommissionAmount: {
|
|
type: Number,
|
|
default: 0
|
|
},
|
|
firstMessageAt: {
|
|
type: Date,
|
|
default: null
|
|
},
|
|
replyDeadline: {
|
|
type: Date,
|
|
default: null
|
|
},
|
|
repliedAt: {
|
|
type: Date,
|
|
default: null
|
|
},
|
|
commissionCredited: {
|
|
type: Boolean,
|
|
default: false
|
|
},
|
|
// وقتی گیرنده ظرف مهلت مقرر به اولین پیام دایرکت پاسخ نداد، سهم ۳۰٪ بهجای گیرنده
|
|
// به کیف پول فرستنده (کسی که پرداخت کرده) برمیگردد — این فلگ از بازگشتِ دوباره
|
|
// در اجراهای بعدیِ cron جلوگیری میکند
|
|
commissionRefunded: {
|
|
type: Boolean,
|
|
default: false
|
|
}
|
|
})
|
|
|
|
offerSchema.plugin(timestamp)
|
|
offerSchema.plugin(mongoosePaginate)
|
|
|
|
const OfferModel = mongoose.model('Offer', offerSchema)
|
|
module.exports = OfferModel
|