@labdigital/commercetools-mock 1.4.0 → 1.6.0
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.
- package/README.md +5 -4
- package/dist/index.cjs +116 -18
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +30 -7
- package/dist/index.d.ts +30 -7
- package/dist/index.js +116 -18
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
- package/src/constants.ts +2 -2
- package/src/ctMock.ts +176 -176
- package/src/exceptions.ts +10 -10
- package/src/helpers.ts +26 -26
- package/src/index.test.ts +173 -173
- package/src/index.ts +3 -3
- package/src/lib/expandParser.ts +19 -19
- package/src/lib/haversine.test.ts +13 -13
- package/src/lib/haversine.ts +14 -14
- package/src/lib/masking.ts +15 -15
- package/src/lib/parser.ts +2 -2
- package/src/lib/predicateParser.test.ts +204 -204
- package/src/lib/predicateParser.ts +398 -398
- package/src/lib/projectionSearchFilter.test.ts +168 -168
- package/src/lib/projectionSearchFilter.ts +272 -269
- package/src/lib/proxy.ts +8 -8
- package/src/oauth/errors.ts +4 -4
- package/src/oauth/helpers.ts +6 -6
- package/src/oauth/server.ts +103 -101
- package/src/oauth/store.ts +27 -27
- package/src/priceSelector.test.ts +68 -68
- package/src/priceSelector.ts +70 -70
- package/src/product-projection-search.ts +296 -296
- package/src/projectAPI.test.ts +3 -3
- package/src/projectAPI.ts +46 -46
- package/src/repositories/abstract.ts +190 -190
- package/src/repositories/associate-role.ts +10 -7
- package/src/repositories/attribute-group.ts +63 -8
- package/src/repositories/business-unit.ts +10 -7
- package/src/repositories/cart-discount.ts +134 -134
- package/src/repositories/cart.ts +517 -514
- package/src/repositories/category.ts +170 -167
- package/src/repositories/channel.ts +114 -111
- package/src/repositories/custom-object.ts +66 -63
- package/src/repositories/customer-group.ts +72 -69
- package/src/repositories/customer.ts +93 -79
- package/src/repositories/discount-code.ts +171 -168
- package/src/repositories/errors.ts +15 -15
- package/src/repositories/extension.ts +79 -76
- package/src/repositories/helpers.ts +180 -180
- package/src/repositories/index.ts +39 -39
- package/src/repositories/inventory-entry.ts +98 -95
- package/src/repositories/my-order.ts +11 -11
- package/src/repositories/order-edit.ts +29 -29
- package/src/repositories/order.test.ts +191 -191
- package/src/repositories/order.ts +393 -389
- package/src/repositories/payment.ts +155 -155
- package/src/repositories/product-discount.ts +149 -149
- package/src/repositories/product-projection.ts +116 -52
- package/src/repositories/product-selection.ts +31 -31
- package/src/repositories/product-type.ts +156 -156
- package/src/repositories/product.ts +600 -597
- package/src/repositories/project.ts +136 -135
- package/src/repositories/quote-request.ts +19 -19
- package/src/repositories/quote.ts +19 -19
- package/src/repositories/review.ts +24 -24
- package/src/repositories/shipping-method.ts +217 -217
- package/src/repositories/shopping-list.ts +49 -49
- package/src/repositories/staged-quote.ts +20 -20
- package/src/repositories/standalone-price.ts +72 -61
- package/src/repositories/state.ts +84 -84
- package/src/repositories/store.ts +114 -114
- package/src/repositories/subscription.ts +40 -40
- package/src/repositories/tax-category.ts +98 -98
- package/src/repositories/type.ts +157 -157
- package/src/repositories/zone.ts +71 -71
- package/src/server.ts +2 -2
- package/src/services/abstract.ts +173 -173
- package/src/services/attribute-group.ts +16 -0
- package/src/services/cart-discount.ts +8 -8
- package/src/services/cart.test.ts +409 -409
- package/src/services/cart.ts +50 -50
- package/src/services/category.test.ts +25 -25
- package/src/services/category.ts +8 -8
- package/src/services/channel.ts +8 -8
- package/src/services/custom-object.test.ts +184 -184
- package/src/services/custom-object.ts +48 -48
- package/src/services/customer-group.ts +8 -8
- package/src/services/customer.test.ts +151 -129
- package/src/services/customer.ts +27 -27
- package/src/services/discount-code.ts +8 -8
- package/src/services/extension.ts +8 -8
- package/src/services/index.ts +52 -44
- package/src/services/inventory-entry.test.ts +162 -162
- package/src/services/inventory-entry.ts +8 -8
- package/src/services/my-cart.test.ts +78 -78
- package/src/services/my-cart.ts +28 -28
- package/src/services/my-customer.test.ts +44 -44
- package/src/services/my-customer.ts +53 -53
- package/src/services/my-order.ts +20 -20
- package/src/services/my-payment.test.ts +65 -65
- package/src/services/my-payment.ts +8 -8
- package/src/services/order.test.ts +527 -527
- package/src/services/order.ts +31 -31
- package/src/services/payment.test.ts +65 -65
- package/src/services/payment.ts +8 -8
- package/src/services/product-discount.ts +8 -8
- package/src/services/product-projection.test.ts +492 -428
- package/src/services/product-projection.ts +32 -18
- package/src/services/product-type.test.ts +56 -56
- package/src/services/product-type.ts +8 -8
- package/src/services/product.test.ts +510 -510
- package/src/services/product.ts +8 -8
- package/src/services/project.ts +34 -34
- package/src/services/shipping-method.test.ts +81 -81
- package/src/services/shipping-method.ts +12 -12
- package/src/services/shopping-list.ts +8 -8
- package/src/services/standalone-price.test.ts +256 -256
- package/src/services/standalone-price.ts +8 -8
- package/src/services/state.test.ts +42 -42
- package/src/services/state.ts +8 -8
- package/src/services/store.test.ts +57 -57
- package/src/services/store.ts +8 -8
- package/src/services/subscription.ts +8 -8
- package/src/services/tax-category.test.ts +61 -61
- package/src/services/tax-category.ts +8 -8
- package/src/services/type.ts +8 -8
- package/src/services/zone.ts +8 -8
- package/src/storage/abstract.ts +58 -58
- package/src/storage/in-memory.ts +419 -419
- package/src/types.ts +82 -82
|
@@ -5,63 +5,63 @@ import { getRepositoryContext } from '../repositories/helpers.js'
|
|
|
5
5
|
import AbstractService from './abstract.js'
|
|
6
6
|
|
|
7
7
|
export class CustomObjectService extends AbstractService {
|
|
8
|
-
|
|
8
|
+
public repository: CustomObjectRepository
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
10
|
+
constructor(parent: Router, repository: CustomObjectRepository) {
|
|
11
|
+
super(parent)
|
|
12
|
+
this.repository = repository
|
|
13
|
+
}
|
|
14
14
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
getBasePath() {
|
|
16
|
+
return 'custom-objects'
|
|
17
|
+
}
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
19
|
+
extraRoutes(router: Router) {
|
|
20
|
+
router.get('/:container/:key', this.getWithContainerAndKey.bind(this))
|
|
21
|
+
router.post('/:container/:key', this.createWithContainerAndKey.bind(this))
|
|
22
|
+
router.delete('/:container/:key', this.deleteWithContainerAndKey.bind(this))
|
|
23
|
+
}
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
25
|
+
getWithContainerAndKey(request: Request, response: Response) {
|
|
26
|
+
const result = this.repository.getWithContainerAndKey(
|
|
27
|
+
getRepositoryContext(request),
|
|
28
|
+
request.params.container,
|
|
29
|
+
request.params.key
|
|
30
|
+
)
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
if (!result) {
|
|
33
|
+
return response.status(404).send('Not Found')
|
|
34
|
+
}
|
|
35
|
+
return response.status(200).send(result)
|
|
36
|
+
}
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
38
|
+
createWithContainerAndKey(request: Request, response: Response) {
|
|
39
|
+
const draft: CustomObjectDraft = {
|
|
40
|
+
...request.body,
|
|
41
|
+
key: request.params.key,
|
|
42
|
+
container: request.params.container,
|
|
43
|
+
}
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
const result = this.repository.create(getRepositoryContext(request), draft)
|
|
46
|
+
return response.status(200).send(result)
|
|
47
|
+
}
|
|
48
48
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
deleteWithContainerAndKey(request: Request, response: Response) {
|
|
50
|
+
const current = this.repository.getWithContainerAndKey(
|
|
51
|
+
getRepositoryContext(request),
|
|
52
|
+
request.params.container,
|
|
53
|
+
request.params.key
|
|
54
|
+
)
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
56
|
+
if (!current) {
|
|
57
|
+
return response.status(404).send('Not Found')
|
|
58
|
+
}
|
|
59
59
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
const result = this.repository.delete(
|
|
61
|
+
getRepositoryContext(request),
|
|
62
|
+
current.id
|
|
63
|
+
)
|
|
64
64
|
|
|
65
|
-
|
|
66
|
-
|
|
65
|
+
return response.status(200).send(result)
|
|
66
|
+
}
|
|
67
67
|
}
|
|
@@ -3,14 +3,14 @@ import { CustomerGroupRepository } from '../repositories/customer-group.js'
|
|
|
3
3
|
import AbstractService from './abstract.js'
|
|
4
4
|
|
|
5
5
|
export class CustomerGroupService extends AbstractService {
|
|
6
|
-
|
|
6
|
+
public repository: CustomerGroupRepository
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
constructor(parent: Router, repository: CustomerGroupRepository) {
|
|
9
|
+
super(parent)
|
|
10
|
+
this.repository = repository
|
|
11
|
+
}
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
getBasePath() {
|
|
14
|
+
return 'customer-groups'
|
|
15
|
+
}
|
|
16
16
|
}
|
|
@@ -5,133 +5,155 @@ import { afterEach, beforeEach, describe, expect, test } from 'vitest'
|
|
|
5
5
|
import { CommercetoolsMock, getBaseResourceProperties } from '../index.js'
|
|
6
6
|
|
|
7
7
|
describe('Customer Update Actions', () => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
8
|
+
const ctMock = new CommercetoolsMock()
|
|
9
|
+
let customer: Customer | undefined
|
|
10
|
+
|
|
11
|
+
beforeEach(async () => {
|
|
12
|
+
customer = {
|
|
13
|
+
...getBaseResourceProperties(),
|
|
14
|
+
id: 'customer-uuid',
|
|
15
|
+
email: 'user@example.com',
|
|
16
|
+
password: 'supersecret',
|
|
17
|
+
addresses: [],
|
|
18
|
+
isEmailVerified: true,
|
|
19
|
+
authenticationMode: 'Password', //default in Commercetools
|
|
20
|
+
version: 1,
|
|
21
|
+
}
|
|
22
|
+
ctMock.project('dummy').add('customer', customer)
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
afterEach(() => {
|
|
26
|
+
ctMock.clear()
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
test('changeEmail', async () => {
|
|
30
|
+
assert(customer, 'customer not created')
|
|
31
|
+
|
|
32
|
+
const response = await supertest(ctMock.app)
|
|
33
|
+
.post(`/dummy/customers/${customer.id}`)
|
|
34
|
+
.send({
|
|
35
|
+
version: 1,
|
|
36
|
+
actions: [{ action: 'changeEmail', email: 'new@example.com' }],
|
|
37
|
+
})
|
|
38
|
+
expect(response.status).toBe(200)
|
|
39
|
+
expect(response.body.version).toBe(2)
|
|
40
|
+
expect(response.body.email).toBe('new@example.com')
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
test('setAuthenticationMode to an invalid mode', async () => {
|
|
44
|
+
assert(customer, 'customer not created')
|
|
45
|
+
|
|
46
|
+
const response = await supertest(ctMock.app)
|
|
47
|
+
.post(`/dummy/customers/${customer.id}`)
|
|
48
|
+
.send({
|
|
49
|
+
version: 1,
|
|
50
|
+
actions: [{ action: 'setAuthenticationMode', authMode: 'invalid' }],
|
|
51
|
+
})
|
|
52
|
+
expect(response.status).toBe(400)
|
|
53
|
+
expect(response.body.message).toBe(
|
|
54
|
+
'Request body does not contain valid JSON.'
|
|
55
|
+
)
|
|
56
|
+
expect(response.body.errors[0].code).toBe('InvalidJsonInput')
|
|
57
|
+
expect(response.body.errors[0].detailedErrorMessage).toBe(
|
|
58
|
+
"actions -> authMode: Invalid enum value: 'invalid'. Expected one of: 'Password','ExternalAuth'"
|
|
59
|
+
)
|
|
60
|
+
})
|
|
61
|
+
|
|
62
|
+
test('setAuthenticationMode to ExternalAuth', async () => {
|
|
63
|
+
assert(customer, 'customer not created')
|
|
64
|
+
|
|
65
|
+
const response = await supertest(ctMock.app)
|
|
66
|
+
.post(`/dummy/customers/${customer.id}`)
|
|
67
|
+
.send({
|
|
68
|
+
version: 1,
|
|
69
|
+
actions: [
|
|
70
|
+
{ action: 'setAuthenticationMode', authMode: 'ExternalAuth' },
|
|
71
|
+
],
|
|
72
|
+
})
|
|
73
|
+
expect(response.status).toBe(200)
|
|
74
|
+
expect(response.body.version).toBe(2)
|
|
75
|
+
expect(response.body.authenticationMode).toBe('ExternalAuth')
|
|
76
|
+
expect(response.body.password).toBe(undefined)
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
test('setAuthenticationMode error when setting current authMode', async () => {
|
|
80
|
+
assert(customer, 'customer not created')
|
|
81
|
+
assert(
|
|
82
|
+
customer.authenticationMode == 'Password',
|
|
83
|
+
'customer not in default state'
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
const response = await supertest(ctMock.app)
|
|
87
|
+
.post(`/dummy/customers/${customer.id}`)
|
|
88
|
+
.send({
|
|
89
|
+
version: 1,
|
|
90
|
+
actions: [
|
|
91
|
+
{
|
|
92
|
+
action: 'setAuthenticationMode',
|
|
93
|
+
authMode: 'Password',
|
|
94
|
+
password: 'newpass',
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
})
|
|
98
|
+
expect(response.status).toBe(400)
|
|
99
|
+
expect(response.body.message).toBe(
|
|
100
|
+
"The customer is already using the 'Password' authentication mode."
|
|
101
|
+
)
|
|
102
|
+
})
|
|
103
|
+
|
|
104
|
+
test('setAuthenticationMode to Password', async () => {
|
|
105
|
+
assert(customer, 'customer not created')
|
|
106
|
+
|
|
107
|
+
//change *away from* Password authMode (to be able to test changing *to* Password authMode)
|
|
108
|
+
await supertest(ctMock.app)
|
|
109
|
+
.post(`/dummy/customers/${customer.id}`)
|
|
110
|
+
.send({
|
|
111
|
+
version: 1,
|
|
112
|
+
actions: [
|
|
113
|
+
{ action: 'setAuthenticationMode', authMode: 'ExternalAuth' },
|
|
114
|
+
],
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
//change to Password authMode
|
|
118
|
+
const response = await supertest(ctMock.app)
|
|
119
|
+
.post(`/dummy/customers/${customer.id}`)
|
|
120
|
+
.send({
|
|
121
|
+
version: 2,
|
|
122
|
+
actions: [
|
|
123
|
+
{
|
|
124
|
+
action: 'setAuthenticationMode',
|
|
125
|
+
authMode: 'Password',
|
|
126
|
+
password: 'newpass',
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
})
|
|
130
|
+
expect(response.status).toBe(200)
|
|
131
|
+
expect(response.body.version).toBe(3)
|
|
132
|
+
expect(response.body.authenticationMode).toBe('Password')
|
|
133
|
+
expect(response.body.password).toBe(
|
|
134
|
+
Buffer.from('newpass').toString('base64')
|
|
135
|
+
)
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
test('setCustomField', async () => {
|
|
139
|
+
assert(customer, 'customer not created')
|
|
140
|
+
|
|
141
|
+
customer = {
|
|
142
|
+
...customer,
|
|
143
|
+
custom: { type: { typeId: 'type', id: '' }, fields: {} },
|
|
144
|
+
}
|
|
145
|
+
ctMock.project('dummy').add('customer', customer)
|
|
146
|
+
|
|
147
|
+
const response = await supertest(ctMock.app)
|
|
148
|
+
.post(`/dummy/customers/${customer.id}`)
|
|
149
|
+
.send({
|
|
150
|
+
version: 1,
|
|
151
|
+
actions: [
|
|
152
|
+
{ action: 'setCustomField', name: 'isValidCouponCode', value: false },
|
|
153
|
+
],
|
|
154
|
+
})
|
|
155
|
+
expect(response.status).toBe(200)
|
|
156
|
+
expect(response.body.version).toBe(2)
|
|
157
|
+
expect(response.body.custom.fields.isValidCouponCode).toBe(false)
|
|
158
|
+
})
|
|
137
159
|
})
|
package/src/services/customer.ts
CHANGED
|
@@ -6,35 +6,35 @@ import { getRepositoryContext } from '../repositories/helpers.js'
|
|
|
6
6
|
import AbstractService from './abstract.js'
|
|
7
7
|
|
|
8
8
|
export class CustomerService extends AbstractService {
|
|
9
|
-
|
|
9
|
+
public repository: CustomerRepository
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
constructor(parent: Router, repository: CustomerRepository) {
|
|
12
|
+
super(parent)
|
|
13
|
+
this.repository = repository
|
|
14
|
+
}
|
|
15
15
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
getBasePath() {
|
|
17
|
+
return 'customers'
|
|
18
|
+
}
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
20
|
+
extraRoutes(parent: Router) {
|
|
21
|
+
parent.post('/password-token', (request, response) => {
|
|
22
|
+
const customer = this.repository.query(getRepositoryContext(request), {
|
|
23
|
+
where: [`email="${request.body.email}"`],
|
|
24
|
+
})
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
const ttlMinutes: number = request.params.ttlMinutes
|
|
27
|
+
? // @ts-ignore
|
|
28
|
+
+request.params.ttlMinutes
|
|
29
|
+
: 34560
|
|
30
|
+
const { version, ...rest } = getBaseResourceProperties()
|
|
31
31
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
return response.status(200).send({
|
|
33
|
+
...rest,
|
|
34
|
+
customerId: customer.results[0].id,
|
|
35
|
+
expiresAt: new Date(Date.now() + ttlMinutes * 60).toISOString(),
|
|
36
|
+
value: uuidv4(),
|
|
37
|
+
})
|
|
38
|
+
})
|
|
39
|
+
}
|
|
40
40
|
}
|
|
@@ -3,14 +3,14 @@ import { DiscountCodeRepository } from '../repositories/discount-code.js'
|
|
|
3
3
|
import AbstractService from './abstract.js'
|
|
4
4
|
|
|
5
5
|
export class DiscountCodeService extends AbstractService {
|
|
6
|
-
|
|
6
|
+
public repository: DiscountCodeRepository
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
constructor(parent: Router, repository: DiscountCodeRepository) {
|
|
9
|
+
super(parent)
|
|
10
|
+
this.repository = repository
|
|
11
|
+
}
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
getBasePath() {
|
|
14
|
+
return 'discount-codes'
|
|
15
|
+
}
|
|
16
16
|
}
|
|
@@ -3,14 +3,14 @@ import { ExtensionRepository } from '../repositories/extension.js'
|
|
|
3
3
|
import AbstractService from './abstract.js'
|
|
4
4
|
|
|
5
5
|
export class ExtensionServices extends AbstractService {
|
|
6
|
-
|
|
6
|
+
public repository: ExtensionRepository
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
constructor(parent: Router, repository: ExtensionRepository) {
|
|
9
|
+
super(parent)
|
|
10
|
+
this.repository = repository
|
|
11
|
+
}
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
getBasePath() {
|
|
14
|
+
return 'extensions'
|
|
15
|
+
}
|
|
16
16
|
}
|
package/src/services/index.ts
CHANGED
|
@@ -27,50 +27,58 @@ import { SubscriptionService } from './subscription.js'
|
|
|
27
27
|
import { TaxCategoryService } from './tax-category.js'
|
|
28
28
|
import { TypeService } from './type.js'
|
|
29
29
|
import { ZoneService } from './zone.js'
|
|
30
|
+
import { AttributeGroupService } from './attribute-group.js'
|
|
30
31
|
|
|
31
32
|
export const createServices = (router: any, repos: any) => ({
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
33
|
+
category: new CategoryServices(router, repos['category']),
|
|
34
|
+
cart: new CartService(router, repos['cart'], repos['order']),
|
|
35
|
+
'cart-discount': new CartDiscountService(router, repos['cart-discount']),
|
|
36
|
+
customer: new CustomerService(router, repos['customer']),
|
|
37
|
+
channel: new ChannelService(router, repos['channel']),
|
|
38
|
+
'customer-group': new CustomerGroupService(router, repos['customer-group']),
|
|
39
|
+
'discount-code': new DiscountCodeService(router, repos['discount-code']),
|
|
40
|
+
extension: new ExtensionServices(router, repos['extension']),
|
|
41
|
+
'inventory-entry': new InventoryEntryService(
|
|
42
|
+
router,
|
|
43
|
+
repos['inventory-entry']
|
|
44
|
+
),
|
|
45
|
+
'key-value-document': new CustomObjectService(
|
|
46
|
+
router,
|
|
47
|
+
repos['key-value-document']
|
|
48
|
+
),
|
|
49
|
+
order: new OrderService(router, repos['order']),
|
|
50
|
+
payment: new PaymentService(router, repos['payment']),
|
|
51
|
+
'standalone-price': new StandAlonePriceService(
|
|
52
|
+
router,
|
|
53
|
+
repos['standalone-price']
|
|
54
|
+
),
|
|
55
|
+
'my-cart': new MyCartService(router, repos['my-cart']),
|
|
56
|
+
'my-order': new MyOrderService(router, repos['my-order']),
|
|
57
|
+
'my-customer': new MyCustomerService(router, repos['my-customer']),
|
|
58
|
+
'my-payment': new MyPaymentService(router, repos['my-payment']),
|
|
59
|
+
'shipping-method': new ShippingMethodService(
|
|
60
|
+
router,
|
|
61
|
+
repos['shipping-method']
|
|
62
|
+
),
|
|
63
|
+
'product-type': new ProductTypeService(router, repos['product-type']),
|
|
64
|
+
product: new ProductService(router, repos['product']),
|
|
65
|
+
'product-discount': new ProductDiscountService(
|
|
66
|
+
router,
|
|
67
|
+
repos['product-discount']
|
|
68
|
+
),
|
|
69
|
+
'product-projection': new ProductProjectionService(
|
|
70
|
+
router,
|
|
71
|
+
repos['product-projection']
|
|
72
|
+
),
|
|
73
|
+
'shopping-list': new ShoppingListService(router, repos['shopping-list']),
|
|
74
|
+
state: new StateService(router, repos['state']),
|
|
75
|
+
store: new StoreService(router, repos['store']),
|
|
76
|
+
subscription: new SubscriptionService(router, repos['subscription']),
|
|
77
|
+
'tax-category': new TaxCategoryService(router, repos['tax-category']),
|
|
78
|
+
'attribute-group': new AttributeGroupService(
|
|
79
|
+
router,
|
|
80
|
+
repos['attribute-group']
|
|
81
|
+
),
|
|
82
|
+
type: new TypeService(router, repos['type']),
|
|
83
|
+
zone: new ZoneService(router, repos['zone']),
|
|
76
84
|
})
|