diff --git a/src/database/schemas/models.js b/src/database/schemas/models.js index 1d7c3ed..0829ea4 100644 --- a/src/database/schemas/models.js +++ b/src/database/schemas/models.js @@ -38,6 +38,7 @@ import { shipmentModel } from './inventory/shipment.schema.js'; import { invoiceModel } from './finance/invoice.schema.js'; import { clientModel } from './sales/client.schema.js'; import { salesOrderModel } from './sales/salesorder.schema.js'; +import { marketplaceModel } from './sales/marketplace.schema.js'; // Map prefixes to models and id fields export const models = { @@ -315,4 +316,11 @@ export const models = { label: 'Sales Order', referenceField: '_reference', }, + MKT: { + model: marketplaceModel, + idField: '_id', + type: 'marketplace', + label: 'Marketplace', + referenceField: '_reference', + }, }; diff --git a/src/database/schemas/sales/client.schema.js b/src/database/schemas/sales/client.schema.js index 711ab6f..005c820 100644 --- a/src/database/schemas/sales/client.schema.js +++ b/src/database/schemas/sales/client.schema.js @@ -15,6 +15,7 @@ const clientSchema = new mongoose.Schema( { _reference: { type: String, default: () => generateId()() }, name: { required: true, type: String }, + marketplace: { type: mongoose.Schema.Types.ObjectId, ref: 'marketplace', required: false }, email: { required: false, type: String }, phone: { required: false, type: String }, country: { required: false, type: String }, diff --git a/src/database/schemas/sales/marketplace.schema.js b/src/database/schemas/sales/marketplace.schema.js new file mode 100644 index 0000000..17c9ce5 --- /dev/null +++ b/src/database/schemas/sales/marketplace.schema.js @@ -0,0 +1,26 @@ +import mongoose from 'mongoose'; +import { generateId } from '../../utils.js'; + +const marketplaceSchema = new mongoose.Schema( + { + _reference: { type: String, default: () => generateId()() }, + name: { required: true, type: String }, + provider: { + type: String, + required: true, + enum: ['ebay', 'etsy', 'tiktokShop'], + }, + active: { required: true, type: Boolean, default: true }, + // Provider-specific API configuration (flexible for eBay, Etsy, TikTok Shop) + config: { type: mongoose.Schema.Types.Mixed, default: {} }, + }, + { timestamps: true } +); + +marketplaceSchema.virtual('id').get(function () { + return this._id; +}); + +marketplaceSchema.set('toJSON', { virtuals: true }); + +export const marketplaceModel = mongoose.model('marketplace', marketplaceSchema); diff --git a/src/database/schemas/sales/salesorder.schema.js b/src/database/schemas/sales/salesorder.schema.js index 20f18c8..6a2ade7 100644 --- a/src/database/schemas/sales/salesorder.schema.js +++ b/src/database/schemas/sales/salesorder.schema.js @@ -18,6 +18,7 @@ const salesOrderSchema = new Schema( totalTaxAmount: { type: Number, required: true, default: 0 }, timestamp: { type: Date, default: Date.now }, client: { type: Schema.Types.ObjectId, ref: 'client', required: true }, + marketplace: { type: Schema.Types.ObjectId, ref: 'marketplace', required: false }, state: { type: { type: String, required: true, default: 'draft' }, },