{ "swagger": "2.0", "info": { "description": "This is a simple Rest API Server Template that implements some basic User and Authentication patterns to help you get started and bootstrap your next project!.", "title": "Go API Templates", "contact": { "name": "Don't" }, "license": { "name": "MIT" }, "version": "1.0" }, "basePath": "/api", "paths": { "/v1/items": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Items" ], "summary": "Get All Items", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/server.Results" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/definitions/types.ItemOut" } } } } ] } } } }, "post": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Items" ], "summary": "Create a new item", "parameters": [ { "description": "Item Data", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/types.ItemCreate" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/types.ItemSummary" } } } } }, "/v1/items/import": { "post": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Items" ], "summary": "imports items into the database", "parameters": [ { "type": "file", "description": "Image to upload", "name": "csv", "in": "formData", "required": true } ], "responses": { "204": { "description": "" } } } }, "/v1/items/{id}": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Items" ], "summary": "Gets a item and fields", "parameters": [ { "type": "string", "description": "Item ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/types.ItemOut" } } } }, "put": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Items" ], "summary": "updates a item", "parameters": [ { "type": "string", "description": "Item ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/types.ItemOut" } } } }, "delete": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Items" ], "summary": "deletes a item", "parameters": [ { "type": "string", "description": "Item ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "" } } } }, "/v1/labels": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Labels" ], "summary": "Get All Labels", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/server.Results" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/definitions/types.LabelOut" } } } } ] } } } }, "post": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Labels" ], "summary": "Create a new label", "parameters": [ { "description": "Label Data", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/types.LabelCreate" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/types.LabelSummary" } } } } }, "/v1/labels/{id}": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Labels" ], "summary": "Gets a label and fields", "parameters": [ { "type": "string", "description": "Label ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/types.LabelOut" } } } }, "put": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Labels" ], "summary": "updates a label", "parameters": [ { "type": "string", "description": "Label ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/types.LabelOut" } } } }, "delete": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Labels" ], "summary": "deletes a label", "parameters": [ { "type": "string", "description": "Label ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "" } } } }, "/v1/locations": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Locations" ], "summary": "Get All Locations", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/server.Results" }, { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/definitions/types.LocationCount" } } } } ] } } } }, "post": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Locations" ], "summary": "Create a new location", "parameters": [ { "description": "Location Data", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/types.LocationCreate" } } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/types.LocationSummary" } } } } }, "/v1/locations/{id}": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Locations" ], "summary": "Gets a location and fields", "parameters": [ { "type": "string", "description": "Location ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/types.LocationOut" } } } }, "put": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Locations" ], "summary": "updates a location", "parameters": [ { "type": "string", "description": "Location ID", "name": "id", "in": "path", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/types.LocationOut" } } } }, "delete": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "Locations" ], "summary": "deletes a location", "parameters": [ { "type": "string", "description": "Location ID", "name": "id", "in": "path", "required": true } ], "responses": { "204": { "description": "" } } } }, "/v1/status": { "get": { "produces": [ "application/json" ], "tags": [ "Base" ], "summary": "Retrieves the basic information about the API", "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/types.ApiSummary" } } } } }, "/v1/users/login": { "post": { "consumes": [ "application/x-www-form-urlencoded", "application/json" ], "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "User Login", "parameters": [ { "type": "string", "example": "admin@admin.com", "description": "string", "name": "username", "in": "formData" }, { "type": "string", "example": "admin", "description": "string", "name": "password", "in": "formData" } ], "responses": { "200": { "description": "OK", "schema": { "$ref": "#/definitions/types.TokenResponse" } } } } }, "/v1/users/logout": { "post": { "security": [ { "Bearer": [] } ], "tags": [ "Authentication" ], "summary": "User Logout", "responses": { "204": { "description": "" } } } }, "/v1/users/refresh": { "get": { "security": [ { "Bearer": [] } ], "description": "handleAuthRefresh returns a handler that will issue a new token from an existing token.\nThis does not validate that the user still exists within the database.", "tags": [ "Authentication" ], "summary": "User Token Refresh", "responses": { "200": { "description": "" } } } }, "/v1/users/register": { "post": { "produces": [ "application/json" ], "tags": [ "User" ], "summary": "Get the current user", "parameters": [ { "description": "User Data", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/types.UserRegistration" } } ], "responses": { "204": { "description": "" } } } }, "/v1/users/self": { "get": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "User" ], "summary": "Get the current user", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/server.Result" }, { "type": "object", "properties": { "item": { "$ref": "#/definitions/ent.User" } } } ] } } } }, "put": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "User" ], "summary": "Update the current user", "parameters": [ { "description": "User Data", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/types.UserUpdate" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/server.Result" }, { "type": "object", "properties": { "item": { "$ref": "#/definitions/types.UserUpdate" } } } ] } } } }, "delete": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "User" ], "summary": "Deletes the user account", "responses": { "204": { "description": "" } } } }, "/v1/users/self/password": { "put": { "security": [ { "Bearer": [] } ], "produces": [ "application/json" ], "tags": [ "User" ], "summary": "Update the current user's password // TODO:", "responses": { "204": { "description": "" } } } } }, "definitions": { "ent.AuthTokens": { "type": "object", "properties": { "created_at": { "description": "CreatedAt holds the value of the \"created_at\" field.", "type": "string" }, "edges": { "description": "Edges holds the relations/edges for other nodes in the graph.\nThe values are being populated by the AuthTokensQuery when eager-loading is set.", "$ref": "#/definitions/ent.AuthTokensEdges" }, "expires_at": { "description": "ExpiresAt holds the value of the \"expires_at\" field.", "type": "string" }, "id": { "description": "ID of the ent.", "type": "string" }, "token": { "description": "Token holds the value of the \"token\" field.", "type": "array", "items": { "type": "integer" } }, "updated_at": { "description": "UpdatedAt holds the value of the \"updated_at\" field.", "type": "string" } } }, "ent.AuthTokensEdges": { "type": "object", "properties": { "user": { "description": "User holds the value of the user edge.", "$ref": "#/definitions/ent.User" } } }, "ent.Group": { "type": "object", "properties": { "created_at": { "description": "CreatedAt holds the value of the \"created_at\" field.", "type": "string" }, "currency": { "description": "Currency holds the value of the \"currency\" field.", "type": "string" }, "edges": { "description": "Edges holds the relations/edges for other nodes in the graph.\nThe values are being populated by the GroupQuery when eager-loading is set.", "$ref": "#/definitions/ent.GroupEdges" }, "id": { "description": "ID of the ent.", "type": "string" }, "name": { "description": "Name holds the value of the \"name\" field.", "type": "string" }, "updated_at": { "description": "UpdatedAt holds the value of the \"updated_at\" field.", "type": "string" } } }, "ent.GroupEdges": { "type": "object", "properties": { "items": { "description": "Items holds the value of the items edge.", "type": "array", "items": { "$ref": "#/definitions/ent.Item" } }, "labels": { "description": "Labels holds the value of the labels edge.", "type": "array", "items": { "$ref": "#/definitions/ent.Label" } }, "locations": { "description": "Locations holds the value of the locations edge.", "type": "array", "items": { "$ref": "#/definitions/ent.Location" } }, "users": { "description": "Users holds the value of the users edge.", "type": "array", "items": { "$ref": "#/definitions/ent.User" } } } }, "ent.Item": { "type": "object", "properties": { "created_at": { "description": "CreatedAt holds the value of the \"created_at\" field.", "type": "string" }, "description": { "description": "Description holds the value of the \"description\" field.", "type": "string" }, "edges": { "description": "Edges holds the relations/edges for other nodes in the graph.\nThe values are being populated by the ItemQuery when eager-loading is set.", "$ref": "#/definitions/ent.ItemEdges" }, "id": { "description": "ID of the ent.", "type": "string" }, "manufacturer": { "description": "Manufacturer holds the value of the \"manufacturer\" field.", "type": "string" }, "model_number": { "description": "ModelNumber holds the value of the \"model_number\" field.", "type": "string" }, "name": { "description": "Name holds the value of the \"name\" field.", "type": "string" }, "notes": { "description": "Notes holds the value of the \"notes\" field.", "type": "string" }, "purchase_from": { "description": "PurchaseFrom holds the value of the \"purchase_from\" field.", "type": "string" }, "purchase_price": { "description": "PurchasePrice holds the value of the \"purchase_price\" field.", "type": "number" }, "purchase_receipt_id": { "description": "PurchaseReceiptID holds the value of the \"purchase_receipt_id\" field.", "type": "string" }, "purchase_time": { "description": "PurchaseTime holds the value of the \"purchase_time\" field.", "type": "string" }, "serial_number": { "description": "SerialNumber holds the value of the \"serial_number\" field.", "type": "string" }, "sold_notes": { "description": "SoldNotes holds the value of the \"sold_notes\" field.", "type": "string" }, "sold_price": { "description": "SoldPrice holds the value of the \"sold_price\" field.", "type": "number" }, "sold_receipt_id": { "description": "SoldReceiptID holds the value of the \"sold_receipt_id\" field.", "type": "string" }, "sold_time": { "description": "SoldTime holds the value of the \"sold_time\" field.", "type": "string" }, "sold_to": { "description": "SoldTo holds the value of the \"sold_to\" field.", "type": "string" }, "updated_at": { "description": "UpdatedAt holds the value of the \"updated_at\" field.", "type": "string" } } }, "ent.ItemEdges": { "type": "object", "properties": { "fields": { "description": "Fields holds the value of the fields edge.", "type": "array", "items": { "$ref": "#/definitions/ent.ItemField" } }, "group": { "description": "Group holds the value of the group edge.", "$ref": "#/definitions/ent.Group" }, "label": { "description": "Label holds the value of the label edge.", "type": "array", "items": { "$ref": "#/definitions/ent.Label" } }, "location": { "description": "Location holds the value of the location edge.", "$ref": "#/definitions/ent.Location" } } }, "ent.ItemField": { "type": "object", "properties": { "boolean_value": { "description": "BooleanValue holds the value of the \"boolean_value\" field.", "type": "boolean" }, "created_at": { "description": "CreatedAt holds the value of the \"created_at\" field.", "type": "string" }, "description": { "description": "Description holds the value of the \"description\" field.", "type": "string" }, "edges": { "description": "Edges holds the relations/edges for other nodes in the graph.\nThe values are being populated by the ItemFieldQuery when eager-loading is set.", "$ref": "#/definitions/ent.ItemFieldEdges" }, "id": { "description": "ID of the ent.", "type": "string" }, "name": { "description": "Name holds the value of the \"name\" field.", "type": "string" }, "number_value": { "description": "NumberValue holds the value of the \"number_value\" field.", "type": "integer" }, "text_value": { "description": "TextValue holds the value of the \"text_value\" field.", "type": "string" }, "time_value": { "description": "TimeValue holds the value of the \"time_value\" field.", "type": "string" }, "type": { "description": "Type holds the value of the \"type\" field.", "type": "string" }, "updated_at": { "description": "UpdatedAt holds the value of the \"updated_at\" field.", "type": "string" } } }, "ent.ItemFieldEdges": { "type": "object", "properties": { "item": { "description": "Item holds the value of the item edge.", "$ref": "#/definitions/ent.Item" } } }, "ent.Label": { "type": "object", "properties": { "color": { "description": "Color holds the value of the \"color\" field.", "type": "string" }, "created_at": { "description": "CreatedAt holds the value of the \"created_at\" field.", "type": "string" }, "description": { "description": "Description holds the value of the \"description\" field.", "type": "string" }, "edges": { "description": "Edges holds the relations/edges for other nodes in the graph.\nThe values are being populated by the LabelQuery when eager-loading is set.", "$ref": "#/definitions/ent.LabelEdges" }, "id": { "description": "ID of the ent.", "type": "string" }, "name": { "description": "Name holds the value of the \"name\" field.", "type": "string" }, "updated_at": { "description": "UpdatedAt holds the value of the \"updated_at\" field.", "type": "string" } } }, "ent.LabelEdges": { "type": "object", "properties": { "group": { "description": "Group holds the value of the group edge.", "$ref": "#/definitions/ent.Group" }, "items": { "description": "Items holds the value of the items edge.", "type": "array", "items": { "$ref": "#/definitions/ent.Item" } } } }, "ent.Location": { "type": "object", "properties": { "created_at": { "description": "CreatedAt holds the value of the \"created_at\" field.", "type": "string" }, "description": { "description": "Description holds the value of the \"description\" field.", "type": "string" }, "edges": { "description": "Edges holds the relations/edges for other nodes in the graph.\nThe values are being populated by the LocationQuery when eager-loading is set.", "$ref": "#/definitions/ent.LocationEdges" }, "id": { "description": "ID of the ent.", "type": "string" }, "name": { "description": "Name holds the value of the \"name\" field.", "type": "string" }, "updated_at": { "description": "UpdatedAt holds the value of the \"updated_at\" field.", "type": "string" } } }, "ent.LocationEdges": { "type": "object", "properties": { "group": { "description": "Group holds the value of the group edge.", "$ref": "#/definitions/ent.Group" }, "items": { "description": "Items holds the value of the items edge.", "type": "array", "items": { "$ref": "#/definitions/ent.Item" } } } }, "ent.User": { "type": "object", "properties": { "created_at": { "description": "CreatedAt holds the value of the \"created_at\" field.", "type": "string" }, "edges": { "description": "Edges holds the relations/edges for other nodes in the graph.\nThe values are being populated by the UserQuery when eager-loading is set.", "$ref": "#/definitions/ent.UserEdges" }, "email": { "description": "Email holds the value of the \"email\" field.", "type": "string" }, "id": { "description": "ID of the ent.", "type": "string" }, "is_superuser": { "description": "IsSuperuser holds the value of the \"is_superuser\" field.", "type": "boolean" }, "name": { "description": "Name holds the value of the \"name\" field.", "type": "string" }, "updated_at": { "description": "UpdatedAt holds the value of the \"updated_at\" field.", "type": "string" } } }, "ent.UserEdges": { "type": "object", "properties": { "auth_tokens": { "description": "AuthTokens holds the value of the auth_tokens edge.", "type": "array", "items": { "$ref": "#/definitions/ent.AuthTokens" } }, "group": { "description": "Group holds the value of the group edge.", "$ref": "#/definitions/ent.Group" } } }, "server.Result": { "type": "object", "properties": { "details": {}, "error": { "type": "boolean" }, "item": {}, "message": { "type": "string" } } }, "server.Results": { "type": "object", "properties": { "items": { "type": "any" } } }, "types.ApiSummary": { "type": "object", "properties": { "health": { "type": "boolean" }, "message": { "type": "string" }, "title": { "type": "string" }, "versions": { "type": "array", "items": { "type": "string" } } } }, "types.ItemCreate": { "type": "object", "properties": { "description": { "type": "string" }, "labelIds": { "type": "array", "items": { "type": "string" } }, "locationId": { "description": "Edges", "type": "string" }, "name": { "type": "string" } } }, "types.ItemOut": { "type": "object", "properties": { "createdAt": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "labels": { "type": "array", "items": { "$ref": "#/definitions/types.LabelSummary" } }, "location": { "description": "Edges", "$ref": "#/definitions/types.LocationSummary" }, "manufacturer": { "type": "string" }, "modelNumber": { "type": "string" }, "name": { "type": "string" }, "notes": { "description": "Extras", "type": "string" }, "purchaseFrom": { "type": "string" }, "purchasePrice": { "type": "number" }, "purchaseTime": { "description": "Purchase", "type": "string" }, "serialNumber": { "description": "Identifications", "type": "string" }, "soldNotes": { "type": "string" }, "soldPrice": { "type": "number" }, "soldTime": { "description": "Sold", "type": "string" }, "soldTo": { "type": "string" }, "updatedAt": { "type": "string" } } }, "types.ItemSummary": { "type": "object", "properties": { "createdAt": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "labels": { "type": "array", "items": { "$ref": "#/definitions/types.LabelSummary" } }, "location": { "description": "Edges", "$ref": "#/definitions/types.LocationSummary" }, "manufacturer": { "type": "string" }, "modelNumber": { "type": "string" }, "name": { "type": "string" }, "notes": { "description": "Extras", "type": "string" }, "purchaseFrom": { "type": "string" }, "purchasePrice": { "type": "number" }, "purchaseTime": { "description": "Purchase", "type": "string" }, "serialNumber": { "description": "Identifications", "type": "string" }, "soldNotes": { "type": "string" }, "soldPrice": { "type": "number" }, "soldTime": { "description": "Sold", "type": "string" }, "soldTo": { "type": "string" }, "updatedAt": { "type": "string" } } }, "types.LabelCreate": { "type": "object", "properties": { "color": { "type": "string" }, "description": { "type": "string" }, "name": { "type": "string" } } }, "types.LabelOut": { "type": "object", "properties": { "createdAt": { "type": "string" }, "description": { "type": "string" }, "groupId": { "type": "string" }, "id": { "type": "string" }, "items": { "type": "array", "items": { "$ref": "#/definitions/types.ItemSummary" } }, "name": { "type": "string" }, "updatedAt": { "type": "string" } } }, "types.LabelSummary": { "type": "object", "properties": { "createdAt": { "type": "string" }, "description": { "type": "string" }, "groupId": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "updatedAt": { "type": "string" } } }, "types.LocationCount": { "type": "object", "properties": { "createdAt": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "itemCount": { "type": "integer" }, "name": { "type": "string" }, "updatedAt": { "type": "string" } } }, "types.LocationCreate": { "type": "object", "properties": { "description": { "type": "string" }, "name": { "type": "string" } } }, "types.LocationOut": { "type": "object", "properties": { "createdAt": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "items": { "type": "array", "items": { "$ref": "#/definitions/types.ItemSummary" } }, "name": { "type": "string" }, "updatedAt": { "type": "string" } } }, "types.LocationSummary": { "type": "object", "properties": { "createdAt": { "type": "string" }, "description": { "type": "string" }, "id": { "type": "string" }, "name": { "type": "string" }, "updatedAt": { "type": "string" } } }, "types.TokenResponse": { "type": "object", "properties": { "expiresAt": { "type": "string" }, "token": { "type": "string" } } }, "types.UserIn": { "type": "object", "properties": { "email": { "type": "string" }, "name": { "type": "string" }, "password": { "type": "string" } } }, "types.UserRegistration": { "type": "object", "properties": { "groupName": { "type": "string" }, "user": { "$ref": "#/definitions/types.UserIn" } } }, "types.UserUpdate": { "type": "object", "properties": { "email": { "type": "string" }, "name": { "type": "string" } } } }, "securityDefinitions": { "Bearer": { "description": "\"Type 'Bearer TOKEN' to correctly set the API Key\"", "type": "apiKey", "name": "Authorization", "in": "header" } } }