|
1 | | -<h1 align="center">API REST em Go! </h1> |
| 1 | +# API-GO: Gerenciamento de Produtos |
| 2 | + |
| 3 | +Este projeto é uma API para gerenciamento de produtos desenvolvida em **Go** utilizando o framework **Gin**. A arquitetura é modular, garantindo maior organização e manutenibilidade. |
| 4 | + |
| 5 | +--- |
| 6 | + |
| 7 | +## 🚀 Inicialização do Projeto |
| 8 | + |
| 9 | +### Pré-requisitos |
| 10 | + |
| 11 | +Certifique-se de ter instalado: |
| 12 | +- **Golang**: [Instalar Golang](https://go.dev/doc/install) |
| 13 | +- **Docker**: [Instalar Docker](https://www.docker.com/products/docker-desktop) |
| 14 | + |
| 15 | +--- |
| 16 | + |
| 17 | +### Como executar |
| 18 | + |
| 19 | +1. Clone o projeto e navegue para a pasta: |
| 20 | + ```bash |
| 21 | + git clone https://github.com/usuario/api-go.git |
| 22 | + cd api-go |
| 23 | + ``` |
| 24 | + |
| 25 | +2. Configure a conexão com o banco de dados: |
| 26 | + Edite as configurações no arquivo `db/conn.go` para refletir suas credenciais. |
| 27 | + |
| 28 | +3. Suba os serviços com Docker: |
| 29 | + ```bash |
| 30 | + docker-compose up |
| 31 | + ``` |
| 32 | + |
| 33 | +4. Acesse a API no endereço: |
| 34 | + - `http://localhost:8000` |
| 35 | + |
| 36 | +--- |
| 37 | + |
| 38 | +## 📚 Estrutura do Projeto |
| 39 | + |
| 40 | +A estrutura está organizada da seguinte maneira: |
| 41 | + |
| 42 | +```plaintext |
| 43 | +API-GO/ |
| 44 | +├── cmd/ |
| 45 | +│ └── main.go # Arquivo principal para iniciar a aplicação |
| 46 | +├── controller/ |
| 47 | +│ └── product_controller.go # Controladores responsáveis pelas rotas |
| 48 | +├── db/ |
| 49 | +│ └── conn.go # Configuração e conexão com o banco de dados |
| 50 | +├── model/ |
| 51 | +│ ├── product.go # Modelo do produto |
| 52 | +│ └── response.go # Estruturas de resposta para a API |
| 53 | +├── repository/ |
| 54 | +│ └── product_repository.go # Camada de interação com o banco de dados |
| 55 | +├── usecase/ |
| 56 | +│ └── product_usecase.go # Regras de negócio e lógica da aplicação |
| 57 | +├── .gitignore # Arquivos ignorados no controle de versão |
| 58 | +├── docker-compose.yml # Configuração do Docker Compose |
| 59 | +├── Dockerfile # Configuração do container Docker |
| 60 | +├── go.mod # Dependências do projeto |
| 61 | +├── go.sum # Hash das dependências |
| 62 | +└── README.md # Documentação do projeto |
| 63 | +``` |
| 64 | + |
| 65 | +--- |
| 66 | + |
| 67 | +## 📖 Endpoints |
| 68 | + |
| 69 | +### **Ping** |
| 70 | +- **GET `/ping`** |
| 71 | + - Retorna uma mensagem de teste. |
| 72 | + - **Resposta**: |
| 73 | + ```json |
| 74 | + { |
| 75 | + "message": "primeiros testes" |
| 76 | + } |
| 77 | + ``` |
| 78 | + |
| 79 | +--- |
| 80 | + |
| 81 | +### **Produtos** |
| 82 | +- **GET `/products`** |
| 83 | + - Lista todos os produtos cadastrados. |
| 84 | + - **Exemplo de Resposta**: |
| 85 | + ```json |
| 86 | + [ |
| 87 | + { |
| 88 | + "id": 1, |
| 89 | + "name": "Produto 1", |
| 90 | + "price": 100.00 |
| 91 | + }, |
| 92 | + { |
| 93 | + "id": 2, |
| 94 | + "name": "Produto 2", |
| 95 | + "price": 150.00 |
| 96 | + } |
| 97 | + ] |
| 98 | + ``` |
| 99 | + |
| 100 | +- **POST `/product`** |
| 101 | + - Cria um novo produto. |
| 102 | + - **Body**: |
| 103 | + ```json |
| 104 | + { |
| 105 | + "name": "Produto Exemplo", |
| 106 | + "price": 100.00 |
| 107 | + } |
| 108 | + ``` |
| 109 | + - **Exemplo de Resposta**: |
| 110 | + ```json |
| 111 | + { |
| 112 | + "id": 1, |
| 113 | + "name": "Produto Exemplo", |
| 114 | + "price": 100.00 |
| 115 | + } |
| 116 | + ``` |
| 117 | + |
| 118 | +- **GET `/product/:productId`** |
| 119 | + - Retorna um produto específico com base no ID. |
| 120 | + - **Exemplo de Resposta**: |
| 121 | + ```json |
| 122 | + { |
| 123 | + "id": 1, |
| 124 | + "name": "Produto Exemplo", |
| 125 | + "price": 100.00 |
| 126 | + } |
| 127 | + ``` |
| 128 | + |
| 129 | +- **PUT `/product`** |
| 130 | + - Atualiza um produto existente. |
| 131 | + - **Body**: |
| 132 | + ```json |
| 133 | + { |
| 134 | + "id": 1, |
| 135 | + "name": "Produto Atualizado", |
| 136 | + "price": 150.00 |
| 137 | + } |
| 138 | + ``` |
| 139 | + - **Exemplo de Resposta**: |
| 140 | + ```json |
| 141 | + { |
| 142 | + "id": 1, |
| 143 | + "name": "Produto Atualizado", |
| 144 | + "price": 150.00 |
| 145 | + } |
| 146 | + ``` |
| 147 | + |
| 148 | +- **DELETE `/product/:productId`** |
| 149 | + - Remove um produto com base no ID. |
| 150 | + - **Exemplo de Resposta**: |
| 151 | + ```json |
| 152 | + { |
| 153 | + "message": "Produto removido com sucesso" |
| 154 | + } |
| 155 | + ``` |
| 156 | + |
| 157 | +--- |
| 158 | + |
| 159 | +## 🛠️ Tecnologias Utilizadas |
| 160 | + |
| 161 | +- **Golang**: Linguagem de programação principal. |
| 162 | +- **Gin**: Framework leve e rápido para desenvolvimento de APIs. |
| 163 | +- **Docker**: Para criação e gerenciamento de containers. |
| 164 | +- **PostgreSQL** (ou outro banco relacional): Configurado no módulo `db`. |
| 165 | + |
| 166 | +--- |
0 commit comments