# 🦜 Henotic CLI - The Ultimate Backend Generator

Henotic CLI adalah generator backend multi-bahasa yang mempercepat pengembangan dengan struktur proyek modular dan pembuatan CRUD yang cerdas. Streamline workflow kamu dari hari pertama!

## 📋 Daftar Isi

- [Instalasi](#instalasi)
- [Perintah Dasar](#perintah-dasar)
- [Membuat Proyek Baru](#membuat-proyek-baru)
  - [TypeScript](#typescript)
  - [Golang](#golang)
  - [Bahasa Lainnya](#bahasa-lainnya)
- [Membuat Model dan CRUD](#membuat-model-dan-crud)
- [Mengelola Database](#mengelola-database)
  - [Seed Data](#seed-data)
  - [Unseed Data](#unseed-data)
  - [Migrasi](#migrasi)
  - [Drop Table](#drop-table)
  - [Reset](#reset)
- [Menjalankan Aplikasi](#menjalankan-aplikasi)
  - [Mode Development](#mode-development)
  - [Mode Production](#mode-production)
- [Struktur Proyek](#struktur-proyek)
  - [TypeScript](#struktur-typescript)
  - [Golang](#struktur-golang)
- [Konfigurasi](#konfigurasi)
- [Pemecahan Masalah](#pemecahan-masalah)
- [FAQ](#faq)

---

## 🚀 Instalasi

Henotic CLI membutuhkan [Bun](https://bun.sh) sebagai runtime. Pastikan Bun sudah terinstal di sistem kamu.

```bash
# Install Henotic CLI
curl -fsSL https://henotic.org/install | bash
```

Jika henotic tidak terdeteksi, kamu bisa menambahkan path ke henotic ke PATH sistem:

```bash
export PATH="$PATH:$HOME/.bun/bin"
```

Verifikasi instalasi:

```bash
henotic -v
```

---

## 🛠️ Perintah Dasar

Berikut adalah perintah dasar yang tersedia di Henotic CLI:

```bash
henotic new <project-name>    # Membuat proyek baru
henotic generate <model>      # Membuat model dan CRUD baru
henotic seed <module>         # Menjalankan seed pada modul
henotic unseed <module>       # Menjalankan unseed pada modul
henotic migrate <module>      # Menjalankan migrasi pada modul
henotic drop <module>         # Menjalankan drop table pada modul
henotic reset <module>        # Menjalankan drop + migrate + seed pada modul
henotic dev                   # Menjalankan aplikasi dalam mode development
henotic start                 # Menjalankan aplikasi dalam mode production
henotic build                 # Build aplikasi
henotic -h, --help            # Menampilkan bantuan
henotic -v, --version         # Menampilkan versi CLI
henotic update                # Memperbarui CLI ke versi terbaru
henotic delete                # Menghapus Henotic CLI dari sistem
```

Opsi tambahan:
```bash
--all                         # Menjalankan perintah pada semua modul (untuk seed/unseed/migrate/drop/reset)
```

---

## 🏗️ Membuat Proyek Baru

### TypeScript

```bash
henotic new my-app
```

Kamu akan diminta untuk memilih:
1. **Framework**: Express.js, Elysia (Bun), Hono, atau Next.js
2. **Database**: PostgreSQL, MongoDB, MariaDB, atau SQLite
3. **Project Directory**: Apakah menggunakan folder `src/` atau tidak

Henotic akan:
- Menginisialisasi proyek TypeScript
- Menginstal dependensi yang diperlukan
- Membuat struktur folder dasar
- Membuat file konfigurasi `henotic.config.json`

### Golang

```bash
henotic new go-app
```

Kamu akan diminta untuk memilih database:
- PostgreSQL
- MariaDB
- SQLite

Henotic akan:
- Menginisialisasi modul Go
- Menginstal dependensi yang diperlukan (gin, gorm, godotenv, dll)
- Membuat struktur folder standar Go
- Membuat file konfigurasi `henotic.config.json`
- Membuat file `.env` dengan konfigurasi default

### Bahasa Lainnya

Henotic juga mendukung Java, PHP, dan Rust (dalam pengembangan).

---

## 📊 Membuat Model dan CRUD

Setelah proyek dibuat, kamu dapat membuat model dan operasi CRUD dengan perintah:

```bash
henotic generate User name:string email:string age:number isActive:boolean
```

Format: `henotic generate <ModelName> <field1:type> <field2:type> ...`

Tipe data yang didukung:
- string
- number
- boolean
- date
- array
- object

Henotic akan membuat:
- Model/Entity
- Repository/DAO
- Service
- Controller/Handler
- Routes
- Validasi
- Migrasi (jika diperlukan)
- Seed
- Sample data JSON

---

## 💾 Mengelola Database

### Seed Data

Mengisi database dengan data sampel:

```bash
# Seed satu modul
henotic seed User

# Seed semua modul
henotic seed --all
```

### Unseed Data

Menghapus data seed dari database:

```bash
# Unseed satu modul
henotic unseed User

# Unseed semua modul
henotic unseed --all
```

### Migrasi

Membuat atau memperbarui skema database:

```bash
# Migrasi satu modul
henotic migrate User

# Migrasi semua modul
henotic migrate --all
```

### Drop Table

Menghapus tabel dari database:

```bash
# Drop satu modul
henotic drop User

# Drop semua modul
henotic drop --all
```

### Reset

Menjalankan drop + migrate + seed dalam satu perintah:

```bash
# Reset satu modul
henotic reset User

# Reset semua modul
henotic reset --all
```

> **Catatan**: Untuk proyek Go, perintah `reset` akan otomatis dialihkan ke `seed` karena proses seed di Go sudah mencakup operasi reset lengkap.

---

## 🚀 Menjalankan Aplikasi

### Mode Development

Menjalankan aplikasi dalam mode development dengan hot-reload:

```bash
henotic dev
```

### Mode Production

Build dan jalankan aplikasi dalam mode production:

```bash
henotic start
```

Atau build saja tanpa menjalankan:

```bash
henotic build
```

---

## 📁 Struktur Proyek

### Struktur TypeScript

```
my-app/
├── src/ (opsional)
│   ├── config/
│   │   ├── db.json
│   │   └── index.ts
│   ├── modules/
│   │   └── users/
│   │       ├── user.schema.ts
│   │       ├── user.repository.ts
│   │       ├── user.service.ts
│   │       ├── user.migrate.ts
│   │       ├── user.seed.ts
│   │       └── index.ts
│   ├── router.ts
│   ├── error.ts
│   └── index.ts
├── data/
│   └── users.json
├── henotic.config.json
└── package.json
```

### Struktur Golang

```
go-app/
├── cmd/
│   ├── main/
│   │   └── main.go
│   └── seed/
│       └── main.go
├── internal/
│   ├── module/
│   │   └── user/
│   │       ├── entity/
│   │       │   └── user.go
│   │       ├── service/
│   │       │   └── service.go
│   │       ├── handler/
│   │       │   ├── handler.go
│   │       │   └── route.go
│   │       └── bootstrap.go
│   └── seed/
│       └── user.go
├── pkg/
│   ├── config/
│   │   └── config.go
│   ├── database/
│   │   └── database.go
│   ├── middleware/
│   │   └── middleware.go
│   └── utils/
│       └── response.go
├── data/
│   └── users.json
├── .env
├── go.mod
├── go.sum
└── henotic.config.json
```

---

## ⚙️ Konfigurasi

Henotic menggunakan file `henotic.config.json` untuk menyimpan konfigurasi proyek:

```json
{
  "language": "typescript",
  "framework": "express",
  "database": "postgresql",
  "projectDir": "src"
}
```

- **language**: Bahasa pemrograman (`typescript`, `golang`, `java`, `php`, `rust`)
- **framework**: Framework yang digunakan (`express`, `elysia`, `hono`, `next`, `gin`, dll)
- **database**: Database yang digunakan (`postgresql`, `mongodb`, `mariadb`, `sqlite`)
- **projectDir**: Direktori utama proyek (kosong atau `"src"`)

### Konfigurasi Environment

Untuk proyek Go, Henotic membuat file `.env` dengan konfigurasi default:

```
# PostgreSQL
DB_HOST=localhost
DB_PORT=5432
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=postgres
SERVER_PORT=8080
APP_ENV=development
TRUSTED_PROXIES=127.0.0.1
```

```
# MariaDB
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=password
DB_NAME=mariadb
SERVER_PORT=8080
APP_ENV=development
TRUSTED_PROXIES=127.0.0.1
```

```
# SQLite
DB_PATH=database.db
SERVER_PORT=8080
APP_ENV=development
TRUSTED_PROXIES=127.0.0.1
```

---

## 🔧 Pemecahan Masalah

### Perintah tidak ditemukan

Jika `henotic` tidak ditemukan, pastikan:
1. Bun terinstal dengan benar
2. Path global Bun ada di PATH sistem
3. Coba instal ulang: `bun install -g henotic-cli`

### Gagal generate

Jika gagal generate, pastikan:
1. Kamu berada di direktori root proyek
2. File `henotic.config.json` ada dan valid
3. Format perintah generate sudah benar

### Gagal seed/migrate

Jika gagal seed atau migrate, pastikan:
1. Database sudah berjalan dan dapat diakses
2. Konfigurasi database sudah benar
3. Modul yang direferensikan sudah ada

---

## ❓ FAQ

### Apakah Henotic mendukung database lain?

Saat ini Henotic mendukung PostgreSQL, MongoDB, MariaDB, dan SQLite. Dukungan untuk database lain sedang dalam pengembangan.

### Bagaimana cara menambahkan relasi antar model?

Saat ini kamu perlu mengedit file model/entity secara manual untuk menambahkan relasi. Dukungan otomatis untuk relasi sedang dalam pengembangan.

### Apakah Henotic mendukung autentikasi?

Belum ada dukungan bawaan untuk autentikasi, tetapi kamu dapat menambahkannya secara manual ke proyek yang dihasilkan.

### Bagaimana cara berkontribusi ke Henotic?

Kunjungi repositori GitHub kami di [https://github.com/hens-msn](https://github.com/hens-msn) untuk informasi tentang cara berkontribusi.

---

© 2025 Henotic Team. Dibuat dengan ❤️ untuk developer.

--- 

Simpan konten ini dalam file `README.md` untuk dokumentasi proyek Anda!