@labdigital/commercetools-mock 1.5.0 → 1.6.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 (129) hide show
  1. package/README.md +5 -4
  2. package/dist/index.cjs +117 -17
  3. package/dist/index.cjs.map +1 -1
  4. package/dist/index.d.cts +30 -7
  5. package/dist/index.d.ts +30 -7
  6. package/dist/index.js +117 -17
  7. package/dist/index.js.map +1 -1
  8. package/package.json +4 -3
  9. package/src/constants.ts +2 -2
  10. package/src/ctMock.ts +176 -176
  11. package/src/exceptions.ts +10 -10
  12. package/src/helpers.ts +26 -26
  13. package/src/index.test.ts +173 -173
  14. package/src/index.ts +3 -3
  15. package/src/lib/expandParser.ts +19 -19
  16. package/src/lib/haversine.test.ts +13 -13
  17. package/src/lib/haversine.ts +14 -14
  18. package/src/lib/masking.ts +15 -15
  19. package/src/lib/parser.ts +2 -2
  20. package/src/lib/predicateParser.test.ts +204 -204
  21. package/src/lib/predicateParser.ts +398 -398
  22. package/src/lib/projectionSearchFilter.test.ts +168 -168
  23. package/src/lib/projectionSearchFilter.ts +272 -269
  24. package/src/lib/proxy.ts +8 -8
  25. package/src/oauth/errors.ts +4 -4
  26. package/src/oauth/helpers.ts +6 -6
  27. package/src/oauth/server.ts +103 -101
  28. package/src/oauth/store.ts +27 -27
  29. package/src/priceSelector.test.ts +68 -68
  30. package/src/priceSelector.ts +70 -70
  31. package/src/product-projection-search.ts +296 -296
  32. package/src/projectAPI.test.ts +3 -3
  33. package/src/projectAPI.ts +46 -46
  34. package/src/repositories/abstract.ts +190 -190
  35. package/src/repositories/associate-role.ts +10 -7
  36. package/src/repositories/attribute-group.ts +63 -8
  37. package/src/repositories/business-unit.ts +10 -7
  38. package/src/repositories/cart-discount.ts +134 -134
  39. package/src/repositories/cart.ts +517 -514
  40. package/src/repositories/category.ts +170 -167
  41. package/src/repositories/channel.ts +114 -111
  42. package/src/repositories/custom-object.ts +66 -63
  43. package/src/repositories/customer-group.ts +72 -69
  44. package/src/repositories/customer.ts +90 -90
  45. package/src/repositories/discount-code.ts +171 -168
  46. package/src/repositories/errors.ts +15 -15
  47. package/src/repositories/extension.ts +79 -76
  48. package/src/repositories/helpers.ts +180 -180
  49. package/src/repositories/index.ts +39 -39
  50. package/src/repositories/inventory-entry.ts +98 -95
  51. package/src/repositories/my-order.ts +11 -11
  52. package/src/repositories/order-edit.ts +29 -29
  53. package/src/repositories/order.test.ts +191 -191
  54. package/src/repositories/order.ts +393 -393
  55. package/src/repositories/payment.ts +155 -155
  56. package/src/repositories/product-discount.ts +149 -149
  57. package/src/repositories/product-projection.ts +135 -50
  58. package/src/repositories/product-selection.ts +31 -31
  59. package/src/repositories/product-type.ts +156 -156
  60. package/src/repositories/product.ts +600 -597
  61. package/src/repositories/project.ts +136 -135
  62. package/src/repositories/quote-request.ts +19 -19
  63. package/src/repositories/quote.ts +19 -19
  64. package/src/repositories/review.ts +24 -24
  65. package/src/repositories/shipping-method.ts +217 -217
  66. package/src/repositories/shopping-list.ts +49 -49
  67. package/src/repositories/staged-quote.ts +20 -20
  68. package/src/repositories/standalone-price.ts +72 -61
  69. package/src/repositories/state.ts +84 -84
  70. package/src/repositories/store.ts +114 -114
  71. package/src/repositories/subscription.ts +40 -40
  72. package/src/repositories/tax-category.ts +98 -98
  73. package/src/repositories/type.ts +157 -157
  74. package/src/repositories/zone.ts +71 -71
  75. package/src/server.ts +2 -2
  76. package/src/services/abstract.ts +173 -173
  77. package/src/services/attribute-group.ts +16 -0
  78. package/src/services/cart-discount.ts +8 -8
  79. package/src/services/cart.test.ts +409 -409
  80. package/src/services/cart.ts +50 -50
  81. package/src/services/category.test.ts +25 -25
  82. package/src/services/category.ts +8 -8
  83. package/src/services/channel.ts +8 -8
  84. package/src/services/custom-object.test.ts +184 -184
  85. package/src/services/custom-object.ts +48 -48
  86. package/src/services/customer-group.ts +8 -8
  87. package/src/services/customer.test.ts +151 -151
  88. package/src/services/customer.ts +27 -27
  89. package/src/services/discount-code.ts +8 -8
  90. package/src/services/extension.ts +8 -8
  91. package/src/services/index.ts +52 -44
  92. package/src/services/inventory-entry.test.ts +162 -162
  93. package/src/services/inventory-entry.ts +8 -8
  94. package/src/services/my-cart.test.ts +78 -78
  95. package/src/services/my-cart.ts +28 -28
  96. package/src/services/my-customer.test.ts +44 -44
  97. package/src/services/my-customer.ts +53 -53
  98. package/src/services/my-order.ts +20 -20
  99. package/src/services/my-payment.test.ts +65 -65
  100. package/src/services/my-payment.ts +8 -8
  101. package/src/services/order.test.ts +527 -527
  102. package/src/services/order.ts +31 -31
  103. package/src/services/payment.test.ts +65 -65
  104. package/src/services/payment.ts +8 -8
  105. package/src/services/product-discount.ts +8 -8
  106. package/src/services/product-projection.test.ts +502 -428
  107. package/src/services/product-projection.ts +32 -18
  108. package/src/services/product-type.test.ts +56 -56
  109. package/src/services/product-type.ts +8 -8
  110. package/src/services/product.test.ts +510 -510
  111. package/src/services/product.ts +8 -8
  112. package/src/services/project.ts +34 -34
  113. package/src/services/shipping-method.test.ts +81 -81
  114. package/src/services/shipping-method.ts +12 -12
  115. package/src/services/shopping-list.ts +8 -8
  116. package/src/services/standalone-price.test.ts +256 -256
  117. package/src/services/standalone-price.ts +8 -8
  118. package/src/services/state.test.ts +42 -42
  119. package/src/services/state.ts +8 -8
  120. package/src/services/store.test.ts +57 -57
  121. package/src/services/store.ts +8 -8
  122. package/src/services/subscription.ts +8 -8
  123. package/src/services/tax-category.test.ts +61 -61
  124. package/src/services/tax-category.ts +8 -8
  125. package/src/services/type.ts +8 -8
  126. package/src/services/zone.ts +8 -8
  127. package/src/storage/abstract.ts +58 -58
  128. package/src/storage/in-memory.ts +419 -419
  129. 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
