From 4e8f1373b1224359cba57ac779e3beec3a98783c Mon Sep 17 00:00:00 2001 From: Blair Anderson Date: Mon, 9 Mar 2015 22:42:16 -0700 Subject: [PATCH] cleanup item, add spring. update swagger --- Gemfile | 2 +- Gemfile.lock | 2 + app/models/item.rb | 2 +- public/swagger.json | 192 ++++------ public/swagger_v2.json | 827 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 897 insertions(+), 128 deletions(-) create mode 100644 public/swagger_v2.json diff --git a/Gemfile b/Gemfile index bd843bc..4b5e54e 100644 --- a/Gemfile +++ b/Gemfile @@ -25,7 +25,7 @@ group :development, :test do gem 'web-console', '~> 2.0' # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring - # gem 'spring' + gem 'spring' gem 'swagger-docs' diff --git a/Gemfile.lock b/Gemfile.lock index 0d5bceb..6cea4c9 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -212,6 +212,7 @@ GEM bcrypt (~> 3.1) oauth (~> 0.4, >= 0.4.4) oauth2 (>= 0.8.0) + spring (1.3.3) sprockets (2.12.3) hike (~> 1.2) multi_json (~> 1.0) @@ -266,6 +267,7 @@ DEPENDENCIES sass-rails (~> 5.0) simple_form sorcery (= 0.9.0) + spring swagger-docs turbolinks uglifier (>= 1.3.0) diff --git a/app/models/item.rb b/app/models/item.rb index 2a64d8c..d254782 100644 --- a/app/models/item.rb +++ b/app/models/item.rb @@ -3,7 +3,7 @@ class Item < ActiveRecord::Base has_many :votes, as: :votable has_many :comments, class_name: "ItemComment" - validates_presence_of :title, allow_blank: false + validates :title, presence: true, length: { maximum: 250 }, allow_blank: false, allow_nil: false validate do if content.blank? && url.blank? diff --git a/public/swagger.json b/public/swagger.json index 036faf1..6904f76 100644 --- a/public/swagger.json +++ b/public/swagger.json @@ -11,13 +11,7 @@ { "method": "GET", "summary": "item_comments", - "notes": { - "model": "Comment", - "resources": "comments", - "parent_resource": "items", - "controller": "active_api/nested_active_api", - "action": "index" - }, + "notes": "{:model=>\"Comment\", :resources=>\"comments\", :parent_resource=>:items, :controller=>\"active_api/nested_active_api\", :action=>\"index\"}", "nickname": "item_comments", "parameters": [ { @@ -32,13 +26,7 @@ { "method": "POST", "summary": "item_comments", - "notes": { - "model": "Comment", - "resources": "comments", - "parent_resource": "items", - "controller": "active_api/nested_active_api", - "action": "create" - }, + "notes": "{:model=>\"Comment\", :resources=>\"comments\", :parent_resource=>:items, :controller=>\"active_api/nested_active_api\", :action=>\"create\"}", "nickname": "item_comments", "parameters": [ { @@ -52,20 +40,14 @@ } ], "description": "POST : item_comments", - "path": "/items/:item_id/comments(.:format)" + "path": "/items/:item_id/comments" }, { "operations": [ { "method": "GET", "summary": "item_comment", - "notes": { - "model": "Comment", - "resources": "comments", - "parent_resource": "items", - "controller": "active_api/nested_active_api", - "action": "show" - }, + "notes": "{:model=>\"Comment\", :resources=>\"comments\", :parent_resource=>:items, :controller=>\"active_api/nested_active_api\", :action=>\"show\"}", "nickname": "item_comment", "parameters": [ { @@ -80,13 +62,7 @@ { "method": "PATCH", "summary": "item_comment", - "notes": { - "model": "Comment", - "resources": "comments", - "parent_resource": "items", - "controller": "active_api/nested_active_api", - "action": "update" - }, + "notes": "{:model=>\"Comment\", :resources=>\"comments\", :parent_resource=>:items, :controller=>\"active_api/nested_active_api\", :action=>\"update\"}", "nickname": "item_comment", "parameters": [ { @@ -101,13 +77,7 @@ { "method": "PUT", "summary": "item_comment", - "notes": { - "model": "Comment", - "resources": "comments", - "parent_resource": "items", - "controller": "active_api/nested_active_api", - "action": "update" - }, + "notes": "{:model=>\"Comment\", :resources=>\"comments\", :parent_resource=>:items, :controller=>\"active_api/nested_active_api\", :action=>\"update\"}", "nickname": "item_comment", "parameters": [ { @@ -122,13 +92,7 @@ { "method": "DELETE", "summary": "item_comment", - "notes": { - "model": "Comment", - "resources": "comments", - "parent_resource": "items", - "controller": "active_api/nested_active_api", - "action": "destroy" - }, + "notes": "{:model=>\"Comment\", :resources=>\"comments\", :parent_resource=>:items, :controller=>\"active_api/nested_active_api\", :action=>\"destroy\"}", "nickname": "item_comment", "parameters": [ { @@ -142,19 +106,14 @@ } ], "description": "DELETE : item_comment", - "path": "/items/:item_id/comments/:id(.:format)" + "path": "/items/:item_id/comments/:id" }, { "operations": [ { "method": "GET", "summary": "items", - "notes": { - "model": "Item", - "resources": "items", - "controller": "active_api/active_api", - "action": "index" - }, + "notes": "{:model=>\"Item\", :resources=>\"items\", :controller=>\"active_api/active_api\", :action=>\"index\"}", "nickname": "items", "parameters": [ { @@ -169,12 +128,7 @@ { "method": "POST", "summary": "items", - "notes": { - "model": "Item", - "resources": "items", - "controller": "active_api/active_api", - "action": "create" - }, + "notes": "{:model=>\"Item\", :resources=>\"items\", :controller=>\"active_api/active_api\", :action=>\"create\"}", "nickname": "items", "parameters": [ { @@ -188,19 +142,14 @@ } ], "description": "POST : items", - "path": "/items(.:format)" + "path": "/items" }, { "operations": [ { "method": "GET", "summary": "item", - "notes": { - "model": "Item", - "resources": "items", - "controller": "active_api/active_api", - "action": "show" - }, + "notes": "{:model=>\"Item\", :resources=>\"items\", :controller=>\"active_api/active_api\", :action=>\"show\"}", "nickname": "item", "parameters": [ { @@ -215,12 +164,7 @@ { "method": "PATCH", "summary": "item", - "notes": { - "model": "Item", - "resources": "items", - "controller": "active_api/active_api", - "action": "update" - }, + "notes": "{:model=>\"Item\", :resources=>\"items\", :controller=>\"active_api/active_api\", :action=>\"update\"}", "nickname": "item", "parameters": [ { @@ -235,12 +179,7 @@ { "method": "PUT", "summary": "item", - "notes": { - "model": "Item", - "resources": "items", - "controller": "active_api/active_api", - "action": "update" - }, + "notes": "{:model=>\"Item\", :resources=>\"items\", :controller=>\"active_api/active_api\", :action=>\"update\"}", "nickname": "item", "parameters": [ { @@ -255,12 +194,7 @@ { "method": "DELETE", "summary": "item", - "notes": { - "model": "Item", - "resources": "items", - "controller": "active_api/active_api", - "action": "destroy" - }, + "notes": "{:model=>\"Item\", :resources=>\"items\", :controller=>\"active_api/active_api\", :action=>\"destroy\"}", "nickname": "item", "parameters": [ { @@ -274,20 +208,14 @@ } ], "description": "DELETE : item", - "path": "/items/:id(.:format)" + "path": "/items/:id" }, { "operations": [ { "method": "GET", "summary": "users", - "notes": { - "model": "User", - "resources": "users", - "serializer": "human", - "controller": "active_api/active_api", - "action": "index" - }, + "notes": "{:model=>\"User\", :resources=>\"users\", :serializer=>\"human\", :controller=>\"active_api/active_api\", :action=>\"index\"}", "nickname": "users", "parameters": [ { @@ -302,13 +230,7 @@ { "method": "POST", "summary": "users", - "notes": { - "model": "User", - "resources": "users", - "serializer": "human", - "controller": "active_api/active_api", - "action": "create" - }, + "notes": "{:model=>\"User\", :resources=>\"users\", :serializer=>\"human\", :controller=>\"active_api/active_api\", :action=>\"create\"}", "nickname": "users", "parameters": [ { @@ -322,20 +244,14 @@ } ], "description": "POST : users", - "path": "/users(.:format)" + "path": "/users" }, { "operations": [ { "method": "GET", "summary": "user", - "notes": { - "model": "User", - "resources": "users", - "serializer": "human", - "controller": "active_api/active_api", - "action": "show" - }, + "notes": "{:model=>\"User\", :resources=>\"users\", :serializer=>\"human\", :controller=>\"active_api/active_api\", :action=>\"show\"}", "nickname": "user", "parameters": [ { @@ -350,13 +266,7 @@ { "method": "PATCH", "summary": "user", - "notes": { - "model": "User", - "resources": "users", - "serializer": "human", - "controller": "active_api/active_api", - "action": "update" - }, + "notes": "{:model=>\"User\", :resources=>\"users\", :serializer=>\"human\", :controller=>\"active_api/active_api\", :action=>\"update\"}", "nickname": "user", "parameters": [ { @@ -371,13 +281,7 @@ { "method": "PUT", "summary": "user", - "notes": { - "model": "User", - "resources": "users", - "serializer": "human", - "controller": "active_api/active_api", - "action": "update" - }, + "notes": "{:model=>\"User\", :resources=>\"users\", :serializer=>\"human\", :controller=>\"active_api/active_api\", :action=>\"update\"}", "nickname": "user", "parameters": [ { @@ -392,13 +296,7 @@ { "method": "DELETE", "summary": "user", - "notes": { - "model": "User", - "resources": "users", - "serializer": "human", - "controller": "active_api/active_api", - "action": "destroy" - }, + "notes": "{:model=>\"User\", :resources=>\"users\", :serializer=>\"human\", :controller=>\"active_api/active_api\", :action=>\"destroy\"}", "nickname": "user", "parameters": [ { @@ -412,7 +310,49 @@ } ], "description": "DELETE : user", - "path": "/users/:id(.:format)" + "path": "/users/:id" + }, + { + "operations": [ + { + "method": "GET", + "summary": "root", + "notes": "{:controller=>\"active_api/application\", :action=>\"root\"}", + "nickname": "root", + "parameters": [ + { + "name": "body", + "description": "param description.", + "required": true, + "type": null, + "paramType": "body" + } + ] + } + ], + "description": "GET : root", + "path": "" + }, + { + "operations": [ + { + "method": "", + "summary": "grape_swagger_rails", + "notes": "{}", + "nickname": "grape_swagger_rails", + "parameters": [ + { + "name": "body", + "description": "param description.", + "required": true, + "type": null, + "paramType": "body" + } + ] + } + ], + "description": " : grape_swagger_rails", + "path": "/api-doc" } ], "info": { diff --git a/public/swagger_v2.json b/public/swagger_v2.json new file mode 100644 index 0000000..adc334f --- /dev/null +++ b/public/swagger_v2.json @@ -0,0 +1,827 @@ +{ + "swagger": "2.0", + "info": { + "description": "This is a sample server Petstore server. You can find out more about Swagger at http://swagger.io or on irc.freenode.net, #swagger. For this sample, you can use the api key \"special-key\" to test the authorization filters", + "version": "1.0.0", + "title": "Swagger Petstore", + "termsOfService": "http://helloreverb.com/terms/", + "contact": {"email": "apiteam@wordnik.com"}, + "license": { + "name": "Apache 2.0", + "url": "http://www.apache.org/licenses/LICENSE-2.0.html" + } + }, + "host": "petstore.swagger.io", + "basePath": "/v2", + "tags": [ + { + "name": "pet", + "description": "Everything about your Pets", + "externalDocs": { + "description": "Find out more", + "url": "http://swagger.io" + } + }, + { + "name": "user", + "description": "Operations about user" + }, + { + "name": "store", + "description": "Access to Petstore orders", + "externalDocs": { + "description": "Find out more", + "url": "http://swagger.io" + } + } + ], + "schemes": ["http"], + "paths": { + "/pet": { + "post": { + "tags": ["pet"], + "summary": "Add a new pet to the store", + "description": "", + "operationId": "addPet", + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "Pet object that needs to be added to the store", + "required": false, + "schema": {"$ref": "#/definitions/Pet"} + } + ], + "responses": {"405": {"description": "Invalid input"}}, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + }, + "put": { + "tags": ["pet"], + "summary": "Update an existing pet", + "description": "", + "operationId": "updatePet", + "consumes": [ + "application/json", + "application/xml" + ], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "Pet object that needs to be added to the store", + "required": false, + "schema": {"$ref": "#/definitions/Pet"} + } + ], + "responses": { + "405": {"description": "Validation exception"}, + "404": {"description": "Pet not found"}, + "400": {"description": "Invalid ID supplied"} + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/findByStatus": { + "get": { + "tags": ["pet"], + "summary": "Finds Pets by status", + "description": "Multiple status values can be provided with comma seperated strings", + "operationId": "findPetsByStatus", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "status", + "in": "query", + "description": "Status values that need to be considered for filter", + "required": false, + "type": "array", + "items": {"type": "string"}, + "collectionFormat": "multi", + "default": "available", + "enum": [ + "available", + "pending", + "sold" + ] + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "type": "array", + "items": {"$ref": "#/definitions/Pet"} + } + }, + "400": {"description": "Invalid status value"} + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/findByTags": { + "get": { + "tags": ["pet"], + "summary": "Finds Pets by tags", + "description": "Muliple tags can be provided with comma seperated strings. Use tag1, tag2, tag3 for testing.", + "operationId": "findPetsByTags", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "tags", + "in": "query", + "description": "Tags to filter by", + "required": false, + "type": "array", + "items": {"type": "string"}, + "collectionFormat": "multi" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "type": "array", + "items": {"$ref": "#/definitions/Pet"} + } + }, + "400": {"description": "Invalid tag value"} + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/{petId}": { + "get": { + "tags": ["pet"], + "summary": "Find pet by ID", + "description": "Returns a pet when ID < 10. ID > 10 or nonintegers will simulate API error conditions", + "operationId": "getPetById", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet that needs to be fetched", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": { + "404": {"description": "Pet not found"}, + "200": { + "description": "successful operation", + "schema": {"$ref": "#/definitions/Pet"} + }, + "400": {"description": "Invalid ID supplied"} + }, + "security": [ + {"api_key": []}, + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + }, + "post": { + "tags": ["pet"], + "summary": "Updates a pet in the store with form data", + "description": "", + "operationId": "updatePetWithForm", + "consumes": ["application/x-www-form-urlencoded"], + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet that needs to be updated", + "required": true, + "type": "string" + }, + { + "name": "name", + "in": "formData", + "description": "Updated name of the pet", + "required": false, + "type": "string" + }, + { + "name": "status", + "in": "formData", + "description": "Updated status of the pet", + "required": false, + "type": "string" + } + ], + "responses": {"405": {"description": "Invalid input"}}, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + }, + "delete": { + "tags": ["pet"], + "summary": "Deletes a pet", + "description": "", + "operationId": "deletePet", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "api_key", + "in": "header", + "description": "", + "required": false, + "type": "string" + }, + { + "name": "petId", + "in": "path", + "description": "Pet id to delete", + "required": true, + "type": "integer", + "format": "int64" + } + ], + "responses": {"400": {"description": "Invalid pet value"}}, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/pet/{petId}/uploadImage": { + "post": { + "tags": ["pet"], + "summary": "uploads an image", + "description": "", + "operationId": "uploadFile", + "consumes": ["multipart/form-data"], + "produces": ["application/json"], + "parameters": [ + { + "name": "petId", + "in": "path", + "description": "ID of pet to update", + "required": true, + "type": "integer", + "format": "int64" + }, + { + "name": "additionalMetadata", + "in": "formData", + "description": "Additional data to pass to server", + "required": false, + "type": "string" + }, + { + "name": "file", + "in": "formData", + "description": "file to upload", + "required": false, + "type": "file" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": {"$ref": "#/definitions/ApiResponse"} + } + }, + "security": [ + { + "petstore_auth": [ + "write:pets", + "read:pets" + ] + } + ] + } + }, + "/store/inventory": { + "get": { + "tags": ["store"], + "summary": "Returns pet inventories by status", + "description": "Returns a map of status codes to quantities", + "operationId": "getInventory", + "produces": [ + "application/json", + "application/xml" + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "type": "object", + "additionalProperties": { + "type": "integer", + "format": "int32" + } + } + } + }, + "security": [{"api_key": []}] + } + }, + "/store/order": { + "post": { + "tags": ["store"], + "summary": "Place an order for a pet", + "description": "", + "operationId": "placeOrder", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "order placed for purchasing the pet", + "required": false, + "schema": {"$ref": "#/definitions/Order"} + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": {"$ref": "#/definitions/Order"} + }, + "400": {"description": "Invalid Order"} + } + } + }, + "/store/order/{orderId}": { + "get": { + "tags": ["store"], + "summary": "Find purchase order by ID", + "description": "For valid response try integer IDs with value <= 5 or > 10. Other values will generated exceptions", + "operationId": "getOrderById", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of pet that needs to be fetched", + "required": true, + "type": "string" + } + ], + "responses": { + "404": {"description": "Order not found"}, + "200": { + "description": "successful operation", + "schema": {"$ref": "#/definitions/Order"} + }, + "400": {"description": "Invalid ID supplied"} + } + }, + "delete": { + "tags": ["store"], + "summary": "Delete purchase order by ID", + "description": "For valid response try integer IDs with value < 1000. Anything above 1000 or nonintegers will generate API errors", + "operationId": "deleteOrder", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "orderId", + "in": "path", + "description": "ID of the order that needs to be deleted", + "required": true, + "type": "string" + } + ], + "responses": { + "404": {"description": "Order not found"}, + "400": {"description": "Invalid ID supplied"} + } + } + }, + "/user": { + "post": { + "tags": ["user"], + "summary": "Create user", + "description": "This can only be done by the logged in user.", + "operationId": "createUser", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "Created user object", + "required": false, + "schema": {"$ref": "#/definitions/User"} + } + ], + "responses": {"default": {"description": "successful operation"}} + } + }, + "/user/createWithArray": { + "post": { + "tags": ["user"], + "summary": "Creates list of users with given input array", + "description": "", + "operationId": "createUsersWithArrayInput", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "List of user object", + "required": false, + "schema": { + "type": "array", + "items": {"$ref": "#/definitions/User"} + } + } + ], + "responses": {"default": {"description": "successful operation"}} + } + }, + "/user/createWithList": { + "post": { + "tags": ["user"], + "summary": "Creates list of users with given input array", + "description": "", + "operationId": "createUsersWithListInput", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "List of user object", + "required": false, + "schema": { + "type": "array", + "items": {"$ref": "#/definitions/User"} + } + } + ], + "responses": {"default": {"description": "successful operation"}} + } + }, + "/user/login": { + "get": { + "tags": ["user"], + "summary": "Logs user into the system", + "description": "", + "operationId": "loginUser", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "username", + "in": "query", + "description": "The user name for login", + "required": false, + "type": "string" + }, + { + "name": "password", + "in": "query", + "description": "The password for login in clear text", + "required": false, + "type": "string" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": {"type": "string"}, + "headers": { + "X-Rate-Limit": { + "type": "integer", + "format": "int32", + "description": "calls per hour allowed by the user" + }, + "X-Expires-After": { + "type": "string", + "format": "date-time", + "description": "date in UTC when toekn expires" + } + } + }, + "400": {"description": "Invalid username/password supplied"} + } + } + }, + "/user/logout": { + "get": { + "tags": ["user"], + "summary": "Logs out current logged in user session", + "description": "", + "operationId": "logoutUser", + "produces": [ + "application/json", + "application/xml" + ], + "responses": {"default": {"description": "successful operation"}} + } + }, + "/user/{username}": { + "get": { + "tags": ["user"], + "summary": "Get user by user name", + "description": "", + "operationId": "getUserByName", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be fetched. Use user1 for testing. ", + "required": true, + "type": "string" + } + ], + "responses": { + "404": {"description": "User not found"}, + "200": { + "description": "successful operation", + "schema": {"$ref": "#/definitions/User"} + }, + "400": {"description": "Invalid username supplied"} + } + }, + "put": { + "tags": ["user"], + "summary": "Updated user", + "description": "This can only be done by the logged in user.", + "operationId": "updateUser", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "name that need to be deleted", + "required": true, + "type": "string" + }, + { + "in": "body", + "name": "body", + "description": "Updated user object", + "required": false, + "schema": {"$ref": "#/definitions/User"} + } + ], + "responses": { + "404": {"description": "User not found"}, + "400": {"description": "Invalid user supplied"} + } + }, + "delete": { + "tags": ["user"], + "summary": "Delete user", + "description": "This can only be done by the logged in user.", + "operationId": "deleteUser", + "produces": [ + "application/json", + "application/xml" + ], + "parameters": [ + { + "name": "username", + "in": "path", + "description": "The name that needs to be deleted", + "required": true, + "type": "string" + } + ], + "responses": { + "404": {"description": "User not found"}, + "400": {"description": "Invalid username supplied"} + } + } + } + }, + "securityDefinitions": { + "api_key": { + "type": "apiKey", + "name": "api_key", + "in": "header" + }, + "petstore_auth": { + "type": "oauth2", + "authorizationUrl": "http://petstore.swagger.io/api/oauth/dialog", + "flow": "implicit", + "scopes": { + "write:pets": "modify pets in your account", + "read:pets": "read your pets" + } + } + }, + "definitions": { + "User": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "username": {"type": "string"}, + "firstName": {"type": "string"}, + "lastName": {"type": "string"}, + "email": {"type": "string"}, + "password": {"type": "string"}, + "phone": {"type": "string"}, + "userStatus": { + "type": "integer", + "format": "int32", + "description": "User Status" + } + }, + "xml": {"name": "User"} + }, + "ApiResponse": { + "properties": { + "code": { + "type": "integer", + "format": "int32" + }, + "type": {"type": "string"}, + "message": {"type": "string"} + }, + "xml": {"name": "##default"} + }, + "Category": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": {"type": "string"} + }, + "xml": {"name": "Category"} + }, + "Pet": { + "required": [ + "name", + "photoUrls" + ], + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "category": {"$ref": "#/definitions/Category"}, + "name": { + "type": "string", + "example": "doggie" + }, + "photoUrls": { + "type": "array", + "xml": { + "name": "photoUrl", + "wrapped": true + }, + "items": {"type": "string"} + }, + "tags": { + "type": "array", + "xml": { + "name": "tag", + "wrapped": true + }, + "items": {"$ref": "#/definitions/Tag"} + }, + "status": { + "type": "string", + "description": "pet status in the store", + "enum": [ + "available", + "pending", + "sold" + ] + } + }, + "xml": {"name": "Pet"} + }, + "Tag": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "name": {"type": "string"} + }, + "xml": {"name": "Tag"} + }, + "Order": { + "properties": { + "id": { + "type": "integer", + "format": "int64" + }, + "petId": { + "type": "integer", + "format": "int64" + }, + "quantity": { + "type": "integer", + "format": "int32" + }, + "shipDate": { + "type": "string", + "format": "date-time" + }, + "status": { + "type": "string", + "description": "Order Status", + "enum": [ + "placed", + "approved", + "delivered" + ] + }, + "complete": {"type": "boolean"} + }, + "xml": {"name": "Order"} + } + } +}