coupon.js 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. 'use strict';
  2. const Schema = require('mongoose').Schema;
  3. const metaPlugin = require('naf-framework-mongoose-free/lib/model/meta-plugin');
  4. // 失效配置: expire_type nolimit 不需要设置
  5. const expire_config = {
  6. fixed: [{ start: '生效开始日期', end: '生效结束日期' }], // 存数组
  7. days: '生效${days}天后过期', // Number
  8. };
  9. // 减免配置: 在limit中, 都有一个选项,是无限制(nolimit)
  10. // min(减免)/dicount(折扣)
  11. const discount_config = {
  12. limit: '使用券的金额下限',
  13. min: '满减:减多少 / 折扣:9折 = 90%;8.5折=85%; 输入前面 x折的 x',
  14. max: '上限,折扣有上限,满减不取上限',
  15. };
  16. // 使用配置: use_limit为all时,不需要这个设置
  17. const use_limit_config = {
  18. tags: '指定商品类型',
  19. };
  20. // 领取配置: get_limit为nolimit时,不需要这个设置
  21. const get_limit_config = {
  22. max: '限制每人做多领取多少张该优惠券',
  23. };
  24. // 优惠券
  25. const coupon = {
  26. issue: { type: String, required: false, zh: '发行方' }, // 字典:coupon_issue 平台/店铺
  27. shop: { type: String, required: false, zh: '店铺', ref: 'Shop.Shop' }, // 店铺发行的需要有店铺关联
  28. name: { type: String, required: false, zh: '优惠券名称' }, //
  29. expire_type: { type: String, required: false, zh: '失效方式' }, // 字典:coupon_expire_type
  30. expire_config: { type: Object, required: false, zh: '失效配置' }, //
  31. discount_type: { type: String, required: false, zh: '减免方式' }, // 字典:coupon_discount_type
  32. discount_config: { type: Object, required: false, zh: '减免配置' }, //
  33. use_limit: { type: String, required: false, zh: '使用限制' }, // 字典:coupon_use_limit
  34. use_limit_config: { type: Object, required: false, zh: '使用配置' }, //
  35. get_limit: { type: String, required: false, zh: '领取限制' }, // 字典:coupon_get_limit
  36. get_limit_config: { type: Object, required: false, zh: '领取配置' }, //
  37. num: { type: Number, required: false, zh: '数量' }, //
  38. status: { type: String, required: false, zh: '使用状态' }, // 字典:use
  39. };
  40. const schema = new Schema(coupon, { toJSON: { getters: true, virtuals: true } });
  41. schema.index({ id: 1 });
  42. schema.index({ 'meta.createdAt': 1 });
  43. schema.index({ shop: 1 });
  44. schema.index({ name: 1 });
  45. schema.index({ expire_type: 1 });
  46. schema.index({ discount_type: 1 });
  47. schema.index({ use_limit: 1 });
  48. schema.index({ get_limit: 1 });
  49. schema.index({ status: 1 });
  50. schema.plugin(metaPlugin);
  51. module.exports = app => {
  52. const { mongoose } = app;
  53. return mongoose.model('Coupon', schema, 'coupon');
  54. };