# ConfiVoice

Struktur utama project:

```text
confivoice3/
├── cv_app/   # Aplikasi Flutter mobile
├── ml/       # Machine learning, model, dataset, dan API prediksi
└── cv_web/   # Website admin untuk melihat data hasil prediksi siswa/i
```

## 1. Jalankan API Prediksi

API berada di folder `ml/`.

```bash
cd ml
../cv_app/.venv/bin/python -m uvicorn api_app:app --host 0.0.0.0 --port 8000
```

Endpoint penting:

```text
POST http://localhost:8000/predict
POST http://localhost:8000/predictions
GET  http://localhost:8000/predictions
GET  http://localhost:8000/model
```

`POST /predict` hanya menjalankan analisis dan menampilkan hasil di Flutter.
Data baru masuk database setelah pengguna menekan tombol `Simpan Hasil`, yang
mengirim data ke `POST /predictions`.

## 2. Jalankan Flutter Mobile

Flutter berada di folder `cv_app/mobile_app/`.

```bash
cd cv_app/mobile_app
flutter pub get
flutter run
```

Endpoint default emulator Android:

```text
http://10.0.2.2:8000/predict
```

Jika memakai HP fisik, ganti endpoint di menu `Model` menjadi IP komputer,
misalnya:

```text
http://192.168.1.6:8000/predict
```

## 3. Jalankan Website Admin

Admin berada di folder `cv_web/`.

```bash
cd cv_web
../cv_app/.venv/bin/python -m uvicorn app:app --host 0.0.0.0 --port 8001
```

Buka:

```text
http://localhost:8001/admin
```

## Database phpMyAdmin / MySQL

Struktur baru default memakai MySQL/MariaDB agar data bisa dicek lewat
phpMyAdmin.

1. Nyalakan MySQL dari XAMPP/MAMP.
2. Buka phpMyAdmin.
3. Jalankan API. Database dan tabel akan dibuat otomatis jika user MySQL punya
   izin `CREATE DATABASE`.

Konfigurasi default:

```text
host: 127.0.0.1
port: 3306
user: root
password: kosong
database: confivoice
table: prediction_results
```

Jika setting MySQL kamu berbeda, pakai environment:

```bash
export CONFIVOICE_DB_DRIVER=mysql
export CONFIVOICE_MYSQL_HOST=127.0.0.1
export CONFIVOICE_MYSQL_PORT=3306
export CONFIVOICE_MYSQL_USER=root
export CONFIVOICE_MYSQL_PASSWORD=
export CONFIVOICE_MYSQL_DATABASE=confivoice
```

Untuk MAMP, biasanya port `8889` dan password `root`.

Schema SQL manual tersedia di:

```text
cv_web/schema_mysql.sql
```

Jika ada data SQLite lama yang mau dipindah ke MySQL:

```bash
cd ml
../cv_app/.venv/bin/python migrate_sqlite_to_mysql.py
```

SQLite lama, jika masih ada, berada di:

```text
cv_web/data/confivoice.db
```

## File Lama

Beberapa file lama di `cv_app/` masih dipertahankan agar command lama tidak
langsung rusak:

```text
cv_app/api_app.py
cv_app/app.py
cv_app/predict_app.py
cv_app/audio_utils_app.py
cv_app/database.py
```

Untuk struktur baru, gunakan:

```text
ml/api_app.py
cv_web/app.py
cv_app/mobile_app/
```
