# IMPLEMENTATION RULES

Dokumen ini adalah prompt kerja untuk AI yang akan mengimplementasikan project.

## Before Writing Code

Wajib baca berurutan:

1. `docs/01_REQUIREMENT.md`
2. `docs/02_PLAN.md`
3. `docs/03_DATABASE.md`

## Rules

- Jangan mengubah struktur database tanpa persetujuan.
- Gunakan Service Layer.
- Gunakan Repository Pattern.
- Gunakan Form Request Validation.
- Gunakan Transaction pada proses voting.
- Jangan membuat query langsung di controller.
- Gunakan Bootstrap 5.
- Gunakan Blade Components.
- Gunakan Soft Delete jika diperlukan.
- Semua fitur harus memiliki test case.

## Folder Structure

```text
app/
├── Services
├── Repositories
├── Http
├── Models
```

## Responsibility Split

- Controller hanya mengatur request dan response.
- Business logic harus berada di Service Layer.
- Query data harus melalui Repository.
- Validation harus berada di Form Request.

## Recommended Development Order

Jangan mulai dari halaman voting.

Urutan yang jauh lebih aman:

1. Authentication Organizer
2. Organization Module
3. Event Module
4. Candidate Module
5. Voter Import Module
6. OTP Module
7. Voting Engine
8. Audit Log
9. Result Dashboard
10. Landing Page
11. Report Export
12. Testing
13. Security Hardening

## Implementation Notes

- Gunakan komponen Blade untuk UI yang berulang.
- Pisahkan concern email OTP ke service yang bisa dipakai ulang.
- Voting harus atomik dan aman dari double submit.
- Audit log harus mencatat aksi penting tanpa menyimpan pilihan suara.
- Query agregasi hasil harus dioptimalkan agar tidak memicu N+1.

## Expected Quality

- Code harus konsisten dan mudah dirawat.
- Setiap modul harus punya test yang relevan.
- Perubahan schema hanya dilakukan kalau sudah disetujui.
- Semua asumsi penting harus dicatat sebelum implementasi besar.

