8000 GitHub - rogelio2k/amethyst: A “study-only purpose” GraphQL banking server in Elixir
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

rogelio2k/amethyst

 
 

Repository files navigation

Amethyst

CircleCI codecov

Online Documentation

Amethyst is a persisted bank account service provider built as a corporate challenge proposed by the Stone Payments to me in order to evaluate my Elixir advancements and as a opportunity to me to study and implement new concepts.

By keeping a daily-based assets movements logbook it offers the user a wide range of options for reporting financial transactions over any period of time.

It's developed as a Elixir umbrella application, stores its data in a PostgreSQL database with the help of Ecto, serves a GraphQL API with Absinthe and runs over a Docker Machine droplet inside Digital Ocean.

Check the System Diagram.

It also uses Distillery to set up a compiled BEAM release into production. So while running it lacks the Mix environment and act solely as OTP Application. That being said, there's no Elixir installed at the production environment, just BEAM and ERTS.

And that's why there's two FROM statements inside a single Dockerfile. Which is a fairly common practice for compiling and releasing Mix applications into OTP ones.

A brief scheme for the production stack:

Container Description
database Our PostgreSQL database.
docs A Lighttpd server with our ExDoc files.
amethyst Our OTP environment.

And we serve over:

Endpoint
GraphQL 104.131.80.76:7171
GraphiQL http://104.131.80.76:7171/graphiql
ExDoc http://104.131.80.76

Be sure to check the Ametyst ExDoc documentation page for in-depth insights on implementations and API usage guides. It also offers documentation for each umbrella application.

All functions describe Typespecs for agreements with Dialyzer.
Every module has its ExUnit counterpart, although automated analysis with ExCoveralls reports over 77%, in practical terms it can be considered 100%. Check the report here.

Also, at production environment Sentry is being used to track runtime exceptions.

Relevant Pages

Native Setup

This guide will cover how to set Amethyst running locally on your native Mix environment using Docker for our Postgres container.

For a fully containerized set up, check Containerized Setup.

Be sure to get into Amethyst directory.

First, let's set our session variables and MIX_ENV to dev:

$ eval $(cat dev.env)

Then start Postgres:

$ docker-compose up -d database

Perform Ecto migrations:

$ mix ecto.migrate

Start the application:

$ iex -S mix

At this point you should be able to access: http://localhost:7171/graphiql.

Testing

For testing I recommend setting up the test session variables with:

$ eval $(cat test.env)

Then performing tests (requires the database container to be up):

$ mix test

Typespecs Static Analysis (Discrepancy Analyzer)

To run Dialyzer you can simply run Dialyxir:

(It should run inside development environment)

$ eval $(cat dev.env)
$ mix dialyzer

Static Code Analisys

Credo can be used to give us a static analysis:

$ mix credo

Checking 67 source files (this might take a while) ...

Please report incorrect results: https://github.com/rrrene/credo/issues

Analysis took 1 second (0.02s to load, 1.0s running checks)
238 mods/funs, found no issues.

It's currently being performed during continuous integration with CircleCI.

Containerized Setup

The current Amethyst Docker container lacks the Mix environment. So at the present time testing is restrict to the Native Setup.

In order to setup Amethyst into Docker, we will release it. This guide covers it.

Be sure to get into Amethyst directory.

First, set your local prod.env file by:

$ cp prod.env.sample prod.env

Then, start Postgres:

$ docker-compose up -d database

Build our Dockerfile:

$ docker-compose build amethyst

Run Ecto migrations:

$ docker-compose run --rm amethyst bin/amethyst migrate

Start the application:

$ docker-compose up -d amethyst

At this point you should be able to access: http://localhost:7171/graphiql.

License

This is a "study-only purpose" software developed by fschuindt.

It's available as open source under the terms of the MIT License.

About

A “study-only purpose” GraphQL banking server in Elixir

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Elixir 99.9%
  • Shell 0.1%
0