Browse Source

feat:project

0235646 2 days ago
parent
commit
fdb675be43

+ 66 - 0
menu-web/src/your-parse-project/cloud/main.js

@@ -0,0 +1,66 @@
+const Parse = require('parse/node');
+
+// 加载所有 Schema 定义
+const UserSchema = require('./schemas/User');
+const ProductSchema = require('./schemas/Product');
+const OrderSchema = require('./schemas/Order');
+const OrderItemSchema = require('./schemas/OrderItem');
+const PriceHistorySchema = require('./schemas/PriceHistory');
+
+// 注册子类
+Parse.Object.registerSubclass('Product', class extends Parse.Object {
+  constructor(attributes) {
+    super('Product', attributes);
+  }
+});
+
+Parse.Object.registerSubclass('Order', class extends Parse.Object {
+  constructor(attributes) {
+    super('Order', attributes);
+  }
+});
+
+// 其他类类似注册...
+
+// 自动生成 Schema(开发环境)
+if (process.env.NODE_ENV === 'development') {
+  const schemas = [
+    ProductSchema,
+    OrderSchema,
+    OrderItemSchema,
+    PriceHistorySchema
+  ];
+  
+  schemas.forEach(schema => {
+    const parseSchema = new Parse.Schema(schema.className);
+    
+    Object.entries(schema.fields).forEach(([field, config]) => {
+      parseSchema.addField(field, config.type, config);
+    });
+    
+    parseSchema.save();
+  });
+}
+
+// 添加业务逻辑钩子
+Parse.Cloud.beforeSave('Order', async (request) => {
+  const order = request.object;
+  if (!order.get('orderNumber')) {
+    // 生成唯一订单号
+    order.set('orderNumber', `ORD-${Date.now()}-${Math.floor(Math.random()*1000)}`);
+  }
+});
+
+Parse.Cloud.afterSave('OrderItem', async (request) => {
+  // 更新订单总金额
+  const order = request.object.get('order');
+  const items = await new Parse.Query('OrderItem')
+    .equalTo('order', order)
+    .find();
+  
+  const total = items.reduce((sum, item) => 
+    sum + (item.get('unitPrice') * item.get('quantity')), 0);
+  
+  order.set('totalAmount', total);
+  await order.save();
+});

+ 16 - 0
menu-web/src/your-parse-project/cloud/schemas/Order.js

@@ -0,0 +1,16 @@
+module.exports = {
+  className: "Order",
+  fields: {
+    user: { type: 'Pointer', targetClass: '_User', required: true },
+    orderNumber: { type: 'String', required: true },
+    orderDate: { type: 'Date', required: true },
+    totalAmount: { type: 'Number', required: true },
+    status: { 
+      type: 'String', 
+      required: true,
+      defaultValue: 'pending',
+      options: ['pending', 'paid', 'shipped', 'completed', 'cancelled']
+    },
+    shippingMethod: { type: 'String' }  // 添加自定义字段
+  }
+};

+ 10 - 0
menu-web/src/your-parse-project/cloud/schemas/OrderItem.js

@@ -0,0 +1,10 @@
+module.exports = {
+  className: "OrderItem",
+  fields: {
+    order: { type: 'Pointer', targetClass: 'Order', required: true },
+    product: { type: 'Pointer', targetClass: 'Product', required: true },
+    quantity: { type: 'Number', required: true, defaultValue: 1 },
+    unitPrice: { type: 'Number', required: true },
+    discount: { type: 'Number' }  // 添加自定义字段
+  }
+};

+ 10 - 0
menu-web/src/your-parse-project/cloud/schemas/PriceHistory.js

@@ -0,0 +1,10 @@
+module.exports = {
+  className: "PriceHistory",
+  fields: {
+    product: { type: 'Pointer', targetClass: 'Product', required: true },
+    price: { type: 'Number', required: true },
+    effectiveDate: { type: 'Date', required: true },
+    changedBy: { type: 'Pointer', targetClass: '_User' },
+    changeReason: { type: 'String' }  // 添加自定义字段
+  }
+};

+ 10 - 0
menu-web/src/your-parse-project/cloud/schemas/Product.js

@@ -0,0 +1,10 @@
+module.exports = {
+  className: "Product",
+  fields: {
+    name: { type: 'String', required: true },
+    description: { type: 'String' },
+    currentPrice: { type: 'Number', required: true },
+    category: { type: 'String' },       // 添加自定义字段
+    stock: { type: 'Number' }            // 添加自定义字段
+  }
+};

+ 10 - 0
menu-web/src/your-parse-project/cloud/schemas/User.js

@@ -0,0 +1,10 @@
+// 扩展内置的 _User 类
+module.exports = {
+  className: "_User",
+  fields: {
+    username: { type: 'String', required: true },
+    email: { type: 'String' },
+    phone: { type: 'String' },          // 添加自定义字段
+    shippingAddress: { type: 'String' } // 添加自定义字段
+  }
+};

+ 22 - 0
menu-web/src/your-parse-project/index.js

@@ -0,0 +1,22 @@
+const express = require('express');
+const ParseServer = require('parse-server').ParseServer;
+
+const app = express();
+
+const api = new ParseServer({
+  databaseURI: 'mongodb://localhost:27017/your_db',
+  appId: 'YOUR_APP_ID',
+  masterKey: 'YOUR_MASTER_KEY',
+  serverURL: 'http://localhost:1337/parse',
+  cloud: './cloud/main.js' // 指定云代码入口
+});
+
+// 挂载 Parse API
+app.use('/parse', api);
+
+// 加载云代码
+require('./cloud/main');
+
+app.listen(1337, () => {
+  console.log('Parse Server running on port 1337');
+});

+ 0 - 0
menu-web/src/your-parse-project/package.json