# Panduan Kolaborasi Tim — PADEBERKINEM

Repository: https://github.com/fauzi041169/MIR

Dokumen ini menjelaskan cara anggota tim clone, menjalankan aplikasi dengan setup yang sama, dan berkolaborasi lewat GitHub.

---

## 1. Prasyarat

| Tool | Versi minimum |
|------|---------------|
| Git | 2.x |
| PHP | 8.2+ (Composer) |
| Node.js | 20 LTS (frontend saja) |
| Docker Desktop | Terbaru (MySQL lokal) |
| npm | 10+ |

Opsional: [nvm](https://github.com/nvm-sh/nvm) / [nvm-windows](https://github.com/coreybutler/nvm-windows) — jalankan `nvm use` di root project (file `.nvmrc`).

---

## 2. Setup Pertama Kali (Development Lokal)

Cara ini sama dengan yang dipakai di mesin development utama: **MySQL via Docker**, **backend Laravel (`api/`)**, **frontend Next.js dengan npm**.

### 2.1 Clone repository

```bash
git clone https://github.com/fauzi041169/MIR.git
cd MIR
```

### 2.2 Copy file environment

**Windows (PowerShell / CMD):**

```powershell
copy .env.example .env
copy api\.env.example api\.env
copy frontend\.env.example frontend\.env.local
```

**Linux / macOS:**

```bash
cp .env.example .env
cp api/.env.example api/.env
cp frontend/.env.example frontend/.env.local
```

> Jangan commit file `.env` atau `.env.local`. File tersebut sudah di-ignore oleh Git.

### 2.3 Jalankan MySQL (Docker)

```bash
docker compose up -d mysql
```

### 2.4 Backend Laravel

```bash
cd api
composer install
cp .env.example .env   # jika belum
php artisan key:generate
php artisan app:seed-minimal
php artisan serve --port=3001
```

API: `http://localhost:3001/api/health`

### 2.5 Frontend Next.js

```bash
cd frontend
npm install
npm run dev
```

Frontend: `http://localhost:3000`

> Folder NestJS `backend/` **sudah dihapus**. Backend = `api/` (Laravel). Lihat `DEPLOY_GIT.md`.

Tunggu MySQL sehat (±30 detik), cek dengan:

```bash
docker compose ps
```

### 2.6 Login demo

Lihat daftar akun lengkap di [DEMO_ACCOUNTS.md](./DEMO_ACCOUNTS.md).

Contoh cepat:

| Role | Email | Password |
|------|-------|----------|
| Super Admin | `fauzigagar@gmail.com` | `Gombal@21` |
| Peserta | `peserta01@mir.local` | `Peserta@21` |
| Admin | `admin01@mir.local` | `Admin@21` |

---

## 3. Alternatif: Full Docker Stack

Jika ingin menjalankan semua service (backend, frontend, nginx) lewat Docker:

```bash
copy .env.example .env   # Windows
docker compose up -d
docker compose exec backend npx prisma migrate deploy
docker compose exec backend npx prisma db seed
```

Akses: **http://localhost** (via Nginx) atau **http://localhost:3000** (frontend langsung).

> Untuk mode Docker, pastikan `DATABASE_URL` di `.env` root memakai host `mysql` (bukan `localhost`). Lihat komentar di `.env.example`.

---

## 4. Alur Kerja Git (Kolaborasi Tim)

### Branch strategy

| Branch | Fungsi |
|--------|--------|
| `main` | Kode stabil / production-ready |
| `develop` | Integrasi fitur (opsional) |
| `feature/nama-fitur` | Fitur baru per developer |
| `fix/nama-bug` | Perbaikan bug |

### Workflow standar

```bash
# 1. Ambil update terbaru
git checkout main
git pull origin main

# 2. Buat branch fitur
git checkout -b feature/dashboard-peserta-kelas

# 3. Kerjakan perubahan, commit berkala
git add .
git commit -m "feat(peserta): tambah halaman kelas"

# 4. Push branch ke GitHub
git push -u origin feature/dashboard-peserta-kelas

# 5. Buat Pull Request di GitHub → review → merge ke main
```

### Aturan commit message

Gunakan prefix singkat:

- `feat:` — fitur baru
- `fix:` — perbaikan bug
- `docs:` — dokumentasi
- `refactor:` — refactor tanpa ubah behavior
- `chore:` — maintenance (deps, config)

### Sebelum push / buat PR

- [ ] Backend jalan tanpa error (`npm run start:dev`)
- [ ] Frontend jalan tanpa error (`npm run dev`)
- [ ] Migration Prisma sudah di-commit jika ada perubahan schema
- [ ] Tidak ada file `.env` / credential pribadi yang ter-commit

---

## 5. Database & Migration

```bash
cd backend

# Terapkan migration (wajib setelah pull jika ada migration baru)
npx prisma migrate deploy

# Seed ulang data demo (development only)
npx prisma db seed

# Reset database (HATI-HATI — hapus semua data)
npx prisma migrate reset
```

Jika Anda mengubah `schema.prisma`, buat migration baru:

```bash
npx prisma migrate dev --name deskripsi_singkat_perubahan
```

Schema database: `docs/database/` (referensi). Backend aktif: Laravel `api/`.

---

## 6. Troubleshooting

### Port sudah dipakai

```bash
# Cek proses di port 3000 / 3001 / 13306
netstat -ano | findstr :3000
netstat -ano | findstr :3001
```

### Database connection error

1. Pastikan Docker container `idp-mysql` running: `docker compose ps`
2. Pastikan `DB_*` di `api/.env` memakai `127.0.0.1:13306` (Docker MySQL)
3. Jalankan ulang: `npx prisma migrate deploy`

### `npm install` gagal

```bash
# Hapus node_modules dan install ulang
cd backend && rmdir /s /q node_modules && npm install
cd frontend && rmdir /s /q node_modules && npm install
```

### Frontend tidak bisa hit API

Pastikan `frontend/.env.local` berisi:

```
NEXT_PUBLIC_API_URL=http://localhost:3001/api
```

Restart `npm run dev` setelah mengubah env.

---

## 7. Menambah Anggota Tim di GitHub

Owner repository (`fauzi041169`) menambahkan collaborator:

1. Buka https://github.com/fauzi041169/PADEBERKINEM/settings/access
2. **Add people** → masukkan username/email GitHub anggota tim
3. Pilih role **Write** (bisa push branch & buat PR)

Anggota tim cukup clone repo dan ikuti langkah di bagian 2.

---

## 8. Struktur Penting

```
PADEBERKINEM/
├── api/              # Laravel API (backend)
├── docs/database/    # Referensi skema MySQL
├── frontend/         # Next.js
├── frontend/         # Next.js 15
├── docker-compose.yml
├── .env.example      # Template env root (Docker / infra)
├── DEMO_ACCOUNTS.md  # Akun login demo
└── CONTRIBUTING.md   # File ini
```

Pertanyaan teknis? Diskusikan lewat **GitHub Issues** atau **Pull Request comments**.

