11"use strict" ;
22var swaggerPaths = module . exports = { } ;
33var jsonApi = require ( "../../" ) ;
4+ var _ = {
5+ uniq : require ( "lodash.uniq" )
6+ } ;
47
58
69swaggerPaths . getPathDefinitions = function ( ) {
@@ -40,31 +43,36 @@ swaggerPaths._addBasicPaths = function(paths, resourceName, resourceConfig) {
4043 handler : "search" ,
4144 resourceName : resourceName ,
4245 description : "Search for " + resourceName ,
43- parameters : resourceConfig . searchParams
46+ parameters : resourceConfig . searchParams ,
47+ hasPathId : false
4448 } ) ,
4549 post : swaggerPaths . _getPathOperationObject ( {
4650 handler : "create" ,
4751 resourceName : resourceName ,
4852 description : "Create a new instance of " + resourceName ,
49- parameters : resourceConfig . attributes
53+ parameters : resourceConfig . attributes ,
54+ hasPathId : false
5055 } )
5156 } ;
5257
5358 paths [ "/" + resourceName + "/{id}" ] = {
5459 get : swaggerPaths . _getPathOperationObject ( {
5560 handler : "find" ,
5661 resourceName : resourceName ,
57- description : "Get a specific instance of " + resourceName
62+ description : "Get a specific instance of " + resourceName ,
63+ hasPathId : true
5864 } ) ,
5965 delete : swaggerPaths . _getPathOperationObject ( {
6066 handler : "delete" ,
6167 resourceName : resourceName ,
62- description : "Delete an instance of " + resourceName
68+ description : "Delete an instance of " + resourceName ,
69+ hasPathId : true
6370 } ) ,
6471 patch : swaggerPaths . _getPathOperationObject ( {
6572 handler : "update" ,
6673 resourceName : resourceName ,
67- description : "Update an instance of " + resourceName
74+ description : "Update an instance of " + resourceName ,
75+ hasPathId : true
6876 } )
6977 } ;
7078} ;
@@ -73,7 +81,8 @@ swaggerPaths._addDeepPaths = function(paths, resourceName, resourceConfig, relat
7381 paths [ "/" + resourceName + "/{id}/" + relationName ] = {
7482 get : swaggerPaths . _getPathOperationObject ( {
7583 handler : "find" ,
76- resourceName : relation
84+ resourceName : relation ,
85+ hasPathId : true
7786 } )
7887 } ;
7988
@@ -83,25 +92,29 @@ swaggerPaths._addDeepPaths = function(paths, resourceName, resourceConfig, relat
8392 handler : "find" ,
8493 resourceName : relation ,
8594 relationType : relationType ,
86- extraTags : resourceName
95+ extraTags : resourceName ,
96+ hasPathId : true
8797 } ) ,
8898 post : swaggerPaths . _getPathOperationObject ( {
8999 handler : "create" ,
90100 resourceName : relation ,
91101 relationType : relationType ,
92- extraTags : resourceName
102+ extraTags : resourceName ,
103+ hasPathId : true
93104 } ) ,
94105 patch : swaggerPaths . _getPathOperationObject ( {
95106 handler : "update" ,
96107 resourceName : relation ,
97108 relationType : relationType ,
98- extraTags : resourceName
109+ extraTags : resourceName ,
110+ hasPathId : true
99111 } ) ,
100112 delete : swaggerPaths . _getPathOperationObject ( {
101113 handler : "delete" ,
102114 resourceName : relation ,
103115 relationType : relationType ,
104- extraTags : resourceName
116+ extraTags : resourceName ,
117+ hasPathId : true
105118 } )
106119 } ;
107120} ;
@@ -116,7 +129,7 @@ swaggerPaths._getPathOperationObject = function(options) {
116129 description : options . resourceName + " " + options . handler + " response" ,
117130 schema : {
118131 type : "object" ,
119- required : [ "jsonapi" , "meta, links" ] ,
132+ required : [ "jsonapi" , "meta" , " links" ] ,
120133 properties : {
121134 jsonapi : {
122135 type : "object" ,
@@ -164,6 +177,7 @@ swaggerPaths._getPathOperationObject = function(options) {
164177 } ;
165178 if ( options . extraTags ) {
166179 pathDefinition . tags = pathDefinition . tags . concat ( options . extraTags ) ;
180+ pathDefinition . tags = _ . uniq ( pathDefinition . tags ) ;
167181 }
168182
169183 var responseShortcut = pathDefinition . responses [ "200" ] . schema . properties ;
@@ -180,7 +194,10 @@ swaggerPaths._getPathOperationObject = function(options) {
180194 if ( ( ( options . handler === "search" ) || ( options . handler === "find" ) ) && ! options . relation ) {
181195 pathDefinition . parameters = pathDefinition . parameters . concat ( swaggerPaths . _optionalJsonApiParameters ( ) ) ;
182196 responseShortcut . included = {
183- type : "array"
197+ type : "array" ,
198+ items : {
199+ type : "object"
200+ }
184201 } ;
185202 }
186203
@@ -214,7 +231,7 @@ swaggerPaths._getPathOperationObject = function(options) {
214231 pathDefinition . responses [ "200" ] = undefined ;
215232 }
216233
217- if ( ( options . handler !== "search" ) && ( options . handler !== "create" ) ) {
234+ if ( options . hasPathId ) {
218235 pathDefinition . parameters . push ( {
219236 name : "id" ,
220237 in : "path" ,
@@ -258,7 +275,8 @@ swaggerPaths._optionalJsonApiParameters = function() {
258275 { "$ref" : "#/parameters/sort" } ,
259276 { "$ref" : "#/parameters/include" } ,
260277 { "$ref" : "#/parameters/filter" } ,
261- { "$ref" : "#/parameters/fields" }
278+ { "$ref" : "#/parameters/fields" } ,
279+ { "$ref" : "#/parameters/page" }
262280 ] ;
263281} ;
264282
0 commit comments