Spaces:
Running
Running
| /** | |
| * Transform Request Model | |
| * Represents requests from processors to buy raw materials and produce by-products | |
| */ | |
| import mongoose from "mongoose"; | |
| const transformRequestSchema = new mongoose.Schema( | |
| { | |
| processorId: { | |
| type: mongoose.Schema.Types.ObjectId, | |
| ref: "Processor", | |
| required: true, | |
| index: true, | |
| }, | |
| listingId: { | |
| type: mongoose.Schema.Types.ObjectId, | |
| ref: "Listing", | |
| }, | |
| sellerId: { | |
| type: mongoose.Schema.Types.ObjectId, | |
| ref: "User", | |
| }, | |
| requestType: { | |
| type: String, | |
| enum: ["spot_purchase", "contract_farming", "toll_processing", "buyback"], | |
| required: true, | |
| }, | |
| rawMaterial: { | |
| productType: { | |
| type: String, | |
| required: true, | |
| }, | |
| quantityKg: { | |
| type: Number, | |
| required: true, | |
| min: 0, | |
| }, | |
| grade: String, | |
| pricePerKg: Number, | |
| }, | |
| expectedOutput: [ | |
| { | |
| productType: String, | |
| expectedQuantityKg: Number, | |
| expectedGrade: String, | |
| }, | |
| ], | |
| processingFee: { | |
| amount: Number, | |
| currency: { | |
| type: String, | |
| default: "INR", | |
| }, | |
| per: { | |
| type: String, | |
| enum: ["kg", "quintal", "ton", "batch"], | |
| default: "kg", | |
| }, | |
| }, | |
| timeline: { | |
| requestedDeliveryDate: Date, | |
| estimatedProcessingDays: Number, | |
| expectedCompletionDate: Date, | |
| }, | |
| terms: { | |
| paymentMode: { | |
| type: String, | |
| enum: ["advance", "on_delivery", "credit", "escrow"], | |
| default: "escrow", | |
| }, | |
| advancePercentage: Number, | |
| qualityStandards: String, | |
| penaltyClause: String, | |
| }, | |
| status: { | |
| type: String, | |
| enum: [ | |
| "pending", | |
| "accepted", | |
| "rejected", | |
| "in_progress", | |
| "completed", | |
| "cancelled", | |
| "disputed", | |
| ], | |
| default: "pending", | |
| index: true, | |
| }, | |
| messages: [ | |
| { | |
| senderId: mongoose.Schema.Types.ObjectId, | |
| message: String, | |
| createdAt: { | |
| type: Date, | |
| default: Date.now, | |
| }, | |
| }, | |
| ], | |
| completionDetails: { | |
| actualOutputQuantity: Number, | |
| qualityReport: String, | |
| deliveryDate: Date, | |
| invoiceNumber: String, | |
| invoiceUrl: String, | |
| }, | |
| }, | |
| { | |
| timestamps: true, | |
| } | |
| ); | |
| // Indexes | |
| transformRequestSchema.index({ processorId: 1, status: 1 }); | |
| transformRequestSchema.index({ sellerId: 1, status: 1 }); | |
| const TransformRequest = mongoose.model("TransformRequest", transformRequestSchema); | |
| export default TransformRequest; | |