@positivegrid/pg-mongoose-schema 27.8.4 → 28.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. package/dist/index.d.ts +5 -0
  2. package/dist/index.js +34 -0
  3. package/dist/index.js.map +1 -0
  4. package/dist/models/banks.d.ts +3 -0
  5. package/dist/models/banks.js +33 -0
  6. package/dist/models/banks.js.map +1 -0
  7. package/dist/models/device.d.ts +3 -0
  8. package/dist/models/device.js +48 -0
  9. package/dist/models/device.js.map +1 -0
  10. package/dist/models/featuredList.d.ts +3 -0
  11. package/dist/models/featuredList.js +70 -0
  12. package/dist/models/featuredList.js.map +1 -0
  13. package/dist/models/hardware.d.ts +3 -0
  14. package/dist/models/hardware.js +213 -0
  15. package/dist/models/hardware.js.map +1 -0
  16. package/dist/models/homeConfig.d.ts +3 -0
  17. package/dist/models/homeConfig.js +38 -0
  18. package/dist/models/homeConfig.js.map +1 -0
  19. package/dist/models/oauth.d.ts +3 -0
  20. package/dist/models/oauth.js +48 -0
  21. package/dist/models/oauth.js.map +1 -0
  22. package/dist/models/partner.d.ts +3 -0
  23. package/dist/models/partner.js +165 -0
  24. package/dist/models/partner.js.map +1 -0
  25. package/dist/models/payment.d.ts +3 -0
  26. package/dist/models/payment.js +859 -0
  27. package/dist/models/payment.js.map +1 -0
  28. package/dist/models/pgConfig.d.ts +3 -0
  29. package/dist/models/pgConfig.js +64 -0
  30. package/dist/models/pgConfig.js.map +1 -0
  31. package/dist/models/preset.d.ts +3 -0
  32. package/dist/models/preset.js +802 -0
  33. package/dist/models/preset.js.map +1 -0
  34. package/dist/models/promotion.d.ts +3 -0
  35. package/dist/models/promotion.js +585 -0
  36. package/dist/models/promotion.js.map +1 -0
  37. package/dist/models/redeem.d.ts +3 -0
  38. package/dist/models/redeem.js +26 -0
  39. package/dist/models/redeem.js.map +1 -0
  40. package/dist/models/toneTheme.d.ts +3 -0
  41. package/dist/models/toneTheme.js +29 -0
  42. package/dist/models/toneTheme.js.map +1 -0
  43. package/dist/models/toneThemeFeaturedList.d.ts +3 -0
  44. package/dist/models/toneThemeFeaturedList.js +18 -0
  45. package/dist/models/toneThemeFeaturedList.js.map +1 -0
  46. package/dist/models/user.d.ts +3 -0
  47. package/dist/models/user.js +565 -0
  48. package/dist/models/user.js.map +1 -0
  49. package/dist/models/userTrack.d.ts +3 -0
  50. package/dist/models/userTrack.js +82 -0
  51. package/dist/models/userTrack.js.map +1 -0
  52. package/dist/types/banks.types.d.ts +25 -0
  53. package/dist/types/banks.types.js +3 -0
  54. package/dist/types/banks.types.js.map +1 -0
  55. package/dist/types/device.types.d.ts +41 -0
  56. package/dist/types/device.types.js +3 -0
  57. package/dist/types/device.types.js.map +1 -0
  58. package/dist/types/featuredList.types.d.ts +32 -0
  59. package/dist/types/featuredList.types.js +3 -0
  60. package/dist/types/featuredList.types.js.map +1 -0
  61. package/dist/types/hardware.types.d.ts +123 -0
  62. package/dist/types/hardware.types.js +3 -0
  63. package/dist/types/hardware.types.js.map +1 -0
  64. package/dist/types/homeConfig.types.d.ts +24 -0
  65. package/dist/types/homeConfig.types.js +3 -0
  66. package/dist/types/homeConfig.types.js.map +1 -0
  67. package/dist/types/index.d.ts +17 -0
  68. package/dist/types/index.js +34 -0
  69. package/dist/types/index.js.map +1 -0
  70. package/dist/types/oauth.types.d.ts +38 -0
  71. package/dist/types/oauth.types.js +3 -0
  72. package/dist/types/oauth.types.js.map +1 -0
  73. package/dist/types/partner.types.d.ts +91 -0
  74. package/dist/types/partner.types.js +3 -0
  75. package/dist/types/partner.types.js.map +1 -0
  76. package/dist/types/payment.types.d.ts +304 -0
  77. package/dist/types/payment.types.js +3 -0
  78. package/dist/types/payment.types.js.map +1 -0
  79. package/dist/types/pgConfig.types.d.ts +35 -0
  80. package/dist/types/pgConfig.types.js +3 -0
  81. package/dist/types/pgConfig.types.js.map +1 -0
  82. package/dist/types/preset.types.d.ts +110 -0
  83. package/dist/types/preset.types.js +3 -0
  84. package/dist/types/preset.types.js.map +1 -0
  85. package/dist/types/promotion.types.d.ts +282 -0
  86. package/dist/types/promotion.types.js +3 -0
  87. package/dist/types/promotion.types.js.map +1 -0
  88. package/dist/types/redeem.types.d.ts +16 -0
  89. package/dist/types/redeem.types.js +3 -0
  90. package/dist/types/redeem.types.js.map +1 -0
  91. package/dist/types/toneTheme.types.d.ts +16 -0
  92. package/dist/types/toneTheme.types.js +3 -0
  93. package/dist/types/toneTheme.types.js.map +1 -0
  94. package/dist/types/toneThemeFeaturedList.types.d.ts +9 -0
  95. package/dist/types/toneThemeFeaturedList.types.js +3 -0
  96. package/dist/types/toneThemeFeaturedList.types.js.map +1 -0
  97. package/dist/types/user.types.d.ts +166 -0
  98. package/dist/types/user.types.js +6 -0
  99. package/dist/types/user.types.js.map +1 -0
  100. package/dist/types/userTrack.types.d.ts +39 -0
  101. package/dist/types/userTrack.types.js +12 -0
  102. package/dist/types/userTrack.types.js.map +1 -0
  103. package/package.json +38 -12
  104. package/index.js +0 -28
  105. package/models/banks.js +0 -42
  106. package/models/device.js +0 -51
  107. package/models/featuredList.js +0 -91
  108. package/models/hardware.js +0 -256
  109. package/models/homeConfig.js +0 -86
  110. package/models/oauth.js +0 -52
  111. package/models/partner.js +0 -265
  112. package/models/payment.js +0 -899
  113. package/models/pgConfig.js +0 -88
  114. package/models/preset.js +0 -845
  115. package/models/promotion.js +0 -590
  116. package/models/redeem.js +0 -26
  117. package/models/toneTheme.js +0 -78
  118. package/models/toneThemeFeaturedList.js +0 -49
  119. package/models/user.js +0 -639
  120. package/models/userTrack.js +0 -107
