import { tenantGuard } from "@/lib/server/tenantGuard"; import { Schema, model, models, Model, Types, Document } from "mongoose"; export interface IStockTransfer extends Document { _id: Types.ObjectId; businessId: Types.ObjectId; fromBranchId: Types.ObjectId; toBranchId: Types.ObjectId; productId: Types.ObjectId; quantity: number; clientUuid: string; // idempotency key from the form, so a double-submit moves stock once note: string | null; recordedBy: Types.ObjectId; createdAt: Date; } /** * An inter-branch stock transfer. The stock itself moves through two * StockMovement rows (TRANSFER_OUT at the source, TRANSFER_IN at the * destination) whose refId is this transfer's id. */ const stockTransferSchema = new Schema( { businessId: { type: Schema.Types.ObjectId, ref: "Business", required: true }, fromBranchId: { type: Schema.Types.ObjectId, ref: "Branch", required: true }, toBranchId: { type: Schema.Types.ObjectId, ref: "Branch", required: true }, productId: { type: Schema.Types.ObjectId, ref: "Product", required: true }, quantity: { type: Number, required: true, min: 1 }, clientUuid: { type: String, required: true }, note: { type: String, default: null, trim: true }, recordedBy: { type: Schema.Types.ObjectId, ref: "User", required: true }, }, { timestamps: { createdAt: true, updatedAt: false } } ); stockTransferSchema.index({ businessId: 1, clientUuid: 1 }, { unique: true }); stockTransferSchema.index({ businessId: 1, createdAt: -1 }); stockTransferSchema.plugin(tenantGuard); export const StockTransfer = (models.StockTransfer as Model) || model("StockTransfer", stockTransferSchema);