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
typeUserstruct{
IDint
IdentityNumberstring
Emailstring
Namestring
Base
}
typeUserServiceinterface{}
typeUserRepositoryinterface{}
```
**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