{ "openapi": "3.0.0", "info": { "description": "info.description", "version": "2.X.X", "title": "ServeRest", "contact": { "name": "Paulo Gonçalves", "url": "https://www.linkedin.com/in/paulo-goncalves/" } }, "servers": [ { "url": "http://localhost:3000" }, { "url": "https://staging.serverest.dev" }, { "url": "https://serverest.dev" } ], "tags": [ { "name": "Login", "description": "tags.login.description" }, { "name": "Usuários", "description": "tags.usuarios.description" }, { "name": "Produtos", "description": "tags.produtos.description" }, { "name": "Carrinhos", "description": "tags.carrinhos.description" } ], "paths": { "/login": { "post": { "tags": [ "Login" ], "summary": "paths.login.post.summary", "description": "paths.login.post.description", "requestBody": { "$ref": "#/components/requestBodies/requestBodyLogin" }, "responses": { "200": { "description": "paths.login.post.responses.200.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/loginComSucesso" } } } }, "401": { "description": "paths.login.post.responses.401.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/errorEmailSenhaInvalidos" } } } } } } }, "/usuarios": { "get": { "tags": [ "Usuários" ], "summary": "paths.usuarios.get.summary", "parameters": [ { "$ref": "#/components/parameters/_id" }, { "$ref": "#/components/parameters/nome" }, { "$ref": "#/components/parameters/email" }, { "$ref": "#/components/parameters/password" }, { "$ref": "#/components/parameters/administrador" } ], "responses": { "200": { "description": "paths.usuarios.get.responses.200.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/getUsuarios" } } } } } }, "post": { "tags": [ "Usuários" ], "summary": "paths.usuarios.post.summary", "description": "paths.usuarios.post.description", "requestBody": { "$ref": "#/components/requestBodies/requestBodyUsuarios" }, "responses": { "201": { "description": "paths.usuarios.post.responses.201.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/cadastroComSucesso" } } } }, "400": { "$ref": "#/components/responses/EmailJaUtilizado" } } } }, "/usuarios/{_id}": { "get": { "tags": [ "Usuários" ], "summary": "paths.usuariosById.get.summary", "parameters": [ { "in": "path", "name": "_id", "required": true, "description": "paths.usuariosById.parameters._id.description", "schema": { "type": "string", "default": "0uxuPY0cbmQhpEz1" } } ], "responses": { "200": { "description": "paths.usuariosById.get.responses.200.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/getUsuariosId" } } } }, "400": { "description": "paths.usuariosById.get.responses.400.description", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "example": "Usuário não encontrado" } } } } } } } }, "delete": { "tags": [ "Usuários" ], "summary": "paths.usuariosById.delete.summary", "description": "paths.usuariosById.delete.description", "parameters": [ { "in": "path", "name": "_id", "required": true, "description": "paths.usuariosById.parameters._id.description", "schema": { "type": "string", "default": "0uxuPY0cbmQhpEz1" } } ], "responses": { "200": { "description": "paths.usuariosById.delete.responses.200.description", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "example": "Registro excluído com sucesso | Nenhum registro excluído" } } } } } }, "400": { "description": "paths.usuariosById.delete.responses.400.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/naoPermitidoExcluirUsuarioComCarrinho" } } } } } }, "put": { "tags": [ "Usuários" ], "summary": "paths.usuariosById.put.summary", "description": "paths.usuariosById.put.description", "parameters": [ { "in": "path", "name": "_id", "required": true, "description": "paths.usuariosById.parameters._id.description", "schema": { "type": "string", "default": "0uxuPY0cbmQhpEz1" } } ], "requestBody": { "$ref": "#/components/requestBodies/requestBodyUsuarios" }, "responses": { "200": { "description": "paths.usuariosById.put.responses.200.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/alteradoComSucesso" } } } }, "201": { "description": "paths.usuariosById.put.responses.201.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/cadastroComSucesso" } } } }, "400": { "$ref": "#/components/responses/EmailJaUtilizado" } } } }, "/produtos": { "get": { "tags": [ "Produtos" ], "summary": "paths.produtos.get.summary", "parameters": [ { "$ref": "#/components/parameters/_id" }, { "$ref": "#/components/parameters/nome" }, { "$ref": "#/components/parameters/preco" }, { "$ref": "#/components/parameters/descricao" }, { "$ref": "#/components/parameters/quantidade" } ], "responses": { "200": { "description": "paths.produtos.get.responses.200.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/getProdutos" } } } } } }, "post": { "tags": [ "Produtos" ], "security": [ { "ApiKeyAuth": [] } ], "summary": "paths.produtos.post.summary", "description": "paths.produtos.post.description", "requestBody": { "$ref": "#/components/requestBodies/requestBodyProduto" }, "responses": { "201": { "description": "paths.produtos.post.responses.201.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/cadastroComSucesso" } } } }, "400": { "$ref": "#/components/responses/ProdutoNomeDuplicado" }, "401": { "$ref": "#/components/responses/TokenInvalido" }, "403": { "$ref": "#/components/responses/RotaParaAdministradores" } } } }, "/produtos/{_id}": { "get": { "tags": [ "Produtos" ], "summary": "paths.produtosById.get.summary", "parameters": [ { "in": "path", "name": "_id", "required": true, "description": "paths.produtosById.parameters._id.description", "schema": { "type": "string", "default": "BeeJh5lz3k6kSIzA" } } ], "responses": { "200": { "description": "paths.produtosById.get.responses.200.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/getProdutosId" } } } }, "400": { "description": "paths.produtosById.get.responses.400.description", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "example": "Produto não encontrado" } } } } } } } }, "delete": { "tags": [ "Produtos" ], "security": [ { "ApiKeyAuth": [] } ], "summary": "paths.produtosById.delete.summary", "description": "paths.produtosById.delete.description", "parameters": [ { "in": "path", "name": "_id", "required": true, "description": "paths.produtosById.parameters._id.description", "schema": { "type": "string", "default": "K6leHdftCeOJj8BJ" } } ], "responses": { "200": { "description": "paths.produtosById.delete.responses.200.description", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "example": "Registro excluído com sucesso | Nenhum registro excluído" } } } } } }, "400": { "description": "paths.produtosById.delete.responses.400.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/naoPermitidoExcluirProdutoDeCarrinho" } } } }, "401": { "$ref": "#/components/responses/TokenInvalido" }, "403": { "$ref": "#/components/responses/RotaParaAdministradores" } } }, "put": { "tags": [ "Produtos" ], "security": [ { "ApiKeyAuth": [] } ], "summary": "paths.produtosById.put.summary", "description": "paths.produtosById.put.description", "parameters": [ { "in": "path", "name": "_id", "required": true, "description": "paths.produtosById.parameters._id.description", "schema": { "type": "string", "default": "K6leHdftCeOJj8BJ" } } ], "requestBody": { "$ref": "#/components/requestBodies/requestBodyProduto" }, "responses": { "200": { "description": "paths.produtosById.put.responses.200.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/alteradoComSucesso" } } } }, "201": { "description": "paths.produtosById.put.responses.201.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/cadastroComSucesso" } } } }, "400": { "$ref": "#/components/responses/ProdutoNomeDuplicado" }, "401": { "$ref": "#/components/responses/TokenInvalido" }, "403": { "$ref": "#/components/responses/RotaParaAdministradores" } } } }, "/carrinhos": { "get": { "tags": [ "Carrinhos" ], "summary": "paths.carrinhos.get.summary", "description": "paths.carrinhos.get.description", "parameters": [ { "$ref": "#/components/parameters/_id" }, { "$ref": "#/components/parameters/precoTotal" }, { "$ref": "#/components/parameters/quantidadeTotal" }, { "$ref": "#/components/parameters/idUsuario" } ], "responses": { "200": { "description": "paths.carrinhos.get.responses.200.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/getCarrinhos" } } } } } }, "post": { "tags": [ "Carrinhos" ], "security": [ { "ApiKeyAuth": [] } ], "summary": "paths.carrinhos.post.summary", "description": "paths.carrinhos.post.description", "requestBody": { "$ref": "#/components/requestBodies/requestBodyCarrinho" }, "responses": { "201": { "description": "paths.carrinhos.post.responses.201.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/cadastroComSucesso" } } } }, "400": { "description": "paths.carrinhos.post.responses.400.description", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "example": "Não é permitido possuir produto duplicado | Não é permitido ter mais de 1 carrinho | Produto não encontrado | Produto não possui quantidade suficiente" } } } } } }, "401": { "$ref": "#/components/responses/TokenInvalido" } } } }, "/carrinhos/{_id}": { "get": { "tags": [ "Carrinhos" ], "summary": "paths.carrinhosById.get.summary", "parameters": [ { "in": "path", "name": "_id", "required": true, "description": "paths.carrinhosById.parameters._id.description", "schema": { "type": "string", "default": "qbMqntef4iTOwWfg" } } ], "responses": { "200": { "description": "paths.carrinhosById.get.responses.200.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/getCarrinhosId" } } } }, "400": { "description": "paths.carrinhosById.get.responses.400.description", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "example": "Carrinho não encontrado" } } } } } } } } }, "/carrinhos/concluir-compra": { "delete": { "tags": [ "Carrinhos" ], "security": [ { "ApiKeyAuth": [] } ], "summary": "paths.carrinhosConcluirCompra.delete.summary", "description": "paths.carrinhosConcluirCompra.delete.description", "responses": { "200": { "description": "paths.carrinhosConcluirCompra.delete.responses.200.description", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "example": "Registro excluído com sucesso | Não foi encontrado carrinho para esse usuário" } } } } } }, "401": { "$ref": "#/components/responses/TokenInvalido" } } } }, "/carrinhos/cancelar-compra": { "delete": { "tags": [ "Carrinhos" ], "security": [ { "ApiKeyAuth": [] } ], "summary": "paths.carrinhosCancelarCompra.delete.summary", "description": "paths.carrinhosCancelarCompra.delete.description", "responses": { "200": { "description": "paths.carrinhosCancelarCompra.delete.responses.200.description", "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "example": "Registro excluído com sucesso | Não foi encontrado carrinho para esse usuário" } } } } } }, "401": { "$ref": "#/components/responses/TokenInvalido" } } } } }, "components": { "parameters": { "_id": { "in": "query", "name": "_id", "required": false, "schema": { "type": "string" } }, "nome": { "in": "query", "name": "nome", "required": false, "schema": { "type": "string" } }, "email": { "in": "query", "name": "email", "required": false, "schema": { "type": "string" } }, "password": { "in": "query", "name": "password", "required": false, "schema": { "type": "string" } }, "administrador": { "in": "query", "name": "administrador", "required": false, "schema": { "type": "string", "enum": [ "true", "false" ] } }, "preco": { "in": "query", "name": "preco", "required": false, "description": "components.parameters.preco.description", "example": 470, "schema": { "type": "integer", "minimum": 1 } }, "descricao": { "in": "query", "name": "descricao", "required": false, "schema": { "type": "string" } }, "quantidade": { "in": "query", "name": "quantidade", "required": false, "description": "components.parameters.quantidade.description", "example": 0, "schema": { "type": "integer", "minimum": 0 } }, "precoTotal": { "in": "query", "name": "precoTotal", "required": false, "description": "components.parameters.precoTotal.description", "example": 1300, "schema": { "type": "integer", "minimum": 1 } }, "quantidadeTotal": { "in": "query", "name": "quantidadeTotal", "required": false, "description": "components.parameters.quantidadeTotal.description", "example": 2, "schema": { "type": "integer", "minimum": 0 } }, "idUsuario": { "in": "query", "name": "idUsuario", "required": false, "schema": { "type": "string" } } }, "requestBodies": { "requestBodyUsuarios": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/requestBodyUsuarios" }, "example": { "nome": "Fulano da Silva", "email": "beltrano@qa.com.br", "password": "teste", "administrador": "true" } } }, "required": true }, "requestBodyProduto": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/requestBodyProduto" }, "example": { "nome": "Logitech MX Vertical", "preco": 470, "descricao": "Mouse", "quantidade": 381 } } }, "required": true }, "requestBodyLogin": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/requestBodyLogin" }, "example": { "email": "fulano@qa.com", "password": "teste" } } }, "required": true }, "requestBodyCarrinho": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/requestBodyCarrinho" }, "example": { "produtos": [ { "idProduto": "BeeJh5lz3k6kSIzA", "quantidade": 1 }, { "idProduto": "YaeJ455lz3k6kSIzA", "quantidade": 3 } ] } } }, "required": true } }, "responses": { "EmailJaUtilizado": { "description": "components.responses.EmailJaUtilizado.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/errorEmailJaUtilizado" } } } }, "ProdutoNomeDuplicado": { "description": "components.responses.ProdutoNomeDuplicado.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/existeProdutoComEsseNome" } } } }, "TokenInvalido": { "description": "components.responses.TokenInvalido.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/tokenAusenteInvalidoExpirado" } } } }, "RotaParaAdministradores": { "description": "components.responses.RotaParaAdministradores.description", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/rotaParaAdministradores" } } } } }, "securitySchemes": { "ApiKeyAuth": { "type": "apiKey", "in": "header", "name": "Authorization", "description": "components.securitySchemes.ApiKeyAuth.description" } }, "schemas": { "nomeUsuario": { "type": "string", "example": "Fulano da Silva" }, "emailBeltrano": { "type": "string", "example": "beltrano@qa.com.br" }, "emailFulano": { "type": "string", "example": "fulano@qa.com" }, "password": { "type": "string", "example": "teste" }, "administrador": { "type": "string", "enum": [ "true", "false" ], "example": "true" }, "_idUsuario": { "type": "string", "example": "0uxuPY0cbmQhpEz1" }, "nomeProduto1": { "type": "string", "example": "Logitech MX Vertical" }, "precoProduto1": { "type": "integer", "example": 470 }, "descricaoProduto1": { "type": "string", "example": "Mouse" }, "quantidadeProduto1": { "type": "integer", "example": 381 }, "_idProduto1": { "type": "string", "example": "BeeJh5lz3k6kSIzA" }, "arrayProduto": { "type": "object", "properties": { "nome": { "type": "string" }, "preco": { "type": "integer" }, "descricao": { "type": "string" }, "quantidade": { "type": "integer" }, "_id": { "type": "string" } } }, "requestBodyUsuarios": { "type": "object", "properties": { "nome": { "$ref": "#/components/schemas/nomeUsuario" }, "email": { "$ref": "#/components/schemas/emailBeltrano" }, "password": { "$ref": "#/components/schemas/password" }, "administrador": { "$ref": "#/components/schemas/administrador" } } }, "requestBodyLogin": { "type": "object", "properties": { "email": { "$ref": "#/components/schemas/emailFulano" }, "password": { "$ref": "#/components/schemas/password" } } }, "requestBodyProduto": { "type": "object", "properties": { "nome": { "$ref": "#/components/schemas/nomeProduto1" }, "preco": { "$ref": "#/components/schemas/precoProduto1" }, "descricao": { "$ref": "#/components/schemas/descricaoProduto1" }, "quantidade": { "$ref": "#/components/schemas/quantidadeProduto1" } } }, "requestBodyCarrinho": { "type": "object", "properties": { "produtos": { "type": "object", "properties": { "idProduto": { "type": "string" }, "quantidade": { "type": "integer" } }, "example": [ { "idProduto": "BeeJh5lz3k6kSIzA", "quantidade": 1 }, { "idProduto": "YaeJ455lz3k6kSIzA", "quantidade": 3 } ] } } }, "getUsuarios": { "type": "object", "properties": { "quantidade": { "type": "number", "example": 1 }, "usuarios": { "type": "array", "items": { "type": "object", "properties": { "nome": { "$ref": "#/components/schemas/nomeUsuario" }, "email": { "$ref": "#/components/schemas/emailBeltrano" }, "password": { "$ref": "#/components/schemas/password" }, "administrador": { "$ref": "#/components/schemas/administrador" }, "_id": { "$ref": "#/components/schemas/_idUsuario" } } } } } }, "getUsuariosId": { "type": "object", "properties": { "nome": { "$ref": "#/components/schemas/nomeUsuario" }, "email": { "$ref": "#/components/schemas/emailBeltrano" }, "password": { "$ref": "#/components/schemas/password" }, "administrador": { "$ref": "#/components/schemas/administrador" }, "_id": { "$ref": "#/components/schemas/_idUsuario" } } }, "getProdutos": { "type": "object", "properties": { "quantidade": { "type": "number", "example": 2 }, "produtos": { "type": "array", "items": { "$ref": "#/components/schemas/arrayProduto" }, "example": [ { "nome": "Logitech MX Vertical", "preco": 470, "descricao": "Mouse", "quantidade": 381, "_id": "BeeJh5lz3k6kSIzA" }, { "nome": "Samsung 60 polegadas", "preco": 5240, "descricao": "TV", "quantidade": 49977, "_id": "K6leHdftCeOJj8BJ" } ] } } }, "getProdutosId": { "type": "object", "properties": { "nome": { "$ref": "#/components/schemas/nomeProduto1" }, "preco": { "$ref": "#/components/schemas/precoProduto1" }, "descricao": { "$ref": "#/components/schemas/descricaoProduto1" }, "quantidade": { "$ref": "#/components/schemas/quantidadeProduto1" }, "_id": { "$ref": "#/components/schemas/_idProduto1" } } }, "getCarrinhos": { "type": "object", "properties": { "quantidade": { "type": "number", "example": 1 }, "carrinhos": { "type": "array", "items": { "type": "object", "properties": { "produtos": { "type": "array", "items": { "type": "object", "properties": { "idProduto": { "type": "string" }, "quantidade": { "type": "integer" }, "precoUnitario": { "type": "integer" } }, "example": [ { "idProduto": "BeeJh5lz3k6kSIzA", "quantidade": 1, "precoUnitario": 470 }, { "idProduto": "K6leHdftCeOJj8BJ", "quantidade": 2, "precoUnitario": 5240 } ] } }, "precoTotal": { "type": "integer", "example": 10950 }, "quantidadeTotal": { "type": "integer", "example": 3 }, "idUsuario": { "type": "string", "example": "0uxuPY0cbmQhpEz1" }, "_id": { "type": "string", "example": "aFOUqntef4iaOwWfg" } } } } } }, "getCarrinhosId": { "type": "object", "properties": { "produtos": { "type": "array", "items": { "type": "object", "properties": { "idProduto": { "type": "string" }, "quantidade": { "type": "integer" }, "precoUnitario": { "type": "integer" } }, "example": [ { "idProduto": "BeeJh5lz3k6kSIzA", "quantidade": 2, "precoUnitario": 470 }, { "idProduto": "K6leHdftCeOJj8BJ", "quantidade": 1, "precoUnitario": 5240 } ] } }, "precoTotal": { "type": "integer", "example": 6180 }, "quantidadeTotal": { "type": "integer", "example": 3 }, "idUsuario": { "type": "string", "example": "0uxuPY0cbmQhpEz1" }, "_id": { "type": "string", "example": "qbMqntef4iTOwWfg" } } }, "cadastroComSucesso": { "type": "object", "properties": { "message": { "type": "string", "example": "Cadastro realizado com sucesso" }, "_id": { "type": "string", "example": "jogfODIlXsqxNFS2" } } }, "loginComSucesso": { "type": "object", "properties": { "message": { "type": "string", "example": "Login realizado com sucesso" }, "authorization": { "type": "string", "example": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImZ1bGFub0BxYS5jb20iLCJwYXNzd29yZCI6InRlc3RlIiwiaWF0IjoxNTg5NzU4NzQ2LCJleHAiOjE1ODk3Njg3NDZ9.B6TASHV8k9xBerz4NSeFBlAZGSDhZlqESt767M0567I" } } }, "alteradoComSucesso": { "type": "object", "properties": { "message": { "type": "string", "example": "Registro alterado com sucesso" } } }, "errorEmailJaUtilizado": { "type": "object", "properties": { "message": { "type": "string", "example": "Este email já está sendo usado" } } }, "errorEmailSenhaInvalidos": { "type": "object", "properties": { "message": { "type": "string", "example": "Email e/ou senha inválidos" } } }, "naoPermitidoExcluirUsuarioComCarrinho": { "type": "object", "properties": { "message": { "type": "string", "example": "Não é permitido excluir usuário com carrinho cadastrado" }, "idCarrinho": { "type": "string", "example": "qbMqntef4iTOwWfg" } } }, "naoPermitidoExcluirProdutoDeCarrinho": { "type": "object", "properties": { "message": { "type": "string", "example": "Não é permitido excluir produto que faz parte de carrinho" }, "idCarrinho": { "type": "array", "items": { "type": "string", "example": "qbMqntef4iTOwWfg, yILJY1eaAUC6hyRc" } } } }, "existeProdutoComEsseNome": { "type": "object", "properties": { "message": { "type": "string", "example": "Já existe produto com esse nome" } } }, "tokenAusenteInvalidoExpirado": { "type": "object", "properties": { "message": { "type": "string", "example": "Token de acesso ausente, inválido, expirado ou usuário do token não existe mais" } } }, "rotaParaAdministradores": { "type": "object", "properties": { "message": { "type": "string", "example": "Rota exclusiva para administradores" } } } } } }