spree_api 4.2.7 → 4.3.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (90) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +14 -1
  3. data/app/controllers/concerns/spree/api/v2/product_list_includes.rb +23 -0
  4. data/app/controllers/spree/api/v1/classifications_controller.rb +4 -3
  5. data/app/controllers/spree/api/v1/orders_controller.rb +5 -1
  6. data/app/controllers/spree/api/v1/products_controller.rb +2 -2
  7. data/app/controllers/spree/api/v1/taxonomies_controller.rb +1 -1
  8. data/app/controllers/spree/api/v2/base_controller.rb +29 -6
  9. data/app/controllers/spree/api/v2/platform/addresses_controller.rb +19 -0
  10. data/app/controllers/spree/api/v2/platform/classifications_controller.rb +43 -0
  11. data/app/controllers/spree/api/v2/platform/cms_pages_controller.rb +15 -0
  12. data/app/controllers/spree/api/v2/platform/cms_sections_controller.rb +34 -0
  13. data/app/controllers/spree/api/v2/platform/countries_controller.rb +19 -0
  14. data/app/controllers/spree/api/v2/platform/menu_items_controller.rb +35 -0
  15. data/app/controllers/spree/api/v2/platform/menus_controller.rb +19 -0
  16. data/app/controllers/spree/api/v2/platform/option_types_controller.rb +15 -0
  17. data/app/controllers/spree/api/v2/platform/option_values_controller.rb +19 -0
  18. data/app/controllers/spree/api/v2/platform/products_controller.rb +21 -0
  19. data/app/controllers/spree/api/v2/platform/resource_controller.rb +112 -0
  20. data/app/controllers/spree/api/v2/platform/taxons_controller.rb +30 -0
  21. data/app/controllers/spree/api/v2/platform/users_controller.rb +28 -0
  22. data/app/controllers/spree/api/v2/resource_controller.rb +18 -6
  23. data/app/controllers/spree/api/v2/storefront/account/addresses_controller.rb +2 -14
  24. data/app/controllers/spree/api/v2/storefront/account/credit_cards_controller.rb +13 -11
  25. data/app/controllers/spree/api/v2/storefront/account/orders_controller.rb +2 -2
  26. data/app/controllers/spree/api/v2/storefront/account_controller.rb +32 -1
  27. data/app/controllers/spree/api/v2/storefront/cart_controller.rb +28 -6
  28. data/app/controllers/spree/api/v2/storefront/checkout_controller.rb +2 -1
  29. data/app/controllers/spree/api/v2/storefront/cms_pages_controller.rb +41 -0
  30. data/app/controllers/spree/api/v2/storefront/countries_controller.rb +9 -14
  31. data/app/controllers/spree/api/v2/storefront/menus_controller.rb +35 -0
  32. data/app/controllers/spree/api/v2/storefront/order_status_controller.rb +1 -1
  33. data/app/controllers/spree/api/v2/storefront/products_controller.rb +6 -12
  34. data/app/controllers/spree/api/v2/storefront/stores_controller.rb +1 -1
  35. data/app/controllers/spree/api/v2/storefront/taxons_controller.rb +7 -8
  36. data/app/helpers/spree/api/v2/display_money_helper.rb +2 -2
  37. data/app/models/spree/api_configuration.rb +1 -0
  38. data/app/models/spree/api_dependencies.rb +19 -5
  39. data/app/serializers/concerns/spree/api/v2/resource_serializer_concern.rb +16 -0
  40. data/app/serializers/spree/api/v2/base_serializer.rb +32 -0
  41. data/app/serializers/spree/api/v2/platform/address_serializer.rb +15 -0
  42. data/app/serializers/spree/api/v2/platform/base_serializer.rb +10 -0
  43. data/app/serializers/spree/api/v2/platform/classification_serializer.rb +14 -0
  44. data/app/serializers/spree/api/v2/platform/cms_page_serializer.rb +13 -0
  45. data/app/serializers/spree/api/v2/platform/cms_section_serializer.rb +11 -0
  46. data/app/serializers/spree/api/v2/platform/country_serializer.rb +13 -0
  47. data/app/serializers/spree/api/v2/platform/image_serializer.rb +15 -0
  48. data/app/serializers/spree/api/v2/platform/menu_item_serializer.rb +22 -0
  49. data/app/serializers/spree/api/v2/platform/menu_serializer.rb +13 -0
  50. data/app/serializers/spree/api/v2/platform/option_type_serializer.rb +13 -0
  51. data/app/serializers/spree/api/v2/platform/option_value_serializer.rb +13 -0
  52. data/app/serializers/spree/api/v2/platform/product_property_serializer.rb +11 -0
  53. data/app/serializers/spree/api/v2/platform/product_serializer.rb +78 -0
  54. data/app/serializers/spree/api/v2/platform/state_serializer.rb +13 -0
  55. data/app/serializers/spree/api/v2/platform/stock_item_serializer.rb +20 -0
  56. data/app/serializers/spree/api/v2/platform/stock_location_serializer.rb +16 -0
  57. data/app/serializers/spree/api/v2/platform/store_serializer.rb +14 -0
  58. data/app/serializers/spree/api/v2/platform/tax_category_serializer.rb +13 -0
  59. data/app/serializers/spree/api/v2/platform/taxon_image_serializer.rb +13 -0
  60. data/app/serializers/spree/api/v2/platform/taxon_serializer.rb +38 -0
  61. data/app/serializers/spree/api/v2/platform/taxonomy_serializer.rb +14 -0
  62. data/app/serializers/spree/api/v2/platform/user_serializer.rb +21 -0
  63. data/app/serializers/spree/api/v2/platform/variant_serializer.rb +57 -0
  64. data/app/serializers/spree/v2/storefront/base_serializer.rb +3 -2
  65. data/app/serializers/spree/v2/storefront/cms_page_serializer.rb +14 -0
  66. data/app/serializers/spree/v2/storefront/cms_section_serializer.rb +28 -0
  67. data/app/serializers/spree/v2/storefront/country_serializer.rb +4 -4
  68. data/app/serializers/spree/v2/storefront/estimated_shipping_rate_serializer.rb +2 -0
  69. data/app/serializers/spree/v2/storefront/menu_item_serializer.rb +37 -0
  70. data/app/serializers/spree/v2/storefront/menu_serializer.rb +13 -0
  71. data/app/serializers/spree/v2/storefront/product_property_serializer.rb +1 -1
  72. data/app/serializers/spree/v2/storefront/product_serializer.rb +4 -1
  73. data/app/serializers/spree/v2/storefront/store_serializer.rb +10 -0
  74. data/app/serializers/spree/v2/storefront/taxon_serializer.rb +6 -5
  75. data/config/initializers/doorkeeper.rb +8 -1
  76. data/config/initializers/rabl.rb +9 -0
  77. data/config/routes.rb +115 -3
  78. data/db/migrate/20210727102516_change_integer_id_columns_type.rb +9 -0
  79. data/docs/oauth/index.yml +2 -2
  80. data/docs/v2/platform/index.yaml +1501 -0
  81. data/docs/v2/storefront/index.yaml +48 -2
  82. data/lib/spree/api/engine.rb +6 -17
  83. data/lib/spree/api/testing_support/v2/base.rb +1 -1
  84. data/lib/spree/api/testing_support/v2/platform_contexts.rb +214 -0
  85. data/lib/spree/api/testing_support/v2/serializers_params.rb +14 -0
  86. data/lib/spree/api.rb +1 -0
  87. data/spree_api.gemspec +3 -0
  88. metadata +101 -11
  89. data/app/assets/javascripts/spree/api/main.js +0 -36
  90. data/app/assets/javascripts/spree/api/storefront/cart.js +0 -49
