Commit b2af18f8 by mhmdhaekal

readme(initialize): Add README.MD

1 parent db6473ca
Showing with 175 additions and 2 deletions
#Go related
.env
/bin
#IDE related
.idea
.vscode
# MacOS related
.DS_store
**/.DS_store
\ No newline at end of file
# Go Webserver Boilerplate
Created for: Departemen Transformasi Digital Universitas Indonesia
Created for: Departemen Transformasi Digital Universitas Indonesia
Updated At: 21 February 2025
## Pendahuluan
Repositori ini digunakan sebagai referensi project menggunakan golang.
## Prerequisites
- Go 1.24 [download](https://go.dev/)
- Goose [download](https://github.com/pressly/goose)
- PostgreSQL
- Make [download](https://www.gnu.org/software/make/)
- Bash
## Package list
- Fiber v3
- Gorm (ORM)
- go-dotenv
## Memulai
Install seluruh software yang terdapat di prerequisites. **Khusus **windows** gunakan `git bash` selama menjalankan project**
### Clone repository
```shell
git clone git@gitlab.ui.ac.id:dtd/go-webserver-boilerplate.git
```
### Build example
```shell
make build <app-name>
```
### Start Project
## Environment Variable
- Salin `.env` dari `.env.example`
```shell
cp .env.example .env
```
- Isi seluruh value yang dibutuhkan di .env
## Start binary
```shell
./bin/<app-name>
```
# Dokumentasi
## Migrasi
Migrasi pada projek ini menggunakan goose, untuk membuat migrasi jalankan
```shell
goose --dir migration/postgres <migration-name> sql
```
isi file sql yang di-_generate_ oleh goose di folder `migration/postgres`
### Menjalankan migrasi
```shell
make migration-postgres
```
### Memeriksa status migrasi
```shell
make migration-postgres-status
```
## Struktur Folder
```
|- cmd/
| |- app-1/
| | |- main.go (entrypoint untuk aplikasi app-1)
| |- <app-lain>
|- internal/
| |- domain/
| | |-base.go
| | |-error.go
| |- handler/
| | |-specification
| | |-base.go
| | |-error.go
| |-repository/
| | |-postgresql/
| |-service/
|- migration/
|-postgres/
```
### cmd
Folder ini digunakan sebagai kumpulan apps yang nantinya dapat dijalankan.
Contoh:
- app-1: Fiber
- app-2: Scheduler
- app-3: worker
Setiap apps, harus memiliki file entrypoint atau package main.
### internal
Folder ini digunakan sebagai kumpulan _core logic_ yang nantinya akan digunakan untuk setiap apps. Sehingga, jika app-1 dan app-2 memiliki logic yang sama, dapat berbagi _core logic_.
#### domain
Folder ini digunakan sebagai `kontrak` dari setiap module yang nantinya akan diimplementasi. Contoh nama file `user.go` `auth.go`.
Dalam satu file di domain, setidaknya harus memiliki:
```go
type User struct {
ID int
IdentityNumber string
Email string
Name string
Base
}
type UserService interface {}
type UserRepository interface {}
```
**UserService**
interface tersebut berisi _function_ yang nantinya akan diimplementasi di folder `service`.
**UserRepository**
interface tersebut berisi _function_ yang nantinya akan diimplementasi di folder `repository`.
#### handle
Folder ini digunakan sebagai `handler` untuk setiap apps.
Contohnya adalah `UserHandler` digunakan untuk handle `api/v1/user`
Jika terdapat **dependencies injection** maka `type` yang digunakan adalah `interface` yang terdapat di domain.
#### repository
Folder ini digunakan untuk mengakses `database`, didalam folder ini `kontrak` yang dibuat di domain harus diimplementasi sesuai dengan driver yang digunakan.
Contoh:
- Pada example project ini, terdapat driver `postgresql` menggunakan gorm. Sehingga terdapat package `postgresql` dan terdapat file `user.go` untuk mengimplementasikan user repository yang terdapat di domain user.
#### service
Folder ini digunakan untuk _business logic_ dari aplikasi. Suatu service harus mengimplementasikan `kontrak UserService` yang dibuat di **`domain.User`**.
Jika terdapat **dependencies injection** maka `type` yang digunakan adalah `interface` yang terdapat di domain.
### migration
Kumpulan migration untuk database. Migration digunakan untuk memastikan perubahan database dapat dikelola dengan baik.
#### postgres
Migration yang berkaitan dengan database PostgreSQL
\ No newline at end of file
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!