- public repository: CustomObjectRepository
8
+ public repository: CustomObjectRepository
9
9
 
10
- constructor(parent: Router, repository: CustomObjectRepository) {
11
- super(parent)
12
- this.repository = repository
13
- }
10
+ constructor(parent: Router, repository: CustomObjectRepository) {
11
+ super(parent)
12
+ this.repository = repository
13
+ }
14
14
 
15
- getBasePath() {
16
- return 'custom-objects'
17
- }
15
+ getBasePath() {
16
+ return 'custom-objects'
17
+ }
18
18
 
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
- }
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
- getWithContainerAndKey(request: Request, response: Response) {
26
- const result = this.repository.getWithContainerAndKey(
27
- getRepositoryContext(request),
28
- request.params.container,
29
- request.params.key
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
- if (!result) {
33
- return response.status(404).send('Not Found')
34
- }
35
- return response.status(200).send(result)
36
- }
32
+ if (!result) {
33
+ return response.status(404).send('Not Found')
34
+ }
35
+ return response.status(200).send(result)
36
+ }
37
37
 
38
- createWithContainerAndKey(request: Request, response: Response) {
39
- const draft: CustomObjectDraft = {
40
- ...request.body,
41
- key: request.params.key,
42
- container: request.params.container,
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
- const result = this.repository.create(getRepositoryContext(request), draft)
46
- return response.status(200).send(result)
47
- }
45
+ const result = this.repository.create(getRepositoryContext(request), draft)
46
+ return response.status(200).send(result)
47
+ }
48
48
 
