Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

GSabadini/go-clean-architecture

Repository files navigation

Welcome to Go Clean Architecture

Version Build License: MIT Build

  • The Go Clean Architecture is a user-friendly solution designed for a range of banking tasks, including account creation, account listing, checking the balance of specific accounts, facilitating transfers between accounts, and compiling transfer records.

Architecture

  • This represents an endeavor to implement a clean architecture. In the event that you're not yet familiar with it, I'd like to provide you with a reference.

Clean Architecture

Example create account use case

Clean Architecture

Requirements/dependencies

  • Docker
  • Docker-compose

Getting Started

  • Environment variables
make init
  • Starting API in development mode
make up
  • Run tests in container
make test
  • Run tests local (it is necessary to have golang installed)
make test-local
  • Run coverage report
make test-report
make test-report-func
  • View logs
make logs

API Request

Endpoint HTTP Method Description
/v1/accounts POST Create accounts
/v1/accounts GET List accounts
/v1/accounts/{{account_id}}/balance GET Find balance account
/v1/transfers POST Create transfer
/v1/transfers GET List transfers
/v1/health GET Health check

Test endpoints API using curl

  • Creating new account

Request

curl -i --request POST 'http://localhost:3001/v1/accounts' \
--header 'Content-Type: application/json' \
--data-raw '{
 "name": "Test",
 "cpf": "070.910.584-24",
 "balance": 100
}'

Response

{
 "id":"5cf59c6c-0047-4b13-a118-65878313e329",
 "name":"Test",
 "cpf":"070.910.584-24",
 "balance":1,
 "created_at":"2020年11月02日T14:50:46Z"
}
  • Listing accounts

Request

curl -i --request GET 'http://localhost:3001/v1/accounts'

Response

[
 {
 "id": "5cf59c6c-0047-4b13-a118-65878313e329",
 "name": "Test",
 "cpf": "070.910.584-24",
 "balance": 1,
 "created_at": "2020年11月02日T14:50:46Z"
 }
]
  • Fetching account balance

Request

curl -i --request GET 'http://localhost:3001/v1/accounts/{{account_id}}/balance'

Response

{
 "balance": 1
}
  • Creating new transfer

Request

curl -i --request POST 'http://localhost:3001/v1/transfers' \
--header 'Content-Type: application/json' \
--data-raw '{
	"account_origin_id": "{{account_id}}",
	"account_destination_id": "{{account_id}}",
	"amount": 100
}'

Response

{
 "id": "b51cd6c7-a55c-491e-9140-91903fe66fa9",
 "account_origin_id": "{{account_id}}",
 "account_destination_id": "{{account_id}}",
 "amount": 1,
 "created_at": "2020年11月02日T14:57:35Z"
}
  • Listing transfers

Request

curl -i --request GET 'http://localhost:3001/v1/transfers'

Response

[
 {
 "id": "b51cd6c7-a55c-491e-9140-91903fe66fa9",
 "account_origin_id": "{{account_id}}",
 "account_destination_id": "{{account_id}}",
 "amount": 1,
 "created_at": "2020年11月02日T14:57:35Z"
 }
]

Git workflow

  • Gitflow

Code status

  • Development

Author

License

Copyright © 2020 GSabadini. This project is MIT licensed.

Packages

No packages published

Contributors 2

Languages

AltStyle によって変換されたページ (->オリジナル) /