# ConfiVoice Mobile App

Folder `cv_app/` dipakai untuk aplikasi Flutter mobile.

Kode Flutter berada di:

```text
cv_app/mobile_app/
```

File lama Streamlit/API masih ada di folder ini untuk kompatibilitas, tetapi
struktur baru yang disarankan adalah:

```text
ml/       # API prediksi dan model machine learning
cv_web/   # Website admin
cv_app/   # Flutter mobile
```

## Menjalankan Flutter

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

## Endpoint API

Jalankan API dari folder `ml/`:

```bash
cd ml
uvicorn api_app:app --host 0.0.0.0 --port 8000
```

Endpoint prediksi:

```text
POST /predict
```

Field multipart upload:

```text
file
student_name
```

Setiap prediksi dari Flutter akan disimpan ke database default:

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

SQLite tetap database SQL, tetapi tidak perlu server database terpisah. Cocok
untuk menjalankan aplikasi lokal/TA.

Jika ingin melihat database lewat phpMyAdmin, gunakan mode MySQL/MariaDB:

1. Nyalakan MySQL dari XAMPP/MAMP/Laragon.
2. Buka phpMyAdmin.
3. Buat database bernama `confivoice`, atau biarkan API membuat database otomatis jika user MySQL punya izin `CREATE DATABASE`.
4. Install dependency:

```bash
cd cv_app
source .venv/bin/activate
pip install PyMySQL
```

5. Jalankan API dengan konfigurasi MySQL:

```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
python -m uvicorn api_app:app --host 0.0.0.0 --port 8000
```

Untuk MAMP, password root biasanya `root` dan port MySQL bisa `8889`:

```bash
export CONFIVOICE_MYSQL_PASSWORD=root
export CONFIVOICE_MYSQL_PORT=8889
```

Setelah prediksi dari Flutter, data akan masuk ke tabel:

```text
confivoice.prediction_results
```

Endpoint untuk melihat data:

```text
GET /predictions
GET /admin
```

Website admin dapat dibuka di:

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

Jika memakai HP fisik, ganti `localhost` dengan IP komputer yang menjalankan API,
misalnya:

```text
http://192.168.1.6:8000/admin
```

## Catatan

- Folder `cv_app/` tidak berisi dataset utama.
- Folder `cv_app/` tidak berisi model utama.
- File upload diproses sebagai file sementara menggunakan `tempfile`.
- Audio non-WAV dikonversi otomatis ke WAV mono 22050 Hz menggunakan `pydub` dan `ffmpeg`.