49
- deleteWithContainerAndKey(request: Request, response: Response) {
50
- const current = this.repository.getWithContainerAndKey(
51
- getRepositoryContext(request),
52
- request.params.container,
53
- request.params.key
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
- if (!current) {
57
- return response.status(404).send('Not Found')
58
- }
56
+ if (!current) {
57
+ return response.status(404).send('Not Found')
58
+ }
59
59
 
60
- const result = this.repository.delete(
61
- getRepositoryContext(request),
62
- current.id
63
- )
60
+ const result = this.repository.delete(
61
+ getRepositoryContext(request),
62
+ current.id
63
+ )
64
64
 
65
- return response.status(200).send(result)
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
- public repository: CustomerGroupRepository
6
+ public repository: CustomerGroupRepository
7
7
 
8
- constructor(parent: Router, repository: CustomerGroupRepository) {
9
- super(parent)
10
- this.repository = repository
11
- }
8
+ constructor(parent: Router, repository: CustomerGroupRepository) {
9
+ super(parent)
10
+ this.repository = repository
11
+ }
12
12
 
13
- getBasePath() {
14
- return 'customer-groups'
15
- }
13
+ getBasePath() {
14
+ return 'customer-groups'
15
+ }
16
16
  }
@@ -5,155 +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
- 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
- })
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
+ })
159
159
  })
@@ -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
- public repository: CustomerRepository
9
+ public repository: CustomerRepository
10
10
 
11
- constructor(parent: Router, repository: CustomerRepository) {
12
- super(parent)
13
- this.repository = repository
14
- }
11
+ constructor(parent: Router, repository: CustomerRepository) {
12
+ super(parent)
13
+ this.repository = repository
14
+ }
15
15
 
16
- getBasePath() {
17
- return 'customers'
18
- }
16
+ getBasePath() {
17
+ return 'customers'
18
+ }
19
19
 
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()
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
- 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
- }
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
- public repository: DiscountCodeRepository
6
+ public repository: DiscountCodeRepository
7
7
 
8
- constructor(parent: Router, repository: DiscountCodeRepository) {
9
- super(parent)
10
- this.repository = repository
11
- }
8
+ constructor(parent: Router, repository: DiscountCodeRepository) {
9
+ super(parent)
10
+ this.repository = repository
11
+ }
12
12
 
13
- getBasePath() {
14
- return 'discount-codes'
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
- public repository: ExtensionRepository
6
+ public repository: ExtensionRepository
7
7
 
8
- constructor(parent: Router, repository: ExtensionRepository) {
9
- super(parent)
10
- this.repository = repository
11
- }
8
+ constructor(parent: Router, repository: ExtensionRepository) {
9
+ super(parent)
10
+ this.repository = repository
11
+ }
12
12
 
13
- getBasePath() {
14
- return 'extensions'
15
- }
13
+ getBasePath() {
14
+ return 'extensions'
15
+ }
16
16
  }