Setting.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. const mongoose = require('mongoose');
  2. const { Schema } = mongoose;
  3. const systemSettingSchema = new Schema({
  4. _id: {
  5. type: String,
  6. default: 'system' // 固定 ID
  7. },
  8. innerDefaultAmount: {
  9. type: Number,
  10. required: true,
  11. default: 10000
  12. },
  13. minProfitAmount: {
  14. type: Number,
  15. required: true,
  16. default: 0
  17. },
  18. innerRebateRatio: {
  19. type: Number,
  20. required: true,
  21. default: 0
  22. },
  23. obRebateRatio: {
  24. type: Number,
  25. required: true,
  26. default: 0
  27. },
  28. hgRebateRatio: {
  29. type: Number,
  30. required: true,
  31. default: 0
  32. },
  33. runWorkerEnabled: {
  34. type: Boolean,
  35. required: true,
  36. default: false
  37. }
  38. }, {
  39. toJSON: {
  40. transform(doc, ret) {
  41. delete ret._id;
  42. delete ret.__v;
  43. }
  44. },
  45. toObject: {
  46. transform(doc, ret) {
  47. delete ret._id;
  48. delete ret.__v;
  49. }
  50. }
  51. });
  52. const Setting = mongoose.model('SystemSetting', systemSettingSchema);
  53. const CALLBACKS = {
  54. update: null,
  55. };
  56. const onUpdate = (callback) => {
  57. CALLBACKS.update = callback;
  58. }
  59. const get = async () => {
  60. return await Setting.findById('system');
  61. }
  62. const update = async (fields) => {
  63. CALLBACKS.update?.(fields);
  64. return await Setting.findByIdAndUpdate(
  65. 'system',
  66. { $set: fields },
  67. { upsert: true, new: true }
  68. );
  69. }
  70. const init = async (fields = {}) => {
  71. const systemSetting = await Setting.findById('system');
  72. if (systemSetting) {
  73. return;
  74. }
  75. const setting = new Setting({
  76. _id: 'system',
  77. ...fields,
  78. });
  79. return setting.save();
  80. }
  81. module.exports = { get, update, init, onUpdate };