149 lines
3.5 KiB
Markdown
149 lines
3.5 KiB
Markdown
# Handler Generator CLI Tool
|
|
|
|
CLI tool untuk generate handler baru secara otomatis dengan swagger documentation.
|
|
|
|
## Cara Penggunaan
|
|
|
|
### Windows
|
|
```bash
|
|
# Buka terminal di folder tools
|
|
generate.bat <nama-handler> [methods]
|
|
|
|
# Contoh:
|
|
generate.bat user get post
|
|
generate.bat product get post put delete
|
|
```
|
|
|
|
### Linux/Mac
|
|
```bash
|
|
# Buka terminal di folder tools
|
|
./generate.sh <nama-handler> [methods]
|
|
|
|
# Contoh:
|
|
./generate.sh user get post
|
|
./generate.sh product get post put delete
|
|
```
|
|
|
|
### Langsung dengan Go
|
|
```bash
|
|
# Dari root project
|
|
go run tools/generate-handler.go <nama-handler> [methods]
|
|
|
|
# Contoh:
|
|
go run tools/generate-handler.go user get post put delete
|
|
go run tools/generate-handler.go product get post
|
|
```
|
|
|
|
## Method yang Tersedia
|
|
- `get` - GET endpoint untuk list data
|
|
- `post` - POST endpoint untuk create data
|
|
- `put` - PUT endpoint untuk update data
|
|
- `delete` - DELETE endpoint untuk delete data
|
|
|
|
## File yang Dibuat Otomatis
|
|
|
|
1. **Handler**: `internal/handlers/<nama>/<nama>.go`
|
|
2. **Models**: `internal/models/<nama>/<nama>.go`
|
|
3. **Routes**: Update otomatis di `internal/routes/v1/routes.go`
|
|
- **<nama>**: `Nama Directori`
|
|
- **<nama>.go**: `Nama file class`
|
|
|
|
## Contoh Penggunaan
|
|
|
|
### 1. Generate Handler dengan GET dan POST
|
|
```bash
|
|
./generate.sh user get post
|
|
```
|
|
|
|
### 2. Generate Handler dengan semua method
|
|
```bash
|
|
./generate.sh product get post put delete
|
|
```
|
|
|
|
### 3. Generate Handler dengan custom method
|
|
```bash
|
|
./generate.sh order get post delete
|
|
```
|
|
|
|
## Langkah Setelah Generate
|
|
|
|
1. Jalankan swagger generator:
|
|
```bash
|
|
swag init -g cmd/api/main.go
|
|
```
|
|
|
|
2. Jalankan aplikasi:
|
|
```bash
|
|
go run cmd/api/main.go
|
|
```
|
|
|
|
3. Akses swagger UI:
|
|
```
|
|
http://localhost:8080/swagger/index.html
|
|
```
|
|
|
|
## Struktur File yang Dibuat
|
|
|
|
### Handler File (`internal/handlers/<nama>/<nama>.go`)
|
|
- Struct handler
|
|
- Constructor function
|
|
- Endpoint methods dengan swagger documentation
|
|
- Error handling
|
|
- Import models dari `api-service/internal/models/<nama>`
|
|
|
|
### Model File (`internal/models/<nama>/<nama>.go`)
|
|
- Request models
|
|
- Response models
|
|
- Error response models
|
|
- Package name sesuai dengan nama handler
|
|
|
|
### Routes Update
|
|
- Otomatis menambahkan routes ke `/api/v1/<nama-plural>`
|
|
- Support parameter ID untuk endpoint spesifik
|
|
- Menggunakan componentHandlers untuk handler baru
|
|
|
|
## Contoh Output
|
|
|
|
Untuk command: `./generate.sh user get post`
|
|
|
|
### Handler yang dibuat:
|
|
- `GET /api/v1/users` - List users
|
|
- `GET /api/v1/users/:id` - Get user by ID
|
|
- `POST /api/v1/users` - Create new user
|
|
|
|
### Struktur Direktori:
|
|
```
|
|
internal/
|
|
├── handlers/
|
|
│ └── user/
|
|
│ └── user.go
|
|
├── models/
|
|
│ └── user/
|
|
│ └── user.go
|
|
```
|
|
|
|
### Swagger Documentation
|
|
Semua endpoint otomatis memiliki swagger documentation yang bisa diakses di:
|
|
```
|
|
http://localhost:8080/swagger/index.html
|
|
```
|
|
|
|
## Tips Penggunaan
|
|
|
|
1. **Nama Handler**: Gunakan nama singular (user, product, order)
|
|
2. **Method**: Pilih method sesuai kebutuhan CRUD
|
|
3. **Custom Fields**: Edit file models yang dibuat untuk menambahkan custom fields
|
|
4. **Service Layer**: Tambahkan service layer untuk business logic yang kompleks
|
|
5. **Repository Layer**: Tambahkan repository layer untuk database operations
|
|
|
|
## Troubleshooting
|
|
|
|
### Jika generate gagal:
|
|
- Pastikan berada di root project
|
|
- Pastikan file `internal/routes/v1/routes.go` ada
|
|
- Pastikan permission untuk menulis file
|
|
|
|
### Jika routes tidak muncul:
|
|
- Cek file `internal/routes/v1/routes.go` untuk duplikasi nama handler
|
|
- Pastikan tidak ada nama handler yang sama dengan yang sudah ada
|