Explorar el Código

:recycle: fixing up some imports | simplifying route example | adding swagger

neo
toj hace 2 años
padre
commit
f62479df52

+ 1
- 1
backend/lib/models/response.js Ver fichero

@@ -1,6 +1,6 @@
1 1
 const Schwifty = require('@hapipal/schwifty')
2 2
 
3
-const responseSchema = require('../schemas/response')
3
+const responseSchema = require('../schemas/responses')
4 4
 
5 5
 module.exports = class Response extends Schwifty.Model {
6 6
     static get tableName() {

backend/lib/models/tags.js → backend/lib/models/tag.js Ver fichero


+ 1
- 1
backend/lib/models/user.js Ver fichero

@@ -1,6 +1,6 @@
1 1
 const Schwifty = require('@hapipal/schwifty')
2 2
 
3
-const ProfileModel = require('../profiles')
3
+const ProfileModel = require('./profile')
4 4
 const userSchema = require('../schemas/users')
5 5
 
6 6
 /**

+ 18
- 0
backend/lib/routes/handlers/user.js Ver fichero

@@ -0,0 +1,18 @@
1
+const { makeReturn } = require('./util.js')
2
+const handlerType = 'user'
3
+
4
+module.exports = {
5
+    get: async (request, h) => {
6
+        try {
7
+            const { userService } = request.services()
8
+            const { user_email } = request.params
9
+            const user = await userService.findByEmail(user_email)
10
+
11
+            if (!user) throw `No user found for ${user_email}`
12
+
13
+            return makeReturn(true, { user }, handlerType)
14
+        } catch (error) {
15
+            return makeReturn(false, { error }, handlerType)
16
+        }
17
+    },
18
+}

+ 3
- 0
backend/lib/routes/handlers/util.js Ver fichero

@@ -0,0 +1,3 @@
1
+const makeReturn = (ok, data, handler) => ({ ok, handler, data })
2
+
3
+module.exports = { makeReturn }

+ 11
- 40
backend/lib/routes/user/get-user.js Ver fichero

@@ -1,57 +1,28 @@
1
-const Joi = require('joi')
1
+const { responseWrapper } = require('../../schemas/api.js')
2
+const { validator } = require('../../schemas/users.js')
3
+const userHandlers = require('../handlers/user')
2 4
 
3
-const pluginConfig = {
4
-    handlerType: 'user',
5
-    docs: {
6
-        get: {
7
-            description: 'get user',
8
-            notes: 'Returns a user by the email passed in the path',
9
-        },
10
-    },
11
-}
12
-
13
-const validators = {
14
-    params: Joi.object({ user_email: Joi.string() }),
5
+const docs = {
6
+    description: 'get user',
7
+    notes: 'Returns a user by the email passed in the path',
8
+    tags: ['api'],
15 9
 }
16 10
 
17 11
 module.exports = {
18 12
     method: 'GET',
19 13
     path: '/{user_email}',
20 14
     options: {
21
-        ...pluginConfig.docs.get,
22
-        tags: ['api'],
15
+        ...docs,
23 16
         // auth: 'default_jwt',
24 17
         auth: false,
25 18
         cors: true,
26
-        handler: async (request, h) => {
27
-            try {
28
-                const { userService } = request.services()
29
-                const email = request.params.user_email
30
-                const user = await userService.findByEmail(email)
31
-                return {
32
-                    ok: true,
33
-                    handler: pluginConfig.handlerType,
34
-                    data: { user },
35
-                }
36
-            } catch (err) {
37
-                return {
38
-                    ok: false,
39
-                    handler: pluginConfig.handlerType,
40
-                    data: { error: err },
41
-                }
42
-            }
43
-        },
19
+        handler: userHandlers.get,
44 20
         validate: {
45
-            ...validators,
21
+            params: validator,
46 22
             failAction: 'log',
47 23
         },
48
-
49 24
         response: {
50
-            schema: Joi.object({
51
-                ok: Joi.bool(),
52
-                handler: Joi.string(),
53
-                data: Joi.object(),
54
-            }).label('password_res'),
25
+            schema: responseWrapper.label('password_res'),
55 26
             failAction: 'log',
56 27
         },
57 28
     },

+ 11
- 0
backend/lib/schemas/api.js Ver fichero

@@ -0,0 +1,11 @@
1
+const Joi = require('joi')
2
+
3
+const responseWrapper = Joi.object({
4
+    ok: Joi.bool(),
5
+    handler: Joi.string(),
6
+    data: Joi.object(),
7
+})
8
+
9
+module.exports = {
10
+    responseWrapper,
11
+}

+ 2
- 1
backend/lib/schemas/tag-associations.js Ver fichero

@@ -14,7 +14,6 @@ const validator = Joi.object({
14 14
     tag_id: Joi.number().required(),
15 15
 }).label('association__single_validator')
16 16
 
17
-const list = Joi.array().items(single).label('association__list_validator')
18 17
 
19 18
 // single is used to define database models
20 19
 const single = Joi.object({
@@ -25,6 +24,8 @@ const single = Joi.object({
25 24
     _is_deleted: Joi.boolean().required(),
26 25
 }).label('association__single')
27 26
 
27
+const list = Joi.array().items(single).label('association__list_validator')
28
+
28 29
 module.exports = {
29 30
     single,
30 31
     validator,

+ 243
- 0
backend/package-lock.json Ver fichero

@@ -18,6 +18,7 @@
18 18
                 "@hapipal/schwifty": "^6.2.0",
19 19
                 "dotenv": "^16.4.5",
20 20
                 "exiting": "^7.0.0",
21
+                "hapi-swagger": "^17.2.1",
21 22
                 "joi": "^17.13.0",
22 23
                 "knex": "^3.1.0",
23 24
                 "mysql": "^2.18.1",
@@ -25,6 +26,62 @@
25 26
                 "objection": "^3.1.4"
26 27
             }
27 28
         },
29
+        "node_modules/@apidevtools/json-schema-ref-parser": {
30
+            "version": "11.6.4",
31
+            "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-11.6.4.tgz",
32
+            "integrity": "sha512-9K6xOqeevacvweLGik6LnZCb1fBtCOSIWQs8d096XGeqoLKC33UVMGz9+77Gw44KvbH4pKcQPWo4ZpxkXYj05w==",
33
+            "dependencies": {
34
+                "@jsdevtools/ono": "^7.1.3",
35
+                "@types/json-schema": "^7.0.15",
36
+                "js-yaml": "^4.1.0"
37
+            },
38
+            "engines": {
39
+                "node": ">= 16"
40
+            },
41
+            "funding": {
42
+                "url": "https://github.com/sponsors/philsturgeon"
43
+            }
44
+        },
45
+        "node_modules/@apidevtools/openapi-schemas": {
46
+            "version": "2.1.0",
47
+            "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz",
48
+            "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==",
49
+            "engines": {
50
+                "node": ">=10"
51
+            }
52
+        },
53
+        "node_modules/@apidevtools/swagger-methods": {
54
+            "version": "3.0.2",
55
+            "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz",
56
+            "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg=="
57
+        },
58
+        "node_modules/@apidevtools/swagger-parser": {
59
+            "version": "10.0.3",
60
+            "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-10.0.3.tgz",
61
+            "integrity": "sha512-sNiLY51vZOmSPFZA5TF35KZ2HbgYklQnTSDnkghamzLb3EkNtcQnrBQEj5AOCxHpTtXpqMCRM1CrmV2rG6nw4g==",
62
+            "dependencies": {
63
+                "@apidevtools/json-schema-ref-parser": "^9.0.6",
64
+                "@apidevtools/openapi-schemas": "^2.0.4",
65
+                "@apidevtools/swagger-methods": "^3.0.2",
66
+                "@jsdevtools/ono": "^7.1.3",
67
+                "call-me-maybe": "^1.0.1",
68
+                "z-schema": "^5.0.1"
69
+            },
70
+            "peerDependencies": {
71
+                "openapi-types": ">=7"
72
+            }
73
+        },
74
+        "node_modules/@apidevtools/swagger-parser/node_modules/@apidevtools/json-schema-ref-parser": {
75
+            "version": "9.1.2",
76
+            "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.1.2.tgz",
77
+            "integrity": "sha512-r1w81DpR+KyRWd3f+rk6TNqMgedmAxZP5v5KWlXQWlgMUUtyEJch0DKEci1SorPMiSeM8XPl7MZ3miJ60JIpQg==",
78
+            "dependencies": {
79
+                "@jsdevtools/ono": "^7.1.3",
80
+                "@types/json-schema": "^7.0.6",
81
+                "call-me-maybe": "^1.0.1",
82
+                "js-yaml": "^4.1.0"
83
+            }
84
+        },
28 85
         "node_modules/@hapi/accept": {
29 86
             "version": "6.0.3",
30 87
             "resolved": "https://registry.npmjs.org/@hapi/accept/-/accept-6.0.3.tgz",
@@ -488,6 +545,11 @@
488 545
             "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz",
489 546
             "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ=="
490 547
         },
548
+        "node_modules/@jsdevtools/ono": {
549
+            "version": "7.1.3",
550
+            "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz",
551
+            "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg=="
552
+        },
491 553
         "node_modules/@sideway/address": {
492 554
             "version": "4.1.5",
493 555
             "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.5.tgz",
@@ -511,6 +573,11 @@
511 573
             "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz",
512 574
             "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ=="
513 575
         },
576
+        "node_modules/@types/json-schema": {
577
+            "version": "7.0.15",
578
+            "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
579
+            "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
580
+        },
514 581
         "node_modules/abbrev": {
515 582
             "version": "1.1.1",
516 583
             "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
@@ -559,6 +626,11 @@
559 626
                 "node": ">= 8"
560 627
             }
561 628
         },
629
+        "node_modules/argparse": {
630
+            "version": "2.0.1",
631
+            "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
632
+            "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="
633
+        },
562 634
         "node_modules/balanced-match": {
563 635
             "version": "1.0.2",
564 636
             "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
@@ -603,6 +675,11 @@
603 675
                 "node": ">=8"
604 676
             }
605 677
         },
678
+        "node_modules/call-me-maybe": {
679
+            "version": "1.0.2",
680
+            "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz",
681
+            "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ=="
682
+        },
606 683
         "node_modules/chokidar": {
607 684
             "version": "3.6.0",
608 685
             "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz",
@@ -784,6 +861,47 @@
784 861
                 "node": ">= 6"
785 862
             }
786 863
         },
864
+        "node_modules/handlebars": {
865
+            "version": "4.7.8",
866
+            "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
867
+            "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
868
+            "dependencies": {
869
+                "minimist": "^1.2.5",
870
+                "neo-async": "^2.6.2",
871
+                "source-map": "^0.6.1",
872
+                "wordwrap": "^1.0.0"
873
+            },
874
+            "bin": {
875
+                "handlebars": "bin/handlebars"
876
+            },
877
+            "engines": {
878
+                "node": ">=0.4.7"
879
+            },
880
+            "optionalDependencies": {
881
+                "uglify-js": "^3.1.4"
882
+            }
883
+        },
884
+        "node_modules/hapi-swagger": {
885
+            "version": "17.2.1",
886
+            "resolved": "https://registry.npmjs.org/hapi-swagger/-/hapi-swagger-17.2.1.tgz",
887
+            "integrity": "sha512-IaF3OHfYjzDuyi5EQgS0j0xB7sbAAD4DaTwexdhPYqEBI/J7GWMXFbftGObCIOeMVDufjoSBZWeaarEkNn6/ww==",
888
+            "dependencies": {
889
+                "@apidevtools/json-schema-ref-parser": "^11.1.0",
890
+                "@hapi/boom": "^10.0.1",
891
+                "@hapi/hoek": "^11.0.2",
892
+                "handlebars": "^4.7.8",
893
+                "http-status": "^1.7.3",
894
+                "swagger-parser": "^10.0.3",
895
+                "swagger-ui-dist": "^5.9.1"
896
+            },
897
+            "engines": {
898
+                "node": ">=16.0.0"
899
+            },
900
+            "peerDependencies": {
901
+                "@hapi/hapi": ">=20.x.x",
902
+                "joi": "17.x"
903
+            }
904
+        },
787 905
         "node_modules/has-flag": {
788 906
             "version": "3.0.0",
789 907
             "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
@@ -803,6 +921,14 @@
803 921
                 "node": ">= 0.4"
804 922
             }
805 923
         },
924
+        "node_modules/http-status": {
925
+            "version": "1.7.4",
926
+            "resolved": "https://registry.npmjs.org/http-status/-/http-status-1.7.4.tgz",
927
+            "integrity": "sha512-c2qSwNtTlHVYAhMj9JpGdyo0No/+DiKXCJ9pHtZ2Yf3QmPnBIytKSRT7BuyIiQ7icXLynavGmxUqkOjSrAuMuA==",
928
+            "engines": {
929
+                "node": ">= 0.4.0"
930
+            }
931
+        },
806 932
         "node_modules/ignore-by-default": {
807 933
             "version": "1.0.1",
808 934
             "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
@@ -900,6 +1026,17 @@
900 1026
                 "@hapi/hoek": "^9.0.0"
901 1027
             }
902 1028
         },
1029
+        "node_modules/js-yaml": {
1030
+            "version": "4.1.0",
1031
+            "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
1032
+            "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
1033
+            "dependencies": {
1034
+                "argparse": "^2.0.1"
1035
+            },
1036
+            "bin": {
1037
+                "js-yaml": "bin/js-yaml.js"
1038
+            }
1039
+        },
903 1040
         "node_modules/json-schema-traverse": {
904 1041
             "version": "1.0.0",
905 1042
             "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
@@ -972,6 +1109,16 @@
972 1109
             "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
973 1110
             "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
974 1111
         },
1112
+        "node_modules/lodash.get": {
1113
+            "version": "4.4.2",
1114
+            "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
1115
+            "integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ=="
1116
+        },
1117
+        "node_modules/lodash.isequal": {
1118
+            "version": "4.5.0",
1119
+            "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
1120
+            "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ=="
1121
+        },
975 1122
         "node_modules/lru-cache": {
976 1123
             "version": "7.18.3",
977 1124
             "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz",
@@ -999,6 +1146,14 @@
999 1146
                 "node": "*"
1000 1147
             }
1001 1148
         },
1149
+        "node_modules/minimist": {
1150
+            "version": "1.2.8",
1151
+            "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
1152
+            "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
1153
+            "funding": {
1154
+                "url": "https://github.com/sponsors/ljharb"
1155
+            }
1156
+        },
1002 1157
         "node_modules/mo-walk": {
1003 1158
             "version": "1.2.0",
1004 1159
             "resolved": "https://registry.npmjs.org/mo-walk/-/mo-walk-1.2.0.tgz",
@@ -1029,6 +1184,11 @@
1029 1184
                 "node": ">= 0.6"
1030 1185
             }
1031 1186
         },
1187
+        "node_modules/neo-async": {
1188
+            "version": "2.6.2",
1189
+            "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
1190
+            "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw=="
1191
+        },
1032 1192
         "node_modules/nodemon": {
1033 1193
             "version": "3.1.0",
1034 1194
             "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz",
@@ -1094,6 +1254,12 @@
1094 1254
                 "knex": ">=1.0.1"
1095 1255
             }
1096 1256
         },
1257
+        "node_modules/openapi-types": {
1258
+            "version": "12.1.3",
1259
+            "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.1.3.tgz",
1260
+            "integrity": "sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==",
1261
+            "peer": true
1262
+        },
1097 1263
         "node_modules/p-limit": {
1098 1264
             "version": "2.3.0",
1099 1265
             "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -1294,6 +1460,14 @@
1294 1460
                 "node": ">=10"
1295 1461
             }
1296 1462
         },
1463
+        "node_modules/source-map": {
1464
+            "version": "0.6.1",
1465
+            "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
1466
+            "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
1467
+            "engines": {
1468
+                "node": ">=0.10.0"
1469
+            }
1470
+        },
1297 1471
         "node_modules/sqlstring": {
1298 1472
             "version": "2.3.1",
1299 1473
             "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
@@ -1332,6 +1506,22 @@
1332 1506
                 "url": "https://github.com/sponsors/ljharb"
1333 1507
             }
1334 1508
         },
1509
+        "node_modules/swagger-parser": {
1510
+            "version": "10.0.3",
1511
+            "resolved": "https://registry.npmjs.org/swagger-parser/-/swagger-parser-10.0.3.tgz",
1512
+            "integrity": "sha512-nF7oMeL4KypldrQhac8RyHerJeGPD1p2xDh900GPvc+Nk7nWP6jX2FcC7WmkinMoAmoO774+AFXcWsW8gMWEIg==",
1513
+            "dependencies": {
1514
+                "@apidevtools/swagger-parser": "10.0.3"
1515
+            },
1516
+            "engines": {
1517
+                "node": ">=10"
1518
+            }
1519
+        },
1520
+        "node_modules/swagger-ui-dist": {
1521
+            "version": "5.17.14",
1522
+            "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz",
1523
+            "integrity": "sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw=="
1524
+        },
1335 1525
         "node_modules/tarn": {
1336 1526
             "version": "3.0.2",
1337 1527
             "resolved": "https://registry.npmjs.org/tarn/-/tarn-3.0.2.tgz",
@@ -1370,6 +1560,18 @@
1370 1560
                 "nodetouch": "bin/nodetouch.js"
1371 1561
             }
1372 1562
         },
1563
+        "node_modules/uglify-js": {
1564
+            "version": "3.17.4",
1565
+            "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
1566
+            "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
1567
+            "optional": true,
1568
+            "bin": {
1569
+                "uglifyjs": "bin/uglifyjs"
1570
+            },
1571
+            "engines": {
1572
+                "node": ">=0.8.0"
1573
+            }
1574
+        },
1373 1575
         "node_modules/undefsafe": {
1374 1576
             "version": "2.0.5",
1375 1577
             "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
@@ -1388,10 +1590,51 @@
1388 1590
             "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1389 1591
             "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
1390 1592
         },
1593
+        "node_modules/validator": {
1594
+            "version": "13.12.0",
1595
+            "resolved": "https://registry.npmjs.org/validator/-/validator-13.12.0.tgz",
1596
+            "integrity": "sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg==",
1597
+            "engines": {
1598
+                "node": ">= 0.10"
1599
+            }
1600
+        },
1601
+        "node_modules/wordwrap": {
1602
+            "version": "1.0.0",
1603
+            "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
1604
+            "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q=="
1605
+        },
1391 1606
         "node_modules/yallist": {
1392 1607
             "version": "4.0.0",
1393 1608
             "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1394 1609
             "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
1610
+        },
1611
+        "node_modules/z-schema": {
1612
+            "version": "5.0.5",
1613
+            "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-5.0.5.tgz",
1614
+            "integrity": "sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==",
1615
+            "dependencies": {
1616
+                "lodash.get": "^4.4.2",
1617
+                "lodash.isequal": "^4.5.0",
1618
+                "validator": "^13.7.0"
1619
+            },
1620
+            "bin": {
1621
+                "z-schema": "bin/z-schema"
1622
+            },
1623
+            "engines": {
1624
+                "node": ">=8.0.0"
1625
+            },
1626
+            "optionalDependencies": {
1627
+                "commander": "^9.4.1"
1628
+            }
1629
+        },
1630
+        "node_modules/z-schema/node_modules/commander": {
1631
+            "version": "9.5.0",
1632
+            "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz",
1633
+            "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==",
1634
+            "optional": true,
1635
+            "engines": {
1636
+                "node": "^12.20.0 || >=14"
1637
+            }
1395 1638
         }
1396 1639
     }
1397 1640
 }

+ 1
- 0
backend/package.json Ver fichero

@@ -21,6 +21,7 @@
21 21
         "@hapipal/schwifty": "^6.2.0",
22 22
         "dotenv": "^16.4.5",
23 23
         "exiting": "^7.0.0",
24
+        "hapi-swagger": "^17.2.1",
24 25
         "joi": "^17.13.0",
25 26
         "knex": "^3.1.0",
26 27
         "mysql": "^2.18.1",

+ 13
- 1
backend/server/manifest.js Ver fichero

@@ -1,5 +1,8 @@
1
+const Inert = require('@hapi/inert')
2
+const Vision = require('@hapi/vision')
1 3
 const Confidence = require('@hapipal/confidence')
2 4
 const Schwifty = require('@hapipal/schwifty')
5
+const HapiSwagger = require('hapi-swagger')
3 6
 
4 7
 const confs = {
5 8
     local: {
@@ -19,7 +22,7 @@ const confs = {
19 22
         user: process.env.PSCALE_DB_USER,
20 23
         pw: process.env.PSCALE_DB_PASSWORD,
21 24
     },
22
-    dbFlavor: process.env.DB_TYPE
25
+    dbFlavor: process.env.DB_TYPE,
23 26
 }
24 27
 
25 28
 const isProd = () => (process.env.USE_LOCAL_DB == 'true' ? 'local' : 'prod')
@@ -78,6 +81,15 @@ module.exports = new Confidence.Store({
78 81
                     },
79 82
                 },
80 83
             },
84
+            /** Documentaion plugins */
85
+            Inert,
86
+            Vision,
87
+            {
88
+                plugin: HapiSwagger,
89
+                options: {
90
+                    info: { title: 'Test API Documentation' },
91
+                },
92
+            },
81 93
             /** Model and knex integration */
82 94
             {
83 95
                 plugin: Schwifty,

Loading…
Cancelar
Guardar