Agromind-backend / backend /models /transformRequest.model.js
gh-action-hf-auto
auto: sync backend from github@32fb9685
8a6248c
/**
* 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;