Skip to content

Instantly share code, notes, and snippets.

@sakukode
Last active July 24, 2022 22:48
Show Gist options
  • Save sakukode/d144cfb2dc66837ae48ce86c90d7cfcd to your computer and use it in GitHub Desktop.
Save sakukode/d144cfb2dc66837ae48ce86c90d7cfcd to your computer and use it in GitHub Desktop.
{
"openapi": "3.0.0",
"info": {
"title": "ES API",
"description": "API documentation for Store App",
"version": "1"
},
"servers": [
{
"url": "http://127.0.0.1:4000/api/v1",
"description": "Production"
},
{
"url": "http://127.0.0.1:4000/api/v1",
"description": "Testing"
}
],
"components": {
"securitySchemes": {
"bearerAuth": {
"type": "http",
"scheme": "bearer"
}
},
"responses": {
"UnauthorizedError": {
"description": "Access token is missing or invalid",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string",
"default": "error"
},
"message": {
"type": "string",
"default": "Access token is missing or invalid"
}
}
}
}
}
},
"RecordNotFound": {
"description": "Record not found",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string",
"default": "error"
},
"message": {
"type": "string",
"default": "Record not found."
}
}
}
}
}
}
},
"schemas": {
"GeneralResponse": {
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
}
}
},
"PaginationLink": {
"properties": {
"first": {
"type": "string",
"example": "http://127.0.0.1:4000/api/v1/example?page=1"
},
"last": {
"type": "string",
"example": "http://127.0.0.1:4000/api/v1/example?page=10"
},
"prev": {
"type": "string",
"example": null
},
"next": {
"type": "string",
"example": "http://127.0.0.1:4000/api/v1/example?page=2"
}
}
},
"PaginationMeta": {
"properties": {
"current_page": {
"type": "number",
"example": 1
},
"from": {
"type": "number",
"example": 1
},
"last_page": {
"type": "number",
"example": 10
},
"links": {
"type": "array",
"items": {
"properties": {
"url": {
"type": "string",
"example": "http://127.0.0.1:4000/api/v1/example?page=1"
},
"label": {
"type": "string",
"example": "Previous"
},
"active": {
"type": "boolean",
"example": true
}
}
}
},
"path": {
"type": "string",
"example": "http://127.0.0.1:4000/api/v1/example"
},
"per_page": {
"type": "number",
"example": 10
},
"to": {
"type": "number",
"example": 10
},
"total": {
"type": "number",
"example": 10
}
}
},
"UserForm": {
"properties": {
"email": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"AuthToken": {
"properties": {
"email": {
"type": "string"
},
"token": {
"type": "string"
}
}
},
"UserSetting": {
"properties": {
"name": {
"type": "string"
},
"setting": {
"type": "object",
"properties": {
"phone": {
"type": "string"
},
"address": {
"type": "string"
}
}
}
}
},
"Category": {
"properties": {
"id": {
"type": "integer",
"example": 1
},
"name": {
"type": "string",
"example": "Shoes"
},
"description": {
"type": "string",
"example": "Shoes Product"
}
}
},
"Product": {
"properties": {
"id": {
"type": "integer",
"example": 1
},
"name": {
"type": "string",
"example": "Sneaker Z100"
},
"category": {
"$ref": "#/components/schemas/Category"
},
"images": {
"type": "array",
"items": {
"type": "object",
"properties": {
"preview": {
"type": "string",
"example": "https://via.placeholder.com/200x200.png/0033dd?text=natus"
},
"full": {
"type": "string",
"example": "https://via.placeholder.com/200x200.png/0033dd?text=natus"
}
}
}
},
"prices": {
"type": "object",
"properties": {
"usd": {
"type": "number",
"example": 5
},
"btc": {
"type": "number",
"example": 0.0003785
}
}
}
}
},
"ProductForm": {
"properties": {
"name": {
"type": "string"
},
"category": {
"$ref": "#/components/schemas/Category"
},
"images": {
"type": "array",
"description": "binary file",
"items": {
"type": "string"
}
},
"price": {
"type": "object",
"properties": {
"usd": {
"type": "number"
},
"btc": {
"type": "number"
}
}
}
}
},
"Order": {
"properties": {
"id": {
"type": "integer",
"example": 1
},
"date": {
"type": "string",
"example": "2022-07-24T15:29:53.000Z"
},
"status": {
"type": "string",
"example": "paid"
},
"total": {
"type": "object",
"properties": {
"usd": {
"type": "number",
"example": 10
},
"btc": {
"type": "number",
"example": 0.000246
}
}
},
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer",
"example": 1
},
"name": {
"type": "string",
"example": "Sneaker Z100"
},
"price": {
"type": "object",
"properties": {
"usd": {
"type": "number",
"example": 5
},
"btc": {
"type": "number",
"example": 0.000123
}
}
},
"quantity": {
"type": "number",
"example": 2
}
}
}
}
}
},
"OrderForm": {
"properties": {
"items": {
"type": "array",
"items": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"quantity": {
"type": "number"
}
}
}
}
}
}
}
}
},
"paths": {
"/auth/register": {
"post": {
"tags": [
"Register"
],
"summary": "Create a new User",
"description": "",
"operationId": "authRegister",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"name": {
"type": "string",
"example": "John Doe"
},
"email": {
"type": "string",
"example": "[email protected]"
},
"password": {
"type": "string",
"example": "passdev123456@"
}
}
}
}
}
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GeneralResponse"
},
"examples": {
"default": {
"value": {
"status": "success",
"message": "User Created Successfully."
}
}
}
}
}
},
"422": {
"description": "Unprocessable entity",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"type": "object"
}
}
},
"examples": {
"default": {
"value": {
"status": "error",
"message": "Validation errors",
"data": {
"name": [
"The name field is required."
],
"email": [
"The email must be a valid email address."
]
}
}
}
}
}
}
}
}
}
},
"/auth/login": {
"post": {
"tags": [
"Login"
],
"summary": "Login or request a token",
"description": "",
"operationId": "authLogin",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserForm"
},
"examples": {
"default": {
"value": {
"email": "[email protected]",
"password": "passdev123456@"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Successfully logged in",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/AuthToken"
}
}
}
}
}
},
"401": {
"description": "Credentials mismatch",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GeneralResponse"
},
"examples": {
"default": {
"value": {
"status": "error",
"message": "Credentials mismatch"
}
}
}
}
}
}
}
}
},
"/auth/forgot-password": {
"post": {
"tags": [
"Forgot Password"
],
"summary": "Forgot Password",
"description": "",
"operationId": "authForgotPassword",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"email": {
"type": "string",
"example": "[email protected]"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GeneralResponse"
},
"examples": {
"default": {
"value": {
"status": "success",
"message": "We've been sent reset password code to your email."
}
}
}
}
}
},
"422": {
"description": "Unprocessable entity",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"type": "object"
}
}
},
"examples": {
"default": {
"value": {
"status": "error",
"message": "Validation errors",
"data": {
"email": [
"The selected email is invalid."
]
}
}
}
}
}
}
}
}
}
},
"/auth/reset-password": {
"post": {
"tags": [
"Reset Password"
],
"summary": "Reset Password",
"description": "",
"operationId": "authResetPassword",
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"code": {
"type": "string"
},
"password": {
"type": "string"
},
"password_confirmation": {
"type": "string"
}
}
},
"examples": {
"default": {
"value": {
"code": "756338",
"password": "newpass123456@",
"password_confirmation": "newpass123456@"
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GeneralResponse"
},
"examples": {
"default": {
"value": {
"status": "success",
"message": "Password has been successfully reset."
}
}
}
}
}
},
"404": {
"description": "Code Expired or Invalid",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/GeneralResponse"
},
"examples": {
"expired": {
"value": {
"status": "error",
"message": "Your reset password code has expired!"
}
},
"invalid": {
"value": {
"status": "error",
"message": "Your reset password code is invalid!"
}
}
}
}
}
},
"422": {
"description": "Unprocessable entity",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"type": "object"
}
}
},
"examples": {
"default": {
"value": {
"status": "error",
"message": "Validation errors",
"data": {
"email": [
"The email must be a valid email address."
]
}
}
}
}
}
}
}
}
}
},
"/user/get-user": {
"get": {
"tags": [
"User Setting"
],
"summary": "Get User Setting",
"description": "",
"parameters": [
{
"in": "header",
"name": "Authorization",
"required": true,
"schema": {
"type": "string",
"default": "Bearer {token}"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/UserSetting"
}
}
},
"examples": {
"default": {
"value": {
"status": "success",
"message": "Successfully.",
"data": {
"name": "John Doe",
"email": "[email protected]",
"setting": {
"phone": "",
"address": ""
}
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"/user/update-user": {
"put": {
"tags": [
"User Setting"
],
"summary": "Update User Setting",
"description": "",
"parameters": [
{
"in": "header",
"name": "Authorization",
"required": true,
"schema": {
"type": "string",
"default": "Bearer {token}"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserSetting"
},
"examples": {
"default": {
"value": {
"name": "John Doe",
"setting": {
"phone": "+1 234 567",
"address": "Oak Street 17th, California"
}
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/UserSetting"
}
}
},
"examples": {
"default": {
"value": {
"name": "John Doe",
"setting": {
"phone": "+1 234 567",
"address": "Oak Street 17th, California"
}
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"422": {
"description": "Unprocessable entity",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"type": "object"
}
}
},
"examples": {
"default": {
"value": {
"status": "error",
"message": "Validation errors",
"data": {
"name": [
"The name field is required."
],
"phone": [
"The phone field is required."
],
"address": [
"The address field is required."
]
}
}
}
}
}
}
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"/product": {
"get": {
"tags": [
"Product"
],
"summary": "Get Products",
"description": "",
"parameters": [
{
"in": "header",
"name": "Authorization",
"required": true,
"schema": {
"type": "string",
"default": "Bearer {token}"
}
},
{
"in": "query",
"name": "limit",
"schema": {
"type": "integer"
}
},
{
"in": "query",
"name": "page",
"schema": {
"type": "integer"
}
},
{
"in": "query",
"name": "search",
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "categories",
"schema": {
"type": "string"
}
},
{
"in": "query",
"name": "sort",
"schema": {
"type": "string",
"enum": [
"price",
"-price",
"name",
"-name",
"category",
"rating"
]
},
"description": "Sort order:\n * `price` - by price (highest to lowest)\n * `-price` - by price (lowest to highest)\n * `name` - by name (A-Z)\n * `-name` - by name (Z-A)\n * `category` - by category\n * `rating` - by rating\n \n \n"
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Product"
}
},
"links": {
"$ref": "#/components/schemas/PaginationLink"
},
"meta": {
"$ref": "#/components/schemas/PaginationMeta"
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
},
"security": [
{
"bearerAuth": []
}
]
},
"post": {
"tags": [
"Product"
],
"summary": "Add a new Product",
"description": "",
"parameters": [
{
"in": "header",
"name": "Authorization",
"required": true,
"schema": {
"type": "string",
"default": "Bearer {token}"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProductForm"
}
}
}
},
"responses": {
"201": {
"description": "Created"
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"/product/{productId}": {
"get": {
"tags": [
"Product"
],
"summary": "Get Product Details",
"description": "",
"parameters": [
{
"in": "path",
"name": "productId",
"required": true,
"schema": {
"type": "integer"
}
},
{
"in": "header",
"name": "Authorization",
"required": true,
"schema": {
"type": "string",
"default": "Bearer {token}"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/Product"
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/RecordNotFound"
}
},
"security": [
{
"bearerAuth": []
}
]
},
"put": {
"tags": [
"Product"
],
"summary": "Update Product",
"description": "",
"parameters": [
{
"in": "path",
"name": "productId",
"required": true,
"schema": {
"type": "integer"
}
},
{
"in": "header",
"name": "Authorization",
"required": true,
"schema": {
"type": "string",
"default": "Bearer {token}"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ProductForm"
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/Product"
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"422": {
"description": "Unprocessable entity"
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"/order": {
"get": {
"tags": [
"Order"
],
"summary": "Get User Orders",
"description": "",
"parameters": [
{
"in": "header",
"name": "Authorization",
"required": true,
"schema": {
"type": "string",
"default": "Bearer {token}"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Order"
}
},
"links": {
"$ref": "#/components/schemas/PaginationLink"
},
"meta": {
"$ref": "#/components/schemas/PaginationMeta"
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
}
},
"security": [
{
"bearerAuth": []
}
]
},
"post": {
"tags": [
"Order"
],
"summary": "Create a new Order",
"description": "",
"parameters": [
{
"in": "header",
"name": "Authorization",
"required": true,
"schema": {
"type": "string",
"default": "Bearer {token}"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/OrderForm"
}
}
}
},
"responses": {
"201": {
"description": "Created",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/Order"
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"422": {
"description": "Unprocessable entity"
}
},
"security": [
{
"bearerAuth": []
}
]
}
},
"/order/{orderId}": {
"get": {
"tags": [
"Order"
],
"summary": "Get User Order Details",
"description": "",
"parameters": [
{
"in": "path",
"name": "orderId",
"required": true,
"schema": {
"type": "integer"
}
},
{
"in": "header",
"name": "Authorization",
"required": true,
"schema": {
"type": "string",
"default": "Bearer {token}"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/Order"
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"404": {
"$ref": "#/components/responses/RecordNotFound"
}
},
"security": [
{
"bearerAuth": []
}
]
},
"put": {
"tags": [
"Order"
],
"summary": "Update Order",
"description": "",
"parameters": [
{
"in": "path",
"name": "orderId",
"required": true,
"schema": {
"type": "integer"
}
},
{
"in": "header",
"name": "Authorization",
"required": true,
"schema": {
"type": "string",
"default": "Bearer {token}"
}
}
],
"requestBody": {
"required": true,
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string",
"description": "Order Status",
"enum": [
"new",
"paid",
"completed",
"expired",
"archived"
]
}
}
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"message": {
"type": "string"
},
"data": {
"$ref": "#/components/schemas/Order"
}
}
}
}
}
},
"401": {
"$ref": "#/components/responses/UnauthorizedError"
},
"422": {
"description": "Unprocessable entity"
}
},
"security": [
{
"bearerAuth": []
}
]
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment