Example that shows core principles of the Clean Architecture in Golang projects.
REST API with custom JWT-based authentication system.
4 Domain layers:
- Models layer
- Repository layer
- UseCase layer
- Delivery layer
Creates new user
{
"username": "andrii",
"password": "password"
}
Request to get JWT Token based on user credentials
{
"username": "andrii",
"password": "password"
}
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NzEwMzgyMjQuNzQ0MzI0MiwidXNlciI6eyJJRCI6IjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMCIsIlVzZXJuYW1lIjoiemhhc2hrZXZ5Y2giLCJQYXNzd29yZCI6IjQyODYwMTc5ZmFiMTQ2YzZiZDAyNjlkMDViZTM0ZWNmYmY5Zjk3YjUifX0.3dsyKJQ-HZJxdvBMui0Mzgw6yb6If9aB8imGhxMOjsk"
}
Creates new bookmark
{
"url": "https://github.com/andtkach",
"title": "Go Clean Architecture example"
}
Returns all user bookmarks
{
"bookmarks": [
{
"id": "5da2d8aae9b63715ddfae856",
"url": "https://github.com/andtkach/gomongowebapi",
"title": "Go Clean Architecture example"
}
]
}
Returns one bookmark
{
"bookmark":
{
"id": "5da2d8aae9b63715ddfae856",
"url": "https://github.com/andtkach/gomongowebapi",
"title": "Go Clean Architecture example"
}
}
Updates bookmark
{
"id": "5da2d8aae9b63715ddfae856",
"url": "https://github.com/andtkach",
"title": "Go Clean Architecture example"
}
Deletes bookmark by ID:
{
"id": "5da2d8aae9b63715ddfae856"
}
- go 1.20
- docker & docker-compose
Use make run
to build and run docker containers with application itself and mongodb instance
go mod tidy
make build
make runlocal make publish
docker run -p 80:80 andreytkach/go-mongo-webapi docker push andreytkach/go-mongo-webapi