@@ -0,0 +1,1501 @@
1
+ ---
2
+ openapi: 3.0.1
3
+ info:
4
+ title: Platform API V2
5
+ version: v2
6
+ paths:
7
+ "/api/v2/platform/addresses":
8
+ get:
9
+ summary: Returns a list of Addresses
10
+ tags:
11
+ - Addresses
12
+ security:
13
+ - bearer_auth: []
14
+ parameters:
15
+ - name: page
16
+ in: query
17
+ example: 1
18
+ schema:
19
+ type: integer
20
+ - name: per_page
21
+ in: query
22
+ example: 50
23
+ schema:
24
+ type: integer
25
+ - name: include
26
+ in: query
27
+ descripton: 'Select which associated resources you would like to fetch, see:
28
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
29
+ example: user,country,state
30
+ schema:
31
+ type: string
32
+ - name: filter
33
+ in: query
34
+ descripton: ''
35
+ example: user_id_eq=1&firstname_cont=Joh
36
+ schema:
37
+ type: string
38
+ responses:
39
+ '200':
40
+ description: Records returned
41
+ content:
42
+ application/vnd.api+json:
43
+ examples:
44
+ Example:
45
+ value:
46
+ data:
47
+ - id: '1'
48
+ type: address
49
+ attributes:
50
+ firstname: John
51
+ lastname: Doe
52
+ address1: 1 Lovely Street
53
+ address2: Northwest
54
+ city: Herndon
55
+ zipcode: '35005'
56
+ phone: 555-555-0199
57
+ state_name:
58
+ alternative_phone: 555-555-0199
59
+ company: Company
60
+ created_at: '2021-08-06T06:53:18.846Z'
61
+ updated_at: '2021-08-06T06:53:18.846Z'
62
+ deleted_at:
63
+ label:
64
+ relationships:
65
+ country:
66
+ data:
67
+ id: '1'
68
+ type: country
69
+ state:
70
+ data:
71
+ id: '1'
72
+ type: state
73
+ user:
74
+ data:
75
+ - id: '2'
76
+ type: address
77
+ attributes:
78
+ firstname: John
79
+ lastname: Doe
80
+ address1: 2 Lovely Street
81
+ address2: Northwest
82
+ city: Herndon
83
+ zipcode: '35005'
84
+ phone: 555-555-0199
85
+ state_name:
86
+ alternative_phone: 555-555-0199
87
+ company: Company
88
+ created_at: '2021-08-06T06:53:18.853Z'
89
+ updated_at: '2021-08-06T06:53:18.853Z'
90
+ deleted_at:
91
+ label:
92
+ relationships:
93
+ country:
94
+ data:
95
+ id: '1'
96
+ type: country
97
+ state:
98
+ data:
99
+ id: '2'
100
+ type: state
101
+ user:
102
+ data:
103
+ meta:
104
+ count: 2
105
+ total_count: 2
106
+ total_pages: 1
107
+ links:
108
+ self: http://www.example.com/api/v2/platform/addresses?page=1&per_page=&include=&filter=
109
+ next: http://www.example.com/api/v2/platform/addresses?include=&page=1&per_page=
110
+ prev: http://www.example.com/api/v2/platform/addresses?include=&page=1&per_page=
111
+ last: http://www.example.com/api/v2/platform/addresses?include=&page=1&per_page=
112
+ first: http://www.example.com/api/v2/platform/addresses?include=&page=1&per_page=
113
+ '401':
114
+ description: Authentication Failed
115
+ content:
116
+ application/vnd.api+json:
117
+ examples:
118
+ Example:
119
+ value:
120
+ error: The access token is invalid
121
+ post:
122
+ summary: Creates an Address
123
+ tags:
124
+ - Addresses
125
+ security:
126
+ - bearer_auth: []
127
+ parameters:
128
+ - name: include
129
+ in: query
130
+ descripton: 'Select which associated resources you would like to fetch, see:
131
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
132
+ example: user,country,state
133
+ schema:
134
+ type: string
135
+ responses:
136
+ '201':
137
+ description: record created
138
+ content:
139
+ application/vnd.api+json:
140
+ examples:
141
+ Example:
142
+ value:
143
+ data:
144
+ id: '5'
145
+ type: address
146
+ attributes:
147
+ firstname: John
148
+ lastname: Doe
149
+ address1: 5 Lovely Street
150
+ address2: Northwest
151
+ city: Herndon
152
+ zipcode: '35005'
153
+ phone: 555-555-0199
154
+ state_name:
155
+ alternative_phone: 555-555-0199
156
+ company: Company
157
+ created_at: '2021-08-06T06:53:19.077Z'
158
+ updated_at: '2021-08-06T06:53:19.077Z'
159
+ deleted_at:
160
+ label:
161
+ relationships:
162
+ country:
163
+ data:
164
+ id: '4'
165
+ type: country
166
+ state:
167
+ data:
168
+ id: '5'
169
+ type: state
170
+ user:
171
+ data:
172
+ id: '1'
173
+ type: user
174
+ '422':
175
+ description: invalid request
176
+ content:
177
+ application/vnd.api+json:
178
+ examples:
179
+ Example:
180
+ value:
181
+ error: First Name can't be blank, Last Name can't be blank, Address
182
+ can't be blank, City can't be blank, Country can't be blank,
183
+ Zip Code can't be blank, and Phone can't be blank
184
+ errors:
185
+ firstname:
186
+ - can't be blank
187
+ lastname:
188
+ - can't be blank
189
+ address1:
190
+ - can't be blank
191
+ city:
192
+ - can't be blank
193
+ country:
194
+ - can't be blank
195
+ zipcode:
196
+ - can't be blank
197
+ phone:
198
+ - can't be blank
199
+ requestBody:
200
+ content:
201
+ application/json:
202
+ schema:
203
+ "$ref": "#/components/schemas/address_params"
204
+ "/api/v2/platform/addresses/{id}":
205
+ get:
206
+ summary: Returns an Address
207
+ tags:
208
+ - Addresses
209
+ security:
210
+ - bearer_auth: []
211
+ parameters:
212
+ - name: id
213
+ in: path
214
+ required: true
215
+ schema:
216
+ type: string
217
+ - name: include
218
+ in: query
219
+ descripton: 'Select which associated resources you would like to fetch, see:
220
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
221
+ example: user,country,state
222
+ schema:
223
+ type: string
224
+ responses:
225
+ '200':
226
+ description: Record found
227
+ content:
228
+ application/vnd.api+json:
229
+ examples:
230
+ Example:
231
+ value:
232
+ data:
233
+ id: '6'
234
+ type: address
235
+ attributes:
236
+ firstname: John
237
+ lastname: Doe
238
+ address1: 6 Lovely Street
239
+ address2: Northwest
240
+ city: Herndon
241
+ zipcode: '35005'
242
+ phone: 555-555-0199
243
+ state_name:
244
+ alternative_phone: 555-555-0199
245
+ company: Company
246
+ created_at: '2021-08-06T06:53:19.150Z'
247
+ updated_at: '2021-08-06T06:53:19.150Z'
248
+ deleted_at:
249
+ label:
250
+ relationships:
251
+ country:
252
+ data:
253
+ id: '6'
254
+ type: country
255
+ state:
256
+ data:
257
+ id: '6'
258
+ type: state
259
+ user:
260
+ data:
261
+ '404':
262
+ description: Record not found
263
+ content:
264
+ application/vnd.api+json:
265
+ examples:
266
+ Example:
267
+ value:
268
+ error: The resource you were looking for could not be found.
269
+ '401':
270
+ description: Authentication Failed
271
+ content:
272
+ application/vnd.api+json:
273
+ examples:
274
+ Example:
275
+ value:
276
+ error: The access token is invalid
277
+ put:
278
+ summary: Updates an Address
279
+ tags:
280
+ - Addresses
281
+ security:
282
+ - bearer_auth: []
283
+ parameters:
284
+ - name: id
285
+ in: path
286
+ required: true
287
+ schema:
288
+ type: string
289
+ - name: include
290
+ in: query
291
+ descripton: 'Select which associated resources you would like to fetch, see:
292
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
293
+ example: user,country,state
294
+ schema:
295
+ type: string
296
+ responses:
297
+ '200':
298
+ description: record updated
299
+ content:
300
+ application/vnd.api+json:
301
+ examples:
302
+ Example:
303
+ value:
304
+ data:
305
+ id: '8'
306
+ type: address
307
+ attributes:
308
+ firstname: Jack
309
+ lastname: Doe
310
+ address1: 8 Lovely Street
311
+ address2: Northwest
312
+ city: Herndon
313
+ zipcode: '35005'
314
+ phone: 555-555-0199
315
+ state_name:
316
+ alternative_phone: 555-555-0199
317
+ company: Company
318
+ created_at: '2021-08-06T06:53:19.236Z'
319
+ updated_at: '2021-08-06T06:53:19.247Z'
320
+ deleted_at:
321
+ label:
322
+ relationships:
323
+ country:
324
+ data:
325
+ id: '9'
326
+ type: country
327
+ state:
328
+ data:
329
+ id: '8'
330
+ type: state
331
+ user:
332
+ data:
333
+ '422':
334
+ description: invalid request
335
+ content:
336
+ application/vnd.api+json:
337
+ examples:
338
+ Example:
339
+ value:
340
+ error: First Name can't be blank and Last Name can't be blank
341
+ errors:
342
+ firstname:
343
+ - can't be blank
344
+ lastname:
345
+ - can't be blank
346
+ '404':
347
+ description: Record not found
348
+ content:
349
+ application/vnd.api+json:
350
+ examples:
351
+ Example:
352
+ value:
353
+ error: The resource you were looking for could not be found.
354
+ '401':
355
+ description: Authentication Failed
356
+ content:
357
+ application/vnd.api+json:
358
+ examples:
359
+ Example:
360
+ value:
361
+ error: The access token is invalid
362
+ requestBody:
363
+ content:
364
+ application/json:
365
+ schema:
366
+ "$ref": "#/components/schemas/address_params"
367
+ delete:
368
+ summary: Deletes an Address
369
+ tags:
370
+ - Addresses
371
+ security:
372
+ - bearer_auth: []
373
+ parameters:
374
+ - name: id
375
+ in: path
376
+ required: true
377
+ schema:
378
+ type: string
379
+ responses:
380
+ '204':
381
+ description: Record deleted
382
+ '404':
383
+ description: Record not found
384
+ content:
385
+ application/vnd.api+json:
386
+ examples:
387
+ Example:
388
+ value:
389
+ error: The resource you were looking for could not be found.
390
+ '401':
391
+ description: Authentication Failed
392
+ content:
393
+ application/vnd.api+json:
394
+ examples:
395
+ Example:
396
+ value:
397
+ error: The access token is invalid
398
+ "/api/v2/platform/classifications":
399
+ get:
400
+ summary: Returns a list of Classifications
401
+ tags:
402
+ - Classifications
403
+ security:
404
+ - bearer_auth: []
405
+ parameters:
406
+ - name: page
407
+ in: query
408
+ example: 1
409
+ schema:
410
+ type: integer
411
+ - name: per_page
412
+ in: query
413
+ example: 50
414
+ schema:
415
+ type: integer
416
+ - name: include
417
+ in: query
418
+ descripton: 'Select which associated resources you would like to fetch, see:
419
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
420
+ example: product,taxon
421
+ schema:
422
+ type: string
423
+ - name: filter
424
+ in: query
425
+ descripton: ''
426
+ example: taxon_id_eq=1
427
+ schema:
428
+ type: string
429
+ responses:
430
+ '200':
431
+ description: Records returned
432
+ content:
433
+ application/vnd.api+json:
434
+ examples:
435
+ Example:
436
+ value:
437
+ data:
438
+ - id: '1'
439
+ type: classification
440
+ attributes:
441
+ position: 1
442
+ created_at: '2021-08-06T06:53:19.739Z'
443
+ updated_at: '2021-08-06T06:53:19.739Z'
444
+ relationships:
445
+ product:
446
+ data:
447
+ id: '1'
448
+ type: product
449
+ taxon:
450
+ data:
451
+ id: '2'
452
+ type: taxon
453
+ - id: '2'
454
+ type: classification
455
+ attributes:
456
+ position: 1
457
+ created_at: '2021-08-06T06:53:19.836Z'
458
+ updated_at: '2021-08-06T06:53:19.836Z'
459
+ relationships:
460
+ product:
461
+ data:
462
+ id: '2'
463
+ type: product
464
+ taxon:
465
+ data:
466
+ id: '4'
467
+ type: taxon
468
+ meta:
469
+ count: 2
470
+ total_count: 2
471
+ total_pages: 1
472
+ links:
473
+ self: http://www.example.com/api/v2/platform/classifications?page=1&per_page=&include=&filter=
474
+ next: http://www.example.com/api/v2/platform/classifications?include=&page=1&per_page=
475
+ prev: http://www.example.com/api/v2/platform/classifications?include=&page=1&per_page=
476
+ last: http://www.example.com/api/v2/platform/classifications?include=&page=1&per_page=
477
+ first: http://www.example.com/api/v2/platform/classifications?include=&page=1&per_page=
478
+ '401':
479
+ description: Authentication Failed
480
+ content:
481
+ application/vnd.api+json:
482
+ examples:
483
+ Example:
484
+ value:
485
+ error: The access token is invalid
486
+ post:
487
+ summary: Creates a Classification
488
+ tags:
489
+ - Classifications
490
+ security:
491
+ - bearer_auth: []
492
+ parameters:
493
+ - name: include
494
+ in: query
495
+ descripton: 'Select which associated resources you would like to fetch, see:
496
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
497
+ example: product,taxon
498
+ schema:
499
+ type: string
500
+ responses:
501
+ '201':
502
+ description: record created
503
+ content:
504
+ application/vnd.api+json:
505
+ examples:
506
+ Example:
507
+ value:
508
+ data:
509
+ id: '5'
510
+ type: classification
511
+ attributes:
512
+ position: 1
513
+ created_at: '2021-08-06T06:53:20.242Z'
514
+ updated_at: '2021-08-06T06:53:20.242Z'
515
+ relationships:
516
+ product:
517
+ data:
518
+ id: '5'
519
+ type: product
520
+ taxon:
521
+ data:
522
+ id: '10'
523
+ type: taxon
524
+ '422':
525
+ description: invalid request
526
+ content:
527
+ application/vnd.api+json:
528
+ examples:
529
+ Example:
530
+ value:
531
+ error: Taxon can't be blank and Product can't be blank
532
+ errors:
533
+ taxon:
534
+ - can't be blank
535
+ product:
536
+ - can't be blank
537
+ requestBody:
538
+ content:
539
+ application/json:
540
+ schema:
541
+ "$ref": "#/components/schemas/classification_params"
542
+ "/api/v2/platform/classifications/{id}":
543
+ get:
544
+ summary: Returns a Classification
545
+ tags:
546
+ - Classifications
547
+ security:
548
+ - bearer_auth: []
549
+ parameters:
550
+ - name: id
551
+ in: path
552
+ required: true
553
+ schema:
554
+ type: string
555
+ - name: include
556
+ in: query
557
+ descripton: 'Select which associated resources you would like to fetch, see:
558
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
559
+ example: product,taxon
560
+ schema:
561
+ type: string
562
+ responses:
563
+ '200':
564
+ description: Record found
565
+ content:
566
+ application/vnd.api+json:
567
+ examples:
568
+ Example:
569
+ value:
570
+ data:
571
+ id: '6'
572
+ type: classification
573
+ attributes:
574
+ position: 1
575
+ created_at: '2021-08-06T06:53:20.399Z'
576
+ updated_at: '2021-08-06T06:53:20.399Z'
577
+ relationships:
578
+ product:
579
+ data:
580
+ id: '6'
581
+ type: product
582
+ taxon:
583
+ data:
584
+ id: '12'
585
+ type: taxon
586
+ '404':
587
+ description: Record not found
588
+ content:
589
+ application/vnd.api+json:
590
+ examples:
591
+ Example:
592
+ value:
593
+ error: The resource you were looking for could not be found.
594
+ '401':
595
+ description: Authentication Failed
596
+ content:
597
+ application/vnd.api+json:
598
+ examples:
599
+ Example:
600
+ value:
601
+ error: The access token is invalid
602
+ put:
603
+ summary: Updates a Classification
604
+ tags:
605
+ - Classifications
606
+ security:
607
+ - bearer_auth: []
608
+ parameters:
609
+ - name: id
610
+ in: path
611
+ required: true
612
+ schema:
613
+ type: string
614
+ - name: include
615
+ in: query
616
+ descripton: 'Select which associated resources you would like to fetch, see:
617
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
618
+ example: product,taxon
619
+ schema:
620
+ type: string
621
+ responses:
622
+ '200':
623
+ description: record updated
624
+ content:
625
+ application/vnd.api+json:
626
+ examples:
627
+ Example:
628
+ value:
629
+ data:
630
+ id: '8'
631
+ type: classification
632
+ attributes:
633
+ position: 1
634
+ created_at: '2021-08-06T06:53:20.705Z'
635
+ updated_at: '2021-08-06T06:53:20.705Z'
636
+ relationships:
637
+ product:
638
+ data:
639
+ id: '8'
640
+ type: product
641
+ taxon:
642
+ data:
643
+ id: '16'
644
+ type: taxon
645
+ '422':
646
+ description: invalid request
647
+ content:
648
+ application/vnd.api+json:
649
+ examples:
650
+ Example:
651
+ value:
652
+ error: Product can't be blank
653
+ errors:
654
+ product:
655
+ - can't be blank
656
+ '404':
657
+ description: Record not found
658
+ content:
659
+ application/vnd.api+json:
660
+ examples:
661
+ Example:
662
+ value:
663
+ error: The resource you were looking for could not be found.
664
+ '401':
665
+ description: Authentication Failed
666
+ content:
667
+ application/vnd.api+json:
668
+ examples:
669
+ Example:
670
+ value:
671
+ error: The access token is invalid
672
+ requestBody:
673
+ content:
674
+ application/json:
675
+ schema:
676
+ "$ref": "#/components/schemas/classification_params"
677
+ delete:
678
+ summary: Deletes a Classification
679
+ tags:
680
+ - Classifications
681
+ security:
682
+ - bearer_auth: []
683
+ parameters:
684
+ - name: id
685
+ in: path
686
+ required: true
687
+ schema:
688
+ type: string
689
+ responses:
690
+ '204':
691
+ description: Record deleted
692
+ '404':
693
+ description: Record not found
694
+ content:
695
+ application/vnd.api+json:
696
+ examples:
697
+ Example:
698
+ value:
699
+ error: The resource you were looking for could not be found.
700
+ '401':
701
+ description: Authentication Failed
702
+ content:
703
+ application/vnd.api+json:
704
+ examples:
705
+ Example:
706
+ value:
707
+ error: The access token is invalid
708
+ "/api/v2/platform/classifications/{id}/reposition":
709
+ put:
710
+ summary: Reposition a Classification
711
+ tags:
712
+ - Classifications
713
+ security:
714
+ - bearer_auth: []
715
+ parameters:
716
+ - name: id
717
+ in: path
718
+ required: true
719
+ schema:
720
+ type: string
721
+ - name: include
722
+ in: query
723
+ descripton: 'Select which associated resources you would like to fetch, see:
724
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
725
+ example: product,taxon
726
+ schema:
727
+ type: string
728
+ responses:
729
+ '200':
730
+ description: record updated
731
+ content:
732
+ application/vnd.api+json:
733
+ examples:
734
+ Example:
735
+ value:
736
+ data:
737
+ id: '13'
738
+ type: classification
739
+ attributes:
740
+ position: 2
741
+ created_at: '2021-08-06T06:53:21.437Z'
742
+ updated_at: '2021-08-06T06:53:21.461Z'
743
+ relationships:
744
+ product:
745
+ data:
746
+ id: '13'
747
+ type: product
748
+ taxon:
749
+ data:
750
+ id: '26'
751
+ type: taxon
752
+ '422':
753
+ description: invalid request
754
+ content:
755
+ application/vnd.api+json:
756
+ examples:
757
+ Example:
758
+ value:
759
+ error: is not a number
760
+ errors: {}
761
+ '404':
762
+ description: Record not found
763
+ content:
764
+ application/vnd.api+json:
765
+ examples:
766
+ Example:
767
+ value:
768
+ error: The resource you were looking for could not be found.
769
+ '401':
770
+ description: Authentication Failed
771
+ content:
772
+ application/vnd.api+json:
773
+ examples:
774
+ Example:
775
+ value:
776
+ error: The access token is invalid
777
+ requestBody:
778
+ content:
779
+ application/json:
780
+ schema:
781
+ "$ref": "#/components/schemas/classification_params"
782
+ "/api/v2/platform/countries":
783
+ get:
784
+ summary: Returns a list of Countries
785
+ tags:
786
+ - Countries
787
+ security:
788
+ - bearer_auth: []
789
+ responses:
790
+ '200':
791
+ description: Records returned
792
+ content:
793
+ application/vnd.api+json:
794
+ examples:
795
+ Example:
796
+ value:
797
+ data:
798
+ - id: '34'
799
+ type: country
800
+ attributes:
801
+ iso_name: UNITED STATES
802
+ iso: US
803
+ iso3: IS34
804
+ name: United States of America
805
+ numcode: 840
806
+ states_required: true
807
+ updated_at: '2021-08-06T06:53:21.782Z'
808
+ zipcode_required: true
809
+ created_at: '2021-08-06T06:53:21.782Z'
810
+ relationships:
811
+ states:
812
+ data: []
813
+ - id: '35'
814
+ type: country
815
+ attributes:
816
+ iso_name: ISO_NAME_2
817
+ iso: I2
818
+ iso3: IS35
819
+ name: NAME_2
820
+ numcode: 840
821
+ states_required: false
822
+ updated_at: '2021-08-06T06:53:21.793Z'
823
+ zipcode_required: true
824
+ created_at: '2021-08-06T06:53:21.793Z'
825
+ relationships:
826
+ states:
827
+ data: []
828
+ - id: '36'
829
+ type: country
830
+ attributes:
831
+ iso_name: ISO_NAME_3
832
+ iso: I3
833
+ iso3: IS36
834
+ name: NAME_3
835
+ numcode: 840
836
+ states_required: false
837
+ updated_at: '2021-08-06T06:53:21.796Z'
838
+ zipcode_required: true
839
+ created_at: '2021-08-06T06:53:21.796Z'
840
+ relationships:
841
+ states:
842
+ data: []
843
+ meta:
844
+ count: 3
845
+ total_count: 3
846
+ total_pages: 1
847
+ links:
848
+ self: http://www.example.com/api/v2/platform/countries
849
+ next: http://www.example.com/api/v2/platform/countries?page=1
850
+ prev: http://www.example.com/api/v2/platform/countries?page=1
851
+ last: http://www.example.com/api/v2/platform/countries?page=1
852
+ first: http://www.example.com/api/v2/platform/countries?page=1
853
+ '401':
854
+ description: Authentication Failed
855
+ content:
856
+ application/vnd.api+json:
857
+ examples:
858
+ Example:
859
+ value:
860
+ error: The access token is invalid
861
+ "/api/v2/platform/countries/{id}":
862
+ get:
863
+ summary: Returns a Country
864
+ tags:
865
+ - Countries
866
+ security:
867
+ - bearer_auth: []
868
+ parameters:
869
+ - name: id
870
+ in: path
871
+ required: true
872
+ schema:
873
+ type: string
874
+ responses:
875
+ '200':
876
+ description: Record found
877
+ content:
878
+ application/vnd.api+json:
879
+ examples:
880
+ Example:
881
+ value:
882
+ data:
883
+ id: '41'
884
+ type: country
885
+ attributes:
886
+ iso_name: ISO_NAME_6
887
+ iso: I6
888
+ iso3: IS41
889
+ name: NAME_6
890
+ numcode: 840
891
+ states_required: false
892
+ updated_at: '2021-08-06T06:53:21.864Z'
893
+ zipcode_required: true
894
+ created_at: '2021-08-06T06:53:21.864Z'
895
+ relationships:
896
+ states:
897
+ data: []
898
+ '404':
899
+ description: Record not found
900
+ content:
901
+ application/vnd.api+json:
902
+ examples:
903
+ Example:
904
+ value:
905
+ error: The resource you were looking for could not be found.
906
+ '401':
907
+ description: Authentication Failed
908
+ content:
909
+ application/vnd.api+json:
910
+ examples:
911
+ Example:
912
+ value:
913
+ error: The access token is invalid
914
+ "/api/v2/platform/taxons":
915
+ get:
916
+ summary: Returns a list of Taxons
917
+ tags:
918
+ - Taxons
919
+ security:
920
+ - bearer_auth: []
921
+ parameters:
922
+ - name: page
923
+ in: query
924
+ example: 1
925
+ schema:
926
+ type: integer
927
+ - name: per_page
928
+ in: query
929
+ example: 50
930
+ schema:
931
+ type: integer
932
+ - name: include
933
+ in: query
934
+ descripton: 'Select which associated resources you would like to fetch, see:
935
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
936
+ example: taxonomy,parent,children
937
+ schema:
938
+ type: string
939
+ - name: filter
940
+ in: query
941
+ descripton: ''
942
+ example: taxonomy_id_eq=1&name_cont=Shirts
943
+ schema:
944
+ type: string
945
+ responses:
946
+ '200':
947
+ description: Records returned
948
+ content:
949
+ application/vnd.api+json:
950
+ examples:
951
+ Example:
952
+ value:
953
+ data:
954
+ - id: '32'
955
+ type: taxon
956
+ attributes:
957
+ position: 0
958
+ name: taxon_16
959
+ permalink: taxonomy-16/taxon-16
960
+ lft: 2
961
+ rgt: 3
962
+ description:
963
+ created_at: '2021-08-06T06:53:21.978Z'
964
+ updated_at: '2021-08-06T06:53:21.982Z'
965
+ meta_title:
966
+ meta_description:
967
+ meta_keywords:
968
+ depth: 1
969
+ pretty_name: taxonomy_16 -> taxon_16
970
+ seo_title: taxon_16
971
+ is_root: false
972
+ is_child: true
973
+ is_leaf: true
974
+ relationships:
975
+ parent:
976
+ data:
977
+ id: '31'
978
+ type: taxon
979
+ taxonomy:
980
+ data:
981
+ id: '16'
982
+ type: taxonomy
983
+ children:
984
+ data: []
985
+ image:
986
+ data:
987
+ id: '16'
988
+ type: taxon_image
989
+ - id: '33'
990
+ type: taxon
991
+ attributes:
992
+ position: 0
993
+ name: taxon_17
994
+ permalink: taxonomy-16/taxon-17
995
+ lft: 4
996
+ rgt: 5
997
+ description:
998
+ created_at: '2021-08-06T06:53:22.008Z'
999
+ updated_at: '2021-08-06T06:53:22.013Z'
1000
+ meta_title:
1001
+ meta_description:
1002
+ meta_keywords:
1003
+ depth: 1
1004
+ pretty_name: taxonomy_16 -> taxon_17
1005
+ seo_title: taxon_17
1006
+ is_root: false
1007
+ is_child: true
1008
+ is_leaf: true
1009
+ relationships:
1010
+ parent:
1011
+ data:
1012
+ id: '31'
1013
+ type: taxon
1014
+ taxonomy:
1015
+ data:
1016
+ id: '16'
1017
+ type: taxonomy
1018
+ children:
1019
+ data: []
1020
+ image:
1021
+ data:
1022
+ id: '17'
1023
+ type: taxon_image
1024
+ - id: '31'
1025
+ type: taxon
1026
+ attributes:
1027
+ position: 0
1028
+ name: taxonomy_16
1029
+ permalink: taxonomy-16
1030
+ lft: 1
1031
+ rgt: 6
1032
+ description:
1033
+ created_at: '2021-08-06T06:53:21.950Z'
1034
+ updated_at: '2021-08-06T06:53:22.027Z'
1035
+ meta_title:
1036
+ meta_description:
1037
+ meta_keywords:
1038
+ depth: 0
1039
+ pretty_name: taxonomy_16
1040
+ seo_title: taxonomy_16
1041
+ is_root: true
1042
+ is_child: false
1043
+ is_leaf: false
1044
+ relationships:
1045
+ parent:
1046
+ data:
1047
+ taxonomy:
1048
+ data:
1049
+ id: '16'
1050
+ type: taxonomy
1051
+ children:
1052
+ data:
1053
+ - id: '32'
1054
+ type: taxon
1055
+ - id: '33'
1056
+ type: taxon
1057
+ image:
1058
+ data:
1059
+ meta:
1060
+ count: 3
1061
+ total_count: 3
1062
+ total_pages: 1
1063
+ links:
1064
+ self: http://www.example.com/api/v2/platform/taxons?page=1&per_page=&include=&filter=
1065
+ next: http://www.example.com/api/v2/platform/taxons?include=&page=1&per_page=
1066
+ prev: http://www.example.com/api/v2/platform/taxons?include=&page=1&per_page=
1067
+ last: http://www.example.com/api/v2/platform/taxons?include=&page=1&per_page=
1068
+ first: http://www.example.com/api/v2/platform/taxons?include=&page=1&per_page=
1069
+ '401':
1070
+ description: Authentication Failed
1071
+ content:
1072
+ application/vnd.api+json:
1073
+ examples:
1074
+ Example:
1075
+ value:
1076
+ error: The access token is invalid
1077
+ post:
1078
+ summary: Creates a Taxon
1079
+ tags:
1080
+ - Taxons
1081
+ security:
1082
+ - bearer_auth: []
1083
+ parameters:
1084
+ - name: include
1085
+ in: query
1086
+ descripton: 'Select which associated resources you would like to fetch, see:
1087
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
1088
+ example: taxonomy,parent,children
1089
+ schema:
1090
+ type: string
1091
+ responses:
1092
+ '201':
1093
+ description: record created
1094
+ content:
1095
+ application/vnd.api+json:
1096
+ examples:
1097
+ Example:
1098
+ value:
1099
+ data:
1100
+ id: '38'
1101
+ type: taxon
1102
+ attributes:
1103
+ position: 0
1104
+ name: taxon_20
1105
+ permalink: taxonomy-18/taxon-20
1106
+ lft: 2
1107
+ rgt: 3
1108
+ description:
1109
+ created_at: '2021-08-06T06:53:22.225Z'
1110
+ updated_at: '2021-08-06T06:53:22.231Z'
1111
+ meta_title:
1112
+ meta_description:
1113
+ meta_keywords:
1114
+ depth: 1
1115
+ pretty_name: taxonomy_18 -> taxon_20
1116
+ seo_title: taxon_20
1117
+ is_root: false
1118
+ is_child: true
1119
+ is_leaf: true
1120
+ relationships:
1121
+ parent:
1122
+ data:
1123
+ id: '37'
1124
+ type: taxon
1125
+ taxonomy:
1126
+ data:
1127
+ id: '18'
1128
+ type: taxonomy
1129
+ children:
1130
+ data: []
1131
+ image:
1132
+ data:
1133
+ '422':
1134
+ description: invalid request
1135
+ content:
1136
+ application/vnd.api+json:
1137
+ examples:
1138
+ Example:
1139
+ value:
1140
+ error: Name can't be blank and Taxonomy can't be blank
1141
+ errors:
1142
+ name:
1143
+ - can't be blank
1144
+ taxonomy:
1145
+ - can't be blank
1146
+ requestBody:
1147
+ content:
1148
+ application/json:
1149
+ schema:
1150
+ "$ref": "#/components/schemas/taxon_params"
1151
+ "/api/v2/platform/taxons/{id}":
1152
+ get:
1153
+ summary: Returns a Taxon
1154
+ tags:
1155
+ - Taxons
1156
+ security:
1157
+ - bearer_auth: []
1158
+ parameters:
1159
+ - name: id
1160
+ in: path
1161
+ required: true
1162
+ schema:
1163
+ type: string
1164
+ - name: include
1165
+ in: query
1166
+ descripton: 'Select which associated resources you would like to fetch, see:
1167
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
1168
+ example: taxonomy,parent,children
1169
+ schema:
1170
+ type: string
1171
+ responses:
1172
+ '200':
1173
+ description: Record found
1174
+ content:
1175
+ application/vnd.api+json:
1176
+ examples:
1177
+ Example:
1178
+ value:
1179
+ data:
1180
+ id: '40'
1181
+ type: taxon
1182
+ attributes:
1183
+ position: 0
1184
+ name: taxon_21
1185
+ permalink: taxonomy-19/taxon-21
1186
+ lft: 2
1187
+ rgt: 3
1188
+ description:
1189
+ created_at: '2021-08-06T06:53:22.320Z'
1190
+ updated_at: '2021-08-06T06:53:22.324Z'
1191
+ meta_title:
1192
+ meta_description:
1193
+ meta_keywords:
1194
+ depth: 1
1195
+ pretty_name: taxonomy_19 -> taxon_21
1196
+ seo_title: taxon_21
1197
+ is_root: false
1198
+ is_child: true
1199
+ is_leaf: true
1200
+ relationships:
1201
+ parent:
1202
+ data:
1203
+ id: '39'
1204
+ type: taxon
1205
+ taxonomy:
1206
+ data:
1207
+ id: '19'
1208
+ type: taxonomy
1209
+ children:
1210
+ data: []
1211
+ products:
1212
+ data: []
1213
+ image:
1214
+ data:
1215
+ id: '20'
1216
+ type: taxon_image
1217
+ '404':
1218
+ description: Record not found
1219
+ content:
1220
+ application/vnd.api+json:
1221
+ examples:
1222
+ Example:
1223
+ value:
1224
+ error: The resource you were looking for could not be found.
1225
+ '401':
1226
+ description: Authentication Failed
1227
+ content:
1228
+ application/vnd.api+json:
1229
+ examples:
1230
+ Example:
1231
+ value:
1232
+ error: The access token is invalid
1233
+ put:
1234
+ summary: Updates a Taxon
1235
+ tags:
1236
+ - Taxons
1237
+ security:
1238
+ - bearer_auth: []
1239
+ parameters:
1240
+ - name: id
1241
+ in: path
1242
+ required: true
1243
+ schema:
1244
+ type: string
1245
+ - name: include
1246
+ in: query
1247
+ descripton: 'Select which associated resources you would like to fetch, see:
1248
+ <a href="https://jsonapi.org/format/#fetching-includes">https://jsonapi.org/format/#fetching-includes</a>'
1249
+ example: taxonomy,parent,children
1250
+ schema:
1251
+ type: string
1252
+ responses:
1253
+ '200':
1254
+ description: record updated
1255
+ content:
1256
+ application/vnd.api+json:
1257
+ examples:
1258
+ Example:
1259
+ value:
1260
+ data:
1261
+ id: '44'
1262
+ type: taxon
1263
+ attributes:
1264
+ position: 0
1265
+ name: T-Shirts
1266
+ permalink: taxonomy-21/taxon-23
1267
+ lft: 2
1268
+ rgt: 3
1269
+ description:
1270
+ created_at: '2021-08-06T06:53:22.511Z'
1271
+ updated_at: '2021-08-06T06:53:22.542Z'
1272
+ meta_title:
1273
+ meta_description:
1274
+ meta_keywords:
1275
+ depth: 1
1276
+ pretty_name: taxonomy_21 -> T-Shirts
1277
+ seo_title: T-Shirts
1278
+ is_root: false
1279
+ is_child: true
1280
+ is_leaf: true
1281
+ relationships:
1282
+ parent:
1283
+ data:
1284
+ id: '43'
1285
+ type: taxon
1286
+ taxonomy:
1287
+ data:
1288
+ id: '21'
1289
+ type: taxonomy
1290
+ children:
1291
+ data: []
1292
+ image:
1293
+ data:
1294
+ id: '22'
1295
+ type: taxon_image
1296
+ '422':
1297
+ description: invalid request
1298
+ content:
1299
+ application/vnd.api+json:
1300
+ examples:
1301
+ Example:
1302
+ value:
1303
+ error: Name can't be blank
1304
+ errors:
1305
+ name:
1306
+ - can't be blank
1307
+ '404':
1308
+ description: Record not found
1309
+ content:
1310
+ application/vnd.api+json:
1311
+ examples:
1312
+ Example:
1313
+ value:
1314
+ error: The resource you were looking for could not be found.
1315
+ '401':
1316
+ description: Authentication Failed
1317
+ content:
1318
+ application/vnd.api+json:
1319
+ examples:
1320
+ Example:
1321
+ value:
1322
+ error: The access token is invalid
1323
+ requestBody:
1324
+ content:
1325
+ application/json:
1326
+ schema:
1327
+ "$ref": "#/components/schemas/taxon_params"
1328
+ delete:
1329
+ summary: Deletes a Taxon
1330
+ tags:
1331
+ - Taxons
1332
+ security:
1333
+ - bearer_auth: []
1334
+ parameters:
1335
+ - name: id
1336
+ in: path
1337
+ required: true
1338
+ schema:
1339
+ type: string
1340
+ responses:
1341
+ '204':
1342
+ description: Record deleted
1343
+ '404':
1344
+ description: Record not found
1345
+ content:
1346
+ application/vnd.api+json:
1347
+ examples:
1348
+ Example:
1349
+ value:
1350
+ error: The resource you were looking for could not be found.
1351
+ '401':
1352
+ description: Authentication Failed
1353
+ content:
1354
+ application/vnd.api+json:
1355
+ examples:
1356
+ Example:
1357
+ value:
1358
+ error: The access token is invalid
1359
+ servers:
1360
+ - url: https://{defaultHost}
1361
+ variables:
1362
+ defaultHost:
1363
+ default: localhost:3000
1364
+ components:
1365
+ securitySchemes:
1366
+ bearer_auth:
1367
+ type: http
1368
+ scheme: bearer
1369
+ schemas:
1370
+ address_params:
1371
+ type: object
1372
+ properties:
1373
+ country_id:
1374
+ type: string
1375
+ state_id:
1376
+ type: string
1377
+ state_name:
1378
+ type: string
1379
+ address1:
1380
+ type: string
1381
+ city:
1382
+ type: string
1383
+ zipcode:
1384
+ type: string
1385
+ phone:
1386
+ type: string
1387
+ alternative_phone:
1388
+ type: string
1389
+ firstname:
1390
+ type: string
1391
+ lastname:
1392
+ type: string
1393
+ label:
1394
+ type: string
1395
+ company:
1396
+ type: string
1397
+ user_id:
1398
+ type: string
1399
+ classification_params:
1400
+ type: object
1401
+ properties:
1402
+ product_id:
1403
+ type: string
1404
+ taxon_id:
1405
+ type: string
1406
+ position:
1407
+ type: integer
1408
+ taxon_params:
1409
+ type: object
1410
+ properties:
1411
+ taxonomy_id:
1412
+ type: string
1413
+ name:
1414
+ type: string
1415
+ required:
1416
+ - name
1417
+ - taxonomy_id
1418
+ resources_list:
1419
+ type: object
1420
+ properties:
1421
+ data:
1422
+ type: array
1423
+ items:
1424
+ allOf:
1425
+ - "$ref": "#/components/schemas/resource_properties"
1426
+ meta:
1427
+ type: object
1428
+ properties:
1429
+ count:
1430
+ type: integer
1431
+ total_count:
1432
+ type: integer
1433
+ total_pages:
1434
+ type: integer
1435
+ required:
1436
+ - count
1437
+ - total_count
1438
+ - total_pages
1439
+ links:
1440
+ type: object
1441
+ properties:
1442
+ self:
1443
+ type: string
1444
+ next:
1445
+ type: string
1446
+ prev:
1447
+ type: string
1448
+ last:
1449
+ type: string
1450
+ first:
1451
+ type: string
1452
+ required:
1453
+ - self
1454
+ - next
1455
+ - prev
1456
+ - last
1457
+ - first
1458
+ required:
1459
+ - data
1460
+ - meta
1461
+ - links
1462
+ resource_properties:
1463
+ type: object
1464
+ properties:
1465
+ id:
1466
+ type: string
1467
+ type:
1468
+ type: string
1469
+ attributes:
1470
+ type: object
1471
+ relationships:
1472
+ type: object
1473
+ required:
1474
+ - id
1475
+ - type
1476
+ - attributes
1477
+ - relationships
1478
+ resource:
1479
+ type: object
1480
+ properties:
1481
+ data:
1482
+ "$ref": "#/components/schemas/resource_properties"
1483
+ required:
1484
+ - data
1485
+ error:
1486
+ type: object
1487
+ properties:
1488
+ error:
1489
+ type: string
1490
+ required:
1491
+ - error
1492
+ validation_errors:
1493
+ type: object
1494
+ properties:
1495
+ error:
1496
+ type: string
1497
+ errors:
1498
+ type: object
1499
+ required:
1500
+ - error
1501
+ - errors