go-notify

An email automation solution written in Golang. It facilitate users to register, send & schedule custom HTML mails for their clients.

Architecture diagram:


system_diagram

DB Schema:


dbSchema

Features Included:


  • Authentication & authorization using JWT.
  • Swagger included, built using Swago
  • Full proof auth features - signup, login, update password, forgot password, logout.
  • Cors, Helmet, Api-rate limiter included as middleware from security perspective.
  • Users can register their clients & custom HTML templates.
  • Mail scheduling (daily, weekly, monthly) using cron jobs.
  • Subscription & Payment (payment has been stubbed for now and can be replaced with any suitable payment gateway).
  • Api-server can be consumed by any client-side API, however for easy interaction - CLI (built using Cobra) has been included.

Installation & setup :-


  • Go,Docker,Docker compose & Make should be pre-installed.
  • Clone the repository: git clone https://github.com/Harry-027/go-notify.git.
  • Run the command make download (this will install go modules).
  • Create a new file .env under root directory & copy the env variables from .sample-env.
    (Note that mailgun env variables should be replaced with original credentials. Rest may remain untouched)
  • Run the command make setup (this will start the required docker containers - postgres, redis, apache kafka & zoo-keeper).
  • Run the command docker ps to ensure all the four containers are up & running.
  • Open a new terminal & run the command make server to spin up the api server.
  • Open a new terminal & run the command make consumer to spin up the kafka consumer.
  • Open a new terminal & run the command make cronjob to start the cron processes.
  • Open a new terminal & run the command cli-go. This will install the go-notify cli on your machine.
  • Cli is now ready to operate. Run the command go-notify --help to explore various commands.

cli_snapshot

Swagger :-


swagger_snapshot

Monitoring (using Prometheus & Grafana):-


  • Before spinning up Prometheus & Grafana for monitoring, replace the HOST_IP variable (under monitoring/prometheus/config.yml) with your machine IP.
  • Run the command make monitor to start Api-server monitoring.
  • Once the containers - Prometheus & Grafana are up, visit http://localhost:3000 on browser for Grafana dashboard.
  • Default credentials for Grafana: username - 'admin' , password - 'admin'
  • Once logged into Grafana, visit settings to select prometheus data source as target to view the dashboard.

grafana

Load Testing :-


  • Before running load tests, replace the hostip variable value with your machine ip, under loadtesting/tests/loadtests.js
  • Run the command make load-testing to run the load tests.

loadTestingResults

Sample for a custom HTML received mail :-


mailSample

GitHub