Code Monkey home page Code Monkey logo

gin-rest-prisma-boilerplate's Introduction

🍱 Gin Rest Prisma Boilerplate

Golang Logo Gin Logo

Golang, is a statically typed, compiled programming language designed at Google that aids in building simple, reliable, and efficient software. Gin is a full-featured web framework for Go that achieves outstanding performance.

GoDoc codebeat badge Build Status GitHub license FOSSA Status

πŸ“š Description

This boilerplate leverages the Gin framework to quickly prototype backend applications. It comes with database, logging, security, and authentication features out of the box.


🍬 Features

  • Based on Gin.

  • Prisma ORM for Mongo. But can support MYSQL/PostgreSQL and Amazon Aurora.

  • Gin Sessions for Redis.

  • Gin Authz for role based access management. Internally, utilizing the powerful authentication library Casbin.

  • Viper for working with yaml configurations.

  • Gin Swagger for API specifications.


πŸ› οΈ Prerequisites

🐳 Docker

Please make sure to have Docker Desktop operational on the preferred operating system of choice to quickly get started. To get started, please see the following link.

Note: Despite the fact that Docker Desktop comes free for both Mac and Windows, it only supports the Pro edition of Windows 10. A common workaround is to get Docker Toolbox which will bypass the Windows 10 Pro restriction by executing Docker in a VM.

🧰 Node

The Prisma CLI is essential for streamlining workflows in managing and deploying Prisma services. The CLI can to be downloaded using npm; which requires NodeJS.

Then, the following command will download the Prisma command line interface:

// prisma cli
$ npm install -g prisma

πŸ”¨ Getting Started

If need be, replace the existing configuration variables in the config.yaml file with the preferred configuration values.

Changing the server.env : "test" to server.env : "dev" yields better logging that can come of use when developing.

πŸ—³οΈ + 🐳 Developing Inside Docker

VSCode permits the development of source code to happen exclusively in a Docker container. For more information on how this works, please read the following documentation.

This boilerplate comes with a .devcontainer configuration enabling such a feature.

To get started:

  1. Clone this repository.
  2. Open VSCode and download the Remote-Containers extension.
  3. Press F1 and select the Remote-Containers: Open Folder in Container... command.
  4. Select the cloned copy of this folder, wait for the container to start.
  5. Run make prisma-endpoint-to-docker to guarantee prisma deploy works as intended.
  6. Run make prisma-deploy or prisma deploy.
  7. Run make dev (server reloading) or make run (no server reloading)
  8. Start developing!

β›² Developing Locally Outside of Docker

Developing locally is still possible but requires some tweaks. The application dependencies such as Prisma, Mongo, and Redis will still require Docker to run. Mainly because Prisma can't be set up locally like Mongo and Redis. But the code itself will not be containerized.

  • Execute the following command to run the application dependencies in Docker without building the web application container:
# runs the application locally with only dependencies executing in docker
$ make develop-locally

# entrypoint for web application
$ make dev

#or (for development without server reloading)
$ make run

Why both Redis and Mongo❓

The design behind making the session management, Redis based, instead of Mongo based, came down to understanding that constant reads and writes to a database for cookie management were redundant and ineffective. The focus was to leave the persistent data in Mongo and less important session-based data in Redis.


πŸ”’ Environment Configuration

As mentioned before, this application leverages the Viper module, which can read in configuration variables from the config.yaml file.

This is a breakdown of the variables:

server.env - the application environment it will be executing in, either in development, production, or testing. Options: dev, test, or prod.

server.port - the default port to expose the application to.

session.name - the name of the session for redis.

redis.idle_connections - the number of idle connections redis should support (default is 10).

redis.network_type - redis network type, default is "tcp" but "udp" is also supported.

redis.address - the URL to redis endpoint.

redis.secret_key - secret key to the redis store.

redis.password - redis password for authentication.


πŸ“¦ Dep Package Manager

  • Dep is a package manager for Go. It aids in managing packages for any Go application.

Getting stated with Dep:

On Mac:

$ brew install dep
$ brew upgrade dep

Other Platforms:

# downloads dep package manager
$ curl https://raw.githubusercontent.com/golang/dep/master/install.sh | sh
  • Navigate to the project directory, initialize Dep by running dep init then remove the go.mod and go.sum files.
# ensuring dep dependencies are present
$ dep ensure

Note: On Windows, please use Git Bash or WSL where curl is included by default.

✨ Choosing Go Modules over Dep

One can choose Go Modules over Dep as its a native module version manager for Golang.

  1. Run go mod init
  2. Run go mod download to ensure dependencies are downloaded in the GOPATH.
  3. Run go mod tidy to incorporate version locking.
  4. Remove dep files with rm -rf vendor Gopkg.*

πŸ§ͺ Testing

Depending on where the development is occurring; in docker or not, tests can be executed through the Docker shell or locally.

$ go test -v ./tests/*

πŸ—ƒοΈ Makefile

This boilerplate comes with a lot of crucial Makefile methods to aid in development.

develop-locally: responsible for preparing the application to be developed locally, it composes redis, mongo and prisma to run locally.

build : builds the application for deployment.

clean: removes the generated binary from the build command.

test: runs e2e testing.

dev: Starts the application with fresh to enable auto reloading on saves. Can be paired with docs command to automate viewing api spec changes.

docs: generates swagger docs.

run: starts the server without fresh, meaning auto-reloading won't happen on file saves.

compose-deps: composes prisma, mongo, and redis only.

prisma-endpoint-to-local: changes the prisma.yml endpoint to localhost so that prisma deploy can work properly when developing locally.

prisma-endpoint-to-docker: changes the prisma.yml endpoint to the prisma container so that prisma deploy can work properly when developing in a container.

prisma-deploy: generates the prisma client files and deploys the prisma datamodel.


πŸ“ License

GRPB is MIT licensed.

Author: Sal Anvarov.

FOSSA Status

gin-rest-prisma-boilerplate's People

Contributors

fossabot avatar jharrilim avatar renovate-bot avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

gin-rest-prisma-boilerplate's Issues

Dependency Dashboard

This issue provides visibility into Renovate updates and their statuses. Learn more

This repository currently has no open or pending branches.

Detected dependencies

docker-compose
.devcontainer/docker-compose.yml
docker-compose.override.yml
  • prismagraphql/prisma 1.34
  • mongo 5.0
  • bitnami/redis latest
docker-compose.yml
  • prismagraphql/prisma 1.34
  • mongo 5.0
  • bitnami/redis latest
dockerfile
Dockerfile
  • golang latest

  • Check this box to trigger a request for Renovate to run again on this repository

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.