Esta é uma API desenvolvida em Go (Golang) para realizar as operações CRUD (Create, Read, Update, Delete) em posts. A API utiliza o framework Gin para a criação das rotas, GORM como ORM e Postgres como banco de dados. O Docker é utilizado para containerização da aplicação e do banco de dados.
-
Criação de posts
-
Busca de posts (por ID ou lista completa)
-
Atualização parcial (PATCH)
-
Atualização completa (PUT)
-
Deleção de posts
-
Linguagem: Go (Golang)
-
Framework: Gin (v1.10.0)
-
ORM: GORM
-
Driver de Banco de Dados: Postgres
-
Containerização: Docker
git clone <URL_DO_REPOSITORIO>
cd <NOME_DO_REPOSITORIO>
Crie um arquivo .env
na raiz do projeto com o seguinte conteúdo:
DB_HOST=localhost
DB_PORT=5432
DB_USER=seu_usuario
DB_PASSWORD=sua_senha
DB_NAME=nome_do_banco
API_PORT=8080
Certifique-se de que o Docker está instalado e em execução. Então, execute:
docker-compose up -d
Isso irá subir os containers da API e do banco de dados Postgres.
Se estiver desenvolvendo localmente:
go mod tidy
Para rodar a aplicação localmente, utilize:
go run main.go
A API estará disponível em http://localhost:8080
(ou na porta especificada no arquivo .env
).
POST /posts
{
"title": "Meu Post",
"content": "Conteúdo do post"
}
- 201 Created
{
"id": 1,
"title": "Meu Post",
"content": "Conteúdo do post",
"created_at": "2024-12-20T15:04:05Z"
}
GET /posts
- 200 OK
[
{
"id": 1,
"title": "Meu Post",
"content": "Conteúdo do post",
"created_at": "2024-12-20T15:04:05Z"
},
{
"id": 2,
"title": "Outro Post",
"content": "Mais conteúdo",
"created_at": "2024-12-20T16:04:05Z"
}
]
GET /posts/:id
- 200 OK
{
"id": 1,
"title": "Meu Post",
"content": "Conteúdo do post",
"created_at": "2024-12-20T15:04:05Z"
}
- 404 Not Found
{
"error": "Post not found"
}
PUT /posts/:id
{
"title": "Novo Título",
"content": "Novo conteúdo"
}
- 200 OK
{
"id": 1,
"title": "Novo Título",
"content": "Novo conteúdo",
"created_at": "2024-12-20T15:04:05Z"
}
PATCH /posts/:id
{
"content": "Atualização parcial"
}
- 200 OK
{
"id": 1,
"title": "Meu Post",
"content": "Atualização parcial",
"created_at": "2024-12-20T15:04:05Z"
}
DELETE /posts/:id
- 200 OK
{
"message": "Post deleted successfully"
}
- 404 Not Found
{
"error": "Post not found"
}
.
├── Dockerfile
├── docker-compose.yml
├── main.go
├── models
│ └── post.go
├── routes
│ └── post_routes.go
├── controllers
│ └── post_controller.go
├── repository
│ └── post_repository.go
├── .env
└── go.mod
-
**main.go**
: Ponto de entrada da aplicação. -
**models/**
: Contém as definições das structs (ex.: Post). -
**routes/**
: Define as rotas da API. -
**controllers/**
: Lógica dos endpoints. -
**repository/**
: Manipulação de dados com o GORM.
Adicione testes unitários para os controllers, models e repositories.
Para rodar os testes:
go test ./...
Contribuições são bem-vindas! Abra um PR com suas sugestões ou melhorias.
Este projeto está sob a licença MIT.