package/index.js DELETED
@@ -1,28 +0,0 @@
1
- 'use strict'
2
-
3
- const fs = require('fs')
4
- const path = require('path')
5
- const debug = require('debug')('model:init')
6
-
7
- /**
8
- * mongoose - mongoose instance
9
- * type - {account}
10
- */
11
- module.exports = function (mongoose, type) {
12
- debug('Loading type: %s', type)
13
- if (type === 'account') {
14
- require(path.join(__dirname, '/models/user.js'))(mongoose)
15
- require(path.join(__dirname, '/models/oauth.js'))(mongoose)
16
- require(path.join(__dirname, '/models/partner.js'))(mongoose)
17
- require(path.join(__dirname, '/models/payment.js'))(mongoose)
18
- require(path.join(__dirname, '/models/hardware.js'))(mongoose)
19
- } else if (type === 'hardware') {
20
- require(path.join(__dirname, '/models/hardware.js'))(mongoose)
21
- } else {
22
- fs.readdirSync(path.join(__dirname, '/models')).forEach(file => {
23
- if (file.match(/\.js/)) {
24
- require(path.join(__dirname, '/models/', file))(mongoose)
25
- }
26
- })
27
- }
28
- }
package/models/banks.js DELETED
@@ -1,42 +0,0 @@
1
- 'use strict'
2
-
3
- const debug = require('debug')('model:banks')
4
-
5
- module.exports = function (mongoose) {
6
- const Schema = mongoose.Schema
7
- const ObjectId = Schema.Types.ObjectId
8
-
9
- const BankListSchema = new Schema({
10
- name: { type: String, required: true },
11
- creator_id: { type: ObjectId, ref: 'User', required: true },
12
- description: { type: String },
13
- preset_for: { type: String, required: true },
14
- created_on: { type: Date, default: Date.now },
15
- updated_on: { type: Date, default: Date.now }
16
- }, { collection: 'bank_list' })
17
- BankListSchema.index({
18
- creator_id: 1,
19
- preset_for: 1
20
- })
21
- const BankPresetsSchema = new Schema({
22
- name: { type: String, index: true, required: true },
23
- creator_id: { type: ObjectId, ref: 'User', required: true },
24
- bank_id: { type: ObjectId, ref: 'BankList', required: true },
25
- status: { type: Number, default: 1, required: true }, // 1:active
26
- description: { type: String },
27
- preset_data: { type: Schema.Types.Mixed, required: true },
28
- preset_meta: { type: Schema.Types.Mixed },
29
- image_url: { type: String },
30
- thumb_url: { type: String },
31
- created_on: { type: Date, default: Date.now },
32
- updated_on: { type: Date, default: Date.now }
33
- }, { collection: 'bank_presets', toJSON: { virtuals: true }, toObject: { virtuals: true } })
34
- BankPresetsSchema.index({
35
- creator_id: 1,
36
- bank_id: 1,
37
- name: 1
38
- }, { unique: true })
39
-
40
- mongoose.model('BankPresets', BankPresetsSchema)
41
- mongoose.model('BankList', BankListSchema)
42
- }
package/models/device.js DELETED
@@ -1,51 +0,0 @@
1
- 'use strict'
2
-
3
- module.exports = function (mongoose) {
4
- const Schema = mongoose.Schema
5
- const ObjectId = Schema.Types.ObjectId
6
-
7
- var DeviceSchema = new Schema({
8
- user_id: { type: ObjectId, ref: 'User', required: true },
9
- device_udid: { type: String, required: true, unique: true },
10
- display_name: { type: String },
11
- mac_address: { type: String },
12
- machine_id: { type: String },
13
- platform: { type: String },
14
- architecture: { type: String },
15
- os_version: { type: String },
16
- model: { type: String },
17
- activate_random: { type: String },
18
- other_info: { type: String },
19
- created_on: { type: Date, default: Date.now }
20
- }, { collection: 'jamup_device' })
21
-
22
- // main_product follow the iap defined in Product schema:
23
- // extra_payment_fields.main_product
24
- const IapActivationSchema = new Schema({
25
- user_id: { type: ObjectId, ref: 'User', required: true },
26
- device_id: { type: ObjectId, ref: 'Device', required: true },
27
- main_product: { type: String, required: true },
28
- status: { type: Number, default: 1, required: true }, // 0:deactivate/1:activate
29
- created_on: { type: Date, default: Date.now },
30
- updated_on: { type: Date, default: Date.now }
31
- }, { collection: 'iap_activation' })
32
-
33
- var ActivationStatusSchema = new Schema({
34
- user_id: { type: ObjectId, ref: 'User', required: true },
35
- device_id: { type: ObjectId, ref: 'Device', required: true },
36
- license_id: { type: ObjectId, ref: 'License', required: true },
37
- status: { type: Number, required: true }, // 0: inactive 1:active
38
- created_on: { type: Date, default: Date.now },
39
- updated_on: { type: Date, default: Date.now }
40
- }, { collection: 'jamup_activationstatus' })
41
-
42
- DeviceSchema.static({
43
- getFeaturedPresetListByCondition: function (queryObj, cb) {
44
- this.find(queryObj).select('-is_shown -order').exec(cb)
45
- }
46
- })
47
-
48
- mongoose.model('Device', DeviceSchema)
49
- mongoose.model('ActivationStatus', ActivationStatusSchema)
50
- mongoose.model('IapActivation', IapActivationSchema)
51
- }
@@ -1,91 +0,0 @@
1
- 'use strict'
2
-
3
- const _ = require('lodash')
4
- const mongooseLeanVirtuals = require('mongoose-lean-virtuals');
5
-
6
- module.exports = function (mongoose) {
7
- const Schema = mongoose.Schema
8
- const ObjectId = Schema.Types.ObjectId
9
-
10
- const FeaturedListSchema = new Schema({
11
- title: { type: String, required: true },
12
- description: { type: String, default: null },
13
- image_url: { type: String, default: null },
14
- thumb_url: { type: String, default: null },
15
- embed_url: { type: String, default: null },
16
- bg_url: { type: String, default: null },
17
- order: { type: Number, default: 0 },
18
- type: { type: String, default: null },
19
- permission: { type: Schema.Types.Mixed, default: null }, // product_id/custom_metadata
20
- metadata: { type: Array, default: null },
21
- is_shown: { type: Boolean, default: false },
22
- list_for: { type: String, required: true, unique: true },
23
- created_on: { type: Date, default: Date.now },
24
- updated_on: { type: Date, default: Date.now }
25
- }, { collection: 'jamup_featuredpresetlist', toJSON: { virtuals: true }, toObject: { virtuals: true } })
26
-
27
- const FeaturedPresetSchema = new Schema({
28
- featured_list_id: { type: ObjectId, ref: 'FeaturedList', required: true },
29
- preset_id: { type: ObjectId, ref: 'Preset', required: true },
30
- order: { type: Number, default: 0, required: true },
31
- created_on: { type: Date, default: Date.now }
32
- }, { collection: 'jamup_featuredpreset' })
33
-
34
- FeaturedPresetSchema.index({
35
- featured_list_id: 1,
36
- preset_id: 1
37
- }, { unique: true })
38
-
39
- FeaturedListSchema.plugin(mongooseLeanVirtuals)
40
-
41
- FeaturedListSchema.static({
42
- getFeaturedPresetListByCondition: function (reqQuery) {
43
- const defaultQuery = {
44
- '$or': [
45
- {permission: { '$exists': false }},
46
- {permission: null }
47
- ],
48
- is_shown: true,
49
- list_for: 'jamup'
50
- }
51
-
52
- const queryObj = (_.has(reqQuery, 'list_for'))
53
- ? _.assign({}, defaultQuery, { list_for: reqQuery['list_for'] })
54
- : defaultQuery
55
-
56
- return this.find(queryObj)
57
- .sort({ order: 1 })
58
- .select('-is_shown')
59
- .lean({ virtuals: true })
60
- .exec()
61
- },
62
- getLimitedPresetLists: function (reqQuery) {
63
- const defaultQuery = {
64
- '$and': [
65
- {permission: { '$exists': true }},
66
- {permission: { '$ne': null }}
67
- ],
68
- is_shown: true,
69
- list_for: 'jamup'
70
- }
71
-
72
- const queryObj = (_.has(reqQuery, 'list_for'))
73
- ? _.assign({}, defaultQuery, { list_for: reqQuery['list_for'] })
74
- : defaultQuery
75
-
76
- return this.find(queryObj)
77
- .sort({ order: 1 })
78
- .select('-is_shown')
79
- .lean({ virtuals: true })
80
- .exec()
81
- }
82
- })
83
-
84
- FeaturedListSchema.virtual('id')
85
- .get(function () {
86
- return this._id.toHexString()
87
- })
88
-
89
- mongoose.model('FeaturedList', FeaturedListSchema)
90
- mongoose.model('FeaturedPreset', FeaturedPresetSchema)
91
- }
@@ -1,256 +0,0 @@
1
- 'use strict'
2
-
3
- const _ = require('lodash')
4
- const debug = require('debug')('model:promo')
5
-
6
- module.exports = function (mongoose) {
7
- const Schema = mongoose.Schema
8
- const ObjectId = Schema.Types.ObjectId
9
-
10
- const HardwareSeriesNumberSchema = new Schema({
11
- hw_sn: { type: String, required: true },
12
- channel: { type: String, default: null }, // Hardware sales channel: amazon
13
- status: { type: 'Number', default: 1 }, //1:normal/2:deactived/3:blacklist
14
- metadata: { type: Schema.Types.Mixed },
15
- created_on: { type: Date, default: Date.now }
16
- }, { collection: 'hardware_seriesnumber' })
17
-
18
- const HardwareActivationMetaSchema = new Schema({
19
- pattern: { type: Array, required: true },
20
- hw_sn_pattern: { type: Schema.Types.Mixed, required: true }, // pattern detail can jump to parseHardwareSeriesNumber
21
- hw_activate_license: [{ type: ObjectId, ref: 'Product' }],
22
- status: { type: Number, required: true, default: 1 }, // 1:enable 2:disable
23
- created_on: { type: Date, default: Date.now }
24
- }, { collection: 'hardware_activation_meta' })
25
-
26
- const HardwareActivationRecordSchema = new Schema({
27
- user_id: { type: ObjectId, ref: 'User', required: true },
28
- hw_sn_id: { type: ObjectId, ref: 'HardwareSeriesNumber', required: true },
29
- hw_meta_id: { type: ObjectId, ref: 'HardwareActivationMeta', default: null },
30
- hw_partner_id: { type: ObjectId, ref: 'PartnerCoupon', default: null },
31
- activate_license: [{ type: ObjectId, ref: 'License' }],
32
- status: { type: Number, required: true, default: 1 }, // 1:activate 2:deactivate
33
- activate_on: { type: Date, default: Date.now }
34
- }, { collection: 'hardware_activation_record' })
35
-
36
- const HardwareActivationConflictSchema = new Schema({
37
- user_id: { type: ObjectId, ref: 'User', required: true },
38
- hw_sn_id: { type: ObjectId, ref: 'HardwareSeriesNumber', required: true },
39
- created_on: { type: Date, default: Date.now }
40
- }, { collection: 'hardware_activation_conflict' })
41
-
42
- const PartnerCouponSchema = new Schema({
43
- partner: { type: String, required: true },
44
- code: { type: String, required: true },
45
- status: { type: Number, default: 1, required: true },
46
- hw_sn_id: { type: ObjectId, ref: 'HardwareSeriesNumber' },
47
- created_on: { type: Date, default: Date.now }
48
- }, { collection: 'partner_coupon' })
49
-
50
- const WarehouseInventorySchema = new Schema({
51
- warehouse: { type: String, required: true },
52
- country: [{ type: String }],
53
- status: { type: Number, default: 1, required: true },
54
- items: [{
55
- sku: { type: String, required: true },
56
- type: { type: String, required: true },
57
- total: { type: Number, required: true },
58
- available: { type: Number, required: true },
59
- transit: { type: Number, required: true },
60
- lock: { type: Number, required: true }
61
- }],
62
- created_on: { type: Date, default: Date.now }
63
- }, { collection: 'warehouse_inventory' })
64
- WarehouseInventorySchema.index({ warehouse: 1 }, { unique: true })
65
- WarehouseInventorySchema.index({ country: 1 })
66
-
67
- const ItemInventoryHistorySchema = new Schema({
68
- warehouse: { type: String, required: true },
69
- sku: { type: String, required: true },
70
- total: { type: Number, required: true },
71
- available: { type: Number, required: true },
72
- transit: { type: Number, required: true },
73
- lock: { type: Number, required: true },
74
- created_on: { type: Date, default: Date.now }
75
- }, { collection: 'item_inventory_history' })
76
- ItemInventoryHistorySchema.index({ warehouse: 1, sku: 1 })
77
-
78
- const CountryHardwareSkuSchema = new Schema({
79
- country: [{ type: String }],
80
- items: [{
81
- name: { type: String },
82
- hw_sku: [{ type: String }]
83
- }],
84
- level: [{
85
- level: { type: Number },
86
- min: { type: Number },
87
- max: { type: Number },
88
- days: { type: String }
89
- }],
90
- sale_threshold: { type: Number },
91
- sale_region: { type: String },
92
- sale_overwrite: [{
93
- level: { type: Number },
94
- days: { type: String }
95
- }],
96
- not_sold: [{ type: String }],
97
- not_sold_threshold: { type: Number },
98
- express_ship_days: { type: String },
99
- status: { type: Number, default: 1 }, //1:valid/2:preorder
100
- created_on: { type: Date, default: Date.now }
101
- }, { collection: 'country_hardaware_sku' })
102
-
103
- function _identifyHardwareByModel(model) {
104
- switch (model) {
105
- case 'G1':
106
- return 'head'
107
- case 'G2':
108
- return 'rack'
109
- case 'G3':
110
- return 'mini'
111
- case 'S':
112
- return 'spark'
113
- default:
114
- return false
115
- }
116
- }
117
-
118
- function _parseHardwareSerialNumber(hwSn) {
119
- if (!_.isString(hwSn)) {
120
- throw Error(`Invalid hardware series number format: ${hwSn}`)
121
- }
122
-
123
- // Separate Spark with different Serial Number format
124
- // old: https://docs.google.com/spreadsheets/d/1JGUigUU4UhY4ZWUDEhzQCDlKOd7Z5nHfHbFLw8riCsM/edit#gid=1816344881
125
- // new: https://docs.google.com/spreadsheets/d/1AZhKe2_M6kJ3lGqEUEWCN24ziOnW5gmV-DrV_mV2GEY/edit#gid=432186548
126
- if (/^S/.test(hwSn)) {
127
- const hwModel = hwSn.slice(0, 1)
128
- const hwWattage = hwSn.slice(1, 4)
129
- const hwProductType = hwSn.slice(4, 5)
130
- const hwVersion = hwSn.slice(5, 6)
131
- const hwYear = hwSn.slice(6, 7)
132
- const hwMonth = hwSn.slice(7, 8)
133
- const hwPattern = [
134
- `hwModel:${hwModel}`,
135
- `hwWattage:${hwWattage}`,
136
- `hwProductType:${hwProductType}`,
137
- `hwVersion:${hwVersion}`,
138
- `hwYear:${hwYear}`,
139
- `hwMonth:${hwMonth}`
140
- ]
141
-
142
- const hwName = _identifyHardwareByModel(hwModel)
143
- if (hwName === false) {
144
- throw Error(`Cannot identify hardware model: ${hwModel}`)
145
- }
146
-
147
- return {
148
- hwName,
149
- hwModel,
150
- hwWattage,
151
- hwProductType,
152
- hwVersion,
153
- hwYear,
154
- hwMonth,
155
- hwPattern
156
- }
157
- } else {
158
- const hwModel = hwSn.slice(0, 2)
159
- const hwWattage = hwSn.slice(2, 4)
160
- const hwVersion = hwSn.slice(4, 7)
161
- const hwProductionPhase = hwSn.slice(7, 9)
162
- const hwName = _identifyHardwareByModel(hwModel)
163
- const hwPattern = [
164
- `hwModel:${hwModel}`,
165
- `hwWattage:${hwWattage}`,
166
- `hwVersion:${hwVersion}`,
167
- `hwProductionPhase:${hwProductionPhase}`
168
- ]
169
-
170
- if (hwName === false) {
171
- throw Error(`Cannot identify hardware model: ${hwModel}`)
172
- }
173
-
174
- return {
175
- hwModel,
176
- hwWattage,
177
- hwVersion,
178
- hwProductionPhase,
179
- hwName,
180
- hwPattern
181
- }
182
- }
183
- }
184
-
185
- HardwareSeriesNumberSchema.static({
186
- // doc: https://docs.google.com/spreadsheets/d/1JGUigUU4UhY4ZWUDEhzQCDlKOd7Z5nHfHbFLw8riCsM/edit#gid=1816344881
187
- parseHardwareSeriesNumber: function (hwSn) {
188
- return new Promise((resolve, reject) => {
189
- try {
190
- const ret = _parseHardwareSerialNumber(hwSn)
191
- return resolve(ret)
192
- } catch (e) {
193
- return reject(e)
194
- }
195
- })
196
- },
197
- parseHardwareSerialNumberNoPromise: function (hwSn) {
198
- try {
199
- return _parseHardwareSerialNumber(hwSn)
200
- } catch (e) {
201
- return e.message
202
- }
203
- }
204
- })
205
-
206
- HardwareActivationMetaSchema.static({
207
- findMostMatchingMeta: async function (snPatternArr, opts = {}) {
208
- try {
209
- let allMatch = await this.find({ pattern: { '$in': snPatternArr } }).sort({ created_on: -1 }).lean().exec()
210
-
211
- if (!allMatch || allMatch.length <= 0) {
212
- if (opts.allowEmpty && opts.allowEmpty === true) {
213
- return null
214
- } else {
215
- throw new Error('Cannot find any activation meta match the SN pattern')
216
- }
217
- }
218
-
219
- let mostMatchingMeta = {}
220
- let mostMatchingNumber = 0
221
- allMatch.forEach(metaItem => {
222
- if (_.isArray(metaItem.pattern) && metaItem.pattern.length > 0) {
223
- let matchItem = _.intersection(metaItem.pattern, snPatternArr)
224
- if ((matchItem.length === metaItem.pattern.length) &&
225
- (matchItem.length > mostMatchingNumber)) {
226
- mostMatchingMeta = metaItem
227
- mostMatchingNumber = matchItem.length
228
- }
229
- }
230
- })
231
-
232
- if (_.isEmpty(mostMatchingMeta) || mostMatchingNumber === 0) {
233
- if (opts.allowEmpty && opts.allowEmpty === true) {
234
- return null
235
- } else {
236
- throw new Error('Cannot find any activation meta match the SN pattern')
237
- }
238
- } else {
239
- return mostMatchingMeta
240
- }
241
- } catch (err) {
242
- debug('ERROR:findMostMatchingMeta %o', err)
243
- throw err
244
- }
245
- }
246
- })
247
-
248
- mongoose.model('HardwareActivationRecord', HardwareActivationRecordSchema)
249
- mongoose.model('HardwareActivationMeta', HardwareActivationMetaSchema)
250
- mongoose.model('HardwareSeriesNumber', HardwareSeriesNumberSchema)
251
- mongoose.model('HardwareActivationConflict', HardwareActivationConflictSchema)
252
- mongoose.model('PartnerCoupon', PartnerCouponSchema)
253
- mongoose.model('WarehouseInventory', WarehouseInventorySchema)
254
- mongoose.model('ItemInventoryHistory', ItemInventoryHistorySchema)
255
- mongoose.model('CountryHardwareSku', CountryHardwareSkuSchema)
256
- }
@@ -1,86 +0,0 @@
1
- 'use strict'
2
-
3
- module.exports = function (mongoose) {
4
- const Schema = mongoose.Schema
5
-
6
- const DataSourceSchema = new Schema({
7
- type: {
8
- type: String,
9
- enum: ['tone_theme_query', 'tone_theme_ids', 'tone_theme_id'],
10
- required: true
11
- },
12
- // 單一 theme ID(當 type = 'tone_theme_id')
13
- tone_theme_id: {
14
- type: String,
15
- default: null
16
- },
17
- // 動態查詢(當 type = 'tone_theme_query')
18
- query: {
19
- type: Schema.Types.Mixed,
20
- default: null
21
- },
22
- // 多個 theme IDs(當 type = 'tone_theme_ids')
23
- ids: [{
24
- type: String
25
- }],
26
- limit: {
27
- type: Number,
28
- default: 12
29
- }
30
- }, { _id: false })
31
-
32
- const SectionSchema = new Schema({
33
- section_type: {
34
- type: String,
35
- enum: ['banner', 'theme_list'],
36
- required: true
37
- },
38
- title: {
39
- type: String,
40
- default: null
41
- },
42
- order: {
43
- type: Number,
44
- required: true
45
- },
46
- data_source: {
47
- type: DataSourceSchema,
48
- required: true
49
- }
50
- }, { _id: false })
51
-
52
- const HomeConfigSchema = new Schema({
53
- config_for: {
54
- type: String,
55
- required: true
56
- },
57
- locale: {
58
- type: String,
59
- default: 'en'
60
- },
61
- sections: [SectionSchema],
62
- is_active: {
63
- type: Boolean,
64
- default: false
65
- },
66
- created_on: {
67
- type: Date,
68
- default: Date.now
69
- },
70
- updated_on: {
71
- type: Date,
72
- default: Date.now
73
- }
74
- }, {
75
- collection: 'home_config'
76
- })
77
-
78
- // 索引
79
- HomeConfigSchema.index({
80
- config_for: 1,
81
- locale: 1,
82
- is_active: 1
83
- })
84
-
85
- mongoose.model('HomeConfig', HomeConfigSchema)
86
- }
package/models/oauth.js DELETED
@@ -1,52 +0,0 @@
1
- 'use strict'
2
-
3
- module.exports = function (mongoose) {
4
- const Schema = mongoose.Schema
5
- const ObjectId = Schema.Types.ObjectId
6
- const deepPopulate = require('mongoose-deep-populate')(mongoose)
7
-
8
- const clientSchema = new Schema({
9
- name: { type: String, required: true },
10
- clientId: { type: String, required: true },
11
- clientSecret: { type: String, required: true }
12
- }, { collection: 'auth_clients', toJSON: { virtuals: true }, toObject: { virtuals: true } })
13
-
14
- // auth_ authorizationCodes
15
- const AuthorizationCodeSchema = new Schema({
16
- code: { type: String, required: true },
17
- clientId: { type: ObjectId, ref: 'OathClient', required: true },
18
- redirectURI: { type: String, required: true },
19
- userId: { type: ObjectId, ref: 'User', required: true },
20
- scopes: [{ type: String, required: true }],
21
- expiresAt: { type: Date, required: true },
22
- codeChallenge: { type: String },
23
- codeChallengeMethod: { type: String, default: 'S256' },
24
- date: { type: Date, default: Date.now }
25
- }, { collection: 'auth_authorizationCodes', toJSON: { virtuals: true }, toObject: { virtuals: true } })
26
- AuthorizationCodeSchema.plugin(deepPopulate, {})
27
-
28
- // auth_accessTokens
29
- const AccessTokenSchema = new Schema({
30
- token: { type: String, required: true },
31
- expirationDate: { type: Date, required: true },
32
- userId: { type: ObjectId, ref: 'User', required: true },
33
- clientId: { type: ObjectId, ref: 'OathClient', required: true },
34
- scopes: [{ type: String, required: true }],
35
- date: { type: Date, default: Date.now }
36
- }, { collection: 'auth_accessTokens', toJSON: { virtuals: true }, toObject: { virtuals: true } })
37
-
38
- // refreshTokens
39
- const RefreshTokenSchema = new Schema({
40
- refreshToken: { type: String, required: true },
41
- clientId: { type: ObjectId, ref: 'OathClient', required: true },
42
- expirationDate: { type: Date, required: true },
43
- userId: { type: ObjectId, ref: 'User', required: true },
44
- scopes: [{ type: String, required: true }],
45
- date: { type: Date, default: Date.now }
46
- }, { collection: 'auth_refreshTokens', toJSON: { virtuals: true }, toObject: { virtuals: true } })
47
-
48
- mongoose.model('OauthClient', clientSchema)
49
- mongoose.model('RefreshTokens', RefreshTokenSchema)
50
- mongoose.model('AccessToken', AccessTokenSchema)
51
- mongoose.model('AuthorizationCode', AuthorizationCodeSchema)
52
- }