aboutsummaryrefslogtreecommitdiffstats
path: root/backend/src/models/MenuItem.js
diff options
context:
space:
mode:
Diffstat (limited to 'backend/src/models/MenuItem.js')
-rw-r--r--backend/src/models/MenuItem.js73
1 files changed, 73 insertions, 0 deletions
diff --git a/backend/src/models/MenuItem.js b/backend/src/models/MenuItem.js
new file mode 100644
index 0000000..47701c8
--- /dev/null
+++ b/backend/src/models/MenuItem.js
@@ -0,0 +1,73 @@
+const mongoose = require('mongoose');
+
+const menuItemSchema = new mongoose.Schema(
+ {
+ name: {
+ type: String,
+ required: [true, 'Menu item name is required'],
+ trim: true
+ },
+ description: {
+ type: String,
+ trim: true
+ },
+ price: {
+ type: Number,
+ required: [true, 'Price is required'],
+ min: 0
+ },
+ category: {
+ type: mongoose.Schema.Types.ObjectId,
+ ref: 'Category',
+ required: [true, 'Category is required']
+ },
+ image: {
+ type: String
+ },
+ ingredients: {
+ type: [String],
+ default: []
+ },
+ available: {
+ type: Boolean,
+ default: true
+ },
+ vegetarian: {
+ type: Boolean,
+ default: false
+ },
+ vegan: {
+ type: Boolean,
+ default: false
+ },
+ glutenFree: {
+ type: Boolean,
+ default: false
+ },
+ spiceLevel: {
+ type: Number,
+ min: 0,
+ max: 5,
+ default: 0
+ },
+ preparationTime: {
+ type: Number,
+ min: 0,
+ default: 15
+ },
+ featuredItem: {
+ type: Boolean,
+ default: false
+ }
+ },
+ {
+ timestamps: true
+ }
+);
+
+// Create text index for search functionality
+menuItemSchema.index({ name: 'text', description: 'text', ingredients: 'text' });
+
+const MenuItem = mongoose.model('MenuItem', menuItemSchema);
+
+module.exports = MenuItem; \ No newline at end of file