Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zetsux/gin-gorm-clean-starter
๐งน A clean architecture starter template for REST API using Gin and GORM (Golang)
https://github.com/zetsux/gin-gorm-clean-starter
api clean-architecture gin golang gorm rest-api starter starter-template template
Last synced: 9 days ago
JSON representation
๐งน A clean architecture starter template for REST API using Gin and GORM (Golang)
- Host: GitHub
- URL: https://github.com/zetsux/gin-gorm-clean-starter
- Owner: zetsux
- Created: 2023-03-15T16:03:02.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-06-28T15:10:48.000Z (5 months ago)
- Last Synced: 2024-06-28T16:38:20.284Z (5 months ago)
- Topics: api, clean-architecture, gin, golang, gorm, rest-api, starter, starter-template, template
- Language: Go
- Homepage:
- Size: 104 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Gin GORM Template (Clean Architecture)
## Contents
- [Description](#description)
- [Architecture](#architecture)- [Explanation (EN)](#explanation-en)
- [Explanation (ID)](#explanation-id)- [Pre-requisites](#pre-requisites)
- [PostgreSQL Requirements](#postgresql-requirements)
- [GitHooks Requirements](#githooks-requirements)- [How to Run?](#how-to-run)
- [API Documentation (Postman)](#api-documentation-postman)## Description
A Clean Architecture starter template for projects using Gin (Golang) and PostgreSQL, with GORM as the ORM.
## Architecture
```
/backend
โ
โโโ /api
โ โโโ /v1
โ โโโ /controller
โ โ โโโ user.go
โ โ โโโ etc
โ โโโ /router
โ โโโ user.go
โ โโโ etc
โ
โโโ /common
โ โโโ /base
โ โ โโโ model.go
โ โ โโโ request.go
โ โ โโโ response.go
โ โ โโโ etc
โ โโโ /constant
โ โ โโโ default.go
โ โ โโโ enums.go
โ โ โโโ etc
โ โโโ /middleware
โ โ โโโ authentication.go
โ โ โโโ cors.go
โ โ โโโ authorization.go
โ โ โโโ etc
โ โโโ /util
โ โโโ bcrypt.go
โ โโโ file.go
โ โโโ etc
โ
โโโ /config
โ โโโ db.go
โ โโโ etc
โ
โโโ /core
โ โโโ /entity
โ โ โโโ user.go
โ โ โโโ etc
โ โโโ /helper
โ โ โโโ /dto
โ โ โ โโโ user.go
โ โ โ โโโ etc
โ โ โโโ /errors
โ โ โ โโโ other.go
โ โ โ โโโ user.go
โ โ โ โโโ etc
โ โ โโโ /messages
โ โ โโโ file.go
โ โ โโโ user.go
โ โ โโโ etc
โ โโโ /repository
โ โ โโโ user.go
โ โ โโโ etc
โ โโโ /service
โ โโโ user.go
โ โโโ etc
โ
โโโ /database
โ โโโ /seeder
โ โ โโโ user.go
โ โ โโโ etc
โ โโโ migrator.go
โ
โโโ main.go
```### Explanation (EN)
- `/api/v1` : The directory for things related to API like all available endpoints (route) and the handlers for each endpoints (controller). Subdirectory `/v1` is used for easy version control in case of several development phase.
- `/controller` : The directory for things related to the Controller layer which is the part of program that handle requests and return responses.
- `/router` : The directory for things related with routing. Therefore filled with every available supported routes / endpoints along with the request method and used middleware.- `/common` : The directory for common things that are frequently used all over the architectures.
- `/base` : The directory for base things such as variables, constants, and functions to be used in other directories. It consists of things like response, request, and model base structure.
- `/middleware` : The directory for Middlewares which are mechanism that intercept a HTTP request and response process before handled directly by the controller of an endpoint.
- `/util` : The directory to store utility / helper functions that can be used in other directories.- `/config` : The directory for things related to program configuration like database configuration.
- `/core` : The directory for things related to the core side of the Back End. It consists of things like business logic, entities, and database interaction.
- `/entity` : The directory for things related to entities / models which are available on the database via migration that are represented by structs.
- `/helper` : The directory to store things that will be used to help the Back End side operates. It consist of useful things such as DTOs, error variables, and message constants.- `/dto` : The directory to store DTO (Data Transfer Object) which is a placeholder for other objects, mainly to store data for requests and responses.
- `/errors` : The directory to store stores error variables for each entity and other needs.
- `/messages` : The directory to store message constants for each entity.- `/repository` : The directory for things related to the Repository layer which is the layer that is responsible to interact directly with the database.
- `/service` : The directory for things related to the Service layer which is the layer that is responsible for the flow / business logic of the app.- `/database`: The directory for things related to the database for example migrations and seeders.
- `/seeder` : The directory for things related to database seeding for each entity.
### Explanation (ID)
- `/api/v1` : Directory yang berisi berbagai hal yang berkaitan dengan API seperti daftar endpoint yang disediakan (route) serta handler (controller) dari setiap endpointnya. Subdirectory `/v1` sendiri digunakan untuk menyimpan beberapa versi dari API yang dapat ditambahkan sesuai kebutuhan.
- `/controller` : Directory untuk menyimpan hal-hal terkait dengan Controller yang merupakan bagian dari program yang berfungsi menerima request dan memberikan response.
- `/router` : Directory untuk menyimpan hal-hal yang terkait dengan routing. Berisikan routes atau endpoints yang didukung beserta dengan metode requestnya.- `/common` : Directory yang berisi berbagai hal umum untuk digunakan di seluruh directory.
- `/base` : Directory yang berisi berbagai variabel, konstanta, maupun fungsi standar untuk digunakan di berbagai directory lainnya seperti response, request, error, struktur dasar model, konstanta, dan lain-lain.
- `/middleware` : Directory untuk menyimpan Middleware yang merupakan mekanisme yang menengahi proses HTTP request dan response sebelum ditangani secara langsung oleh controller setiap route.
- `/util` : Directory untuk kode terkait fungsi-fungsi utilitas atau pembantu lainnya yang bisa digunakan di berbagai directory lainnya.- `/config` : Directory yang berisi hal terkait konfigurasi aplikasi. Contohnya seperti konfigurasi database.
- `/core` : Directory yang berisi berbagai hal yang berkaitan dengan sisi inti dari Back End. Meliputi business logic, entitas, maupun interaksi dengan database.
- `/entity` : Directory untuk menyimpan entitas atau model yang digunakan baik di migrasi maupun di aplikasi.
- `/helper` : The directory to store things that will be used to help the Back End side operates. It consist of useful things such as DTOs, error variables, and message constants.- `/dto` : Directory untuk menyimpan DTO (Data Transfer Object) adalah placeholder untuk suatu object lain yang digunakan untuk menampung data request dan response.
- `/errors` : Directory untuk menyimpan variabel-variabel error untuk baik yang spesifik untuk setiap entitas maupun yang lain.
- `/messages` : Directory untuk menyimpan konstanta pesan untuk digunakan dalam response API.- `/repository` : Directory untuk menyimpan hal-hal terkait Repository yang merupakan lapisan yang berhubungan langsung dengan database.
- `/service` : Directory untuk menyimpan hal-hal terkait Service yang merupakan lapisan yang bertanggung jawab menangani alur atau logika bisnis aplikasi.- `/database`: Directory untuk menyimpan hal-hal terkait migrasi dan juga seeding terhadap database.
- `/seeder` : Directory untuk menyimpan hal-hal yang diperlukan untuk seeding terhadap database dengan dipisahkan sesuai entitas.
## Pre-requisites
### PostgreSQL Requirements
1. Create the database in PostgreSQL with the name equal to the value of DB_NAME in `.env`
2. Use the command `CREATE EXTENSION IF NOT EXISTS "uuid-ossp";` on the database terminal### GitHooks Requirements
> Note : GitHooks is not mandatory for this starter. Only do the steps below if you want to apply & use it.
1. Install golangci-lint as the linters aggregator for pre-commit linting by executing `go install github.com/golangci/golangci-lint@latest`. Alternatively, you can follow the recommended method, which involves installing the binary from the [official source](https://golangci-lint.run/usage/install/#binaries)
2. Install commitlint as the conventional commit message checker by executing `go install github.com/conventionalcommit/commitlint@latest`. Alternatively, you can follow the recommended method, which involves installing the binary from the [official source](https://github.com/conventionalcommit/commitlint/releases)
3. Configure your git's hooks path to be linked to the `.githooks` directory on this repository by executing `git config core.hooksPath .githooks`## How to Run?
1. Use the command `make tidy` (or use `go mod tidy` instead, if `make` is unable to be used) to adjust the dependencies accordingly
2. Use the command `make run` (or use `go run main.go` instead, if `make` is unable to be used) to run the application## API Documentation (Postman)
Link : https://documenter.getpostman.com/view/25087235/2s9YXfcizj