Golang API to that manages accounts creation and the transactions for the accounts. The API was build using go-chi, a lightweight mux implementation wich provides a better REST support, allowing easy management of URL values, routing based on methods and simple middleware management.
The default database is sqlite3 using go-sqlite3, and since it's self contained, there is no dependencies on external services.
If you have just cloned this repository, you can run the application using docker-compose
by running:
$ docker-compose up
The api will be available at port 8088
http://localhost:8088
The docker-compose.yml
definitions will take care of building the container and creating the database schema.
For a more detailed steps on how to run the application for development, see the
Developing
section.
The documentation for the api endpoins, schemas and requests can be found on the file docs/openapi.yaml
.
You can go to https://editor.swagger.io/ and import the file there to try out the requests as well.
The application expects the following envs:
Name | Description | Default Value |
---|---|---|
PORT | Server Listen Port | 80 |
DATABASE_FILE | Sqlite file location for the database | transactions.db |
You will need to install sqlite3 to run the application on your local environment. For OSX you can install it with:
$ brew install sqlite3
Create the .env
file with the default values with:
$ cp env.default .env
Donwload the project dependencies with:
$ go mod download
With sqlitte3 installed, you need to create the database file with the defined schema located at scripts/database_tables.sql
. You can do so running the following command:
$ sqlite3 transactions.db < scripts/database_tables.sql
You can use the command:
$ go run cmd/api/main.go
To build the application we need to define CGO_ENABLED=1
as the go-sqlite3
is a CGO
enable package.
$ CGO_ENABLED=1 GOOS=<your_os> go build -o transactions-api cmd/api/main.go
To run the unit tests the command go test ./...
should be used. You can specify the param -cover
to show the coverage data.