go-crash

command module
v0.0.0-...-8b6cda5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 12, 2021 License: MIT Imports: 9 Imported by: 0

README

Go Report Card

go-crash

Project go-crash is just my go lang practices

Stacks
Quick Start

If you already have Postgres and Redis running in your machine, just configure the config/config.yml file for credentials follow the steps:

  • Clone this repository
  • Then Run: go mod tidy && go mod vendor
  • Then Run: go run main.go
  • Or Run: export PROFILE=Default && go run main.go with selected profile
  • Open your browser on http://localhost:8080

Note: The dev, docker and prod profiles (environments)'s credentials are get passes from OS env-vars. Let say you want to run this project in kubernetes then, you should pass the environment variables in your deployment manifest. for example:

      image: path-to-image-of-this-project-in-repo
      env:
        - name: PROFILE
          value: "dev"
        - name: DATABASE_USER
          value: "postgres"
        - name: DATABASE_PASSWORD
          value: "postgres"
        - name: DATABASE_DB
          value: "go_crash"
        - name: REDIS_PASSWORD
          value: "secret"

the values can be later replaced into kube-secret or any other third party vault applications

check if server is working:

curl --location --request GET 'http://localhost:8080/ping'

Api Documentations are in http://localhost:8080/swagger/index.html

Docker Run

run the project in docker, It also has images for:

  • Redis
  • Postgres

Start the docker compose

docker-compose up -d

clean the docker compose

docker-compose down -v

Quick Start

login to postgres and create a record in auths table to create authentication user for token

insert into public.auths (id, username, password)
values (1, 'test', 'test');

basically eny api under /api/v1 is protected by Token header and needs to be authenticated.

to authenticate call the following command:

curl --location --request POST 'http://localhost:8080/auth' \
--header 'Content-Type: application/json' \
--data-raw '{
    "username": "test",
    "password": "test"
}'

now you have your token, you should use it in every call under /api/v1 as header Token

Create User
curl --location --request POST 'http://localhost:8080/api/v1/customers' \
--header 'token: eyJhbGciOiJI...GSqQhG8' \
--header 'Content-Type: application/json' \
--data-raw '{
    "firstName": "Jay",
    "lastName": "Ehsaniara",
    "title": "Software Engineer"
}'

And the response from the following call will be:

{
  "ID": 1,
  "FirstName": "Jay",
  "LastName": "Ehsaniara",
  "Title": "Software Engineer",
  "CreatedBy": "test",
  "CreatedOn": 1623276844,
  "ModifiedOn": 1623276844
}
Get User
curl --location --request GET 'http://localhost:8080/api/v1/customers/1' \
--header 'token: eyJhbGciOiJI...GSqQhG8'

The first call gets the data from postgres and store it in your Redis cache ans show it as:

{
  "ID": 1,
  "FirstName": "Jay",
  "LastName": "Ehsaniara",
  "Title": "Engineer",
  "CreatedBy": "test",
  "CreatedOn": 1623276844,
  "ModifiedOn": 1623276844
}

Latter calls for the same customer id will be much faster because it's calling the redis from now on

Documentation

The Go Gopher

There is no documentation for this package.

Directories

Path Synopsis
middleware
jwt
pkg
log
api
service

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL