# Modul 9: Author Analytics

## 1. Data Apa yang Perlu Direkam
Untuk menghasilkan analytics yang kaya bagi author, sistem merekam data berikut (baik secara langsung maupun historikal):
- **Submission & Status**: Waktu submit, waktu diterima (accepted), waktu publish, direkam di `submissions` dan `submission_histories`.
- **Engagement / Impact**: Jumlah view artikel (`published_articles.views_count`), jumlah download PDF (`article_galleys.downloads_count`), dan jumlah diskusi (`article_discussions`).
- **Writing Behavior**: Sesi penulisan/revisi dalam platform (kapan nulis, durasi, word counts). Direkam khusus di `author_writing_sessions`.
- **Keywords / Topik**: Diekstrak dari `keywords` pada draft submission atau meta data artikel untuk `Research Interest Map`.

## 3. Query Agregasi
Contoh perhitungan agregal dengan MySQL murni yang akan disematkan di Model/Service:
- **Acceptance Rate**: `(Jumlah accepted) / (Total submission) * 100%`
- **Impact Summary**: `SUM(views_count)` dan `SUM(downloads_count)` dijoin dengan submission author.
- **Waktu Produktif**: Menggunakan fungsi MySQL `HOUR(start_time)` distatistik kemunculan terbanyak.
- **Rata-rata Turnaround Submit to Accept**: Menggunakan `DATEDIFF` antara histori status submit dan accept.

## 9. Cache Strategy
Analytics kalkulasi (apalagi join banyak tabel) akan berat jika dijalankan setiap kali halaman dimuat. 
Oleh karena itu kita menggunakan:
- Tabel khusus `author_analytics_cache` yang menyimpan hasil agregasi dalam format JSON (menghindari kolom fix yang kaku).
- Field `updated_at` memandu cache invalidation. Jika `updated_at` sudah lewat lebih dari 24 jam (misal 1 hari), maka `AnalyticsService` akan melakukan recalculate secara on-the-fly, update row di tabel cache, lalu me-return hasil barunya.

## 10. Testing Scenario
- **Test 1: Acceptance Rate**: Buat 3 submission, set 1 status ke 'accepted'. Cek apakah Acceptance Rate = 33%.
- **Test 2: Impact Tracking**: Kunjungi halaman publik sebuah artikel milik author, lalu download galley. Pastikan angka Impact views & downloads pada dashboard penulis bertambah setelah cache direfresh/expired.
- **Test 3: Waktu Produktif**: Insert dummy jam kerja malam. Refresh analytics, pastikan "Most Productive Hour" di sekitar jam 21:00-02:00.
- **Test 4: Cache Invalidity**: Ubah timestamp `updated_at` di `author_analytics_cache` ke 2 hari lalu manual via DB, refresh halaman, pastikan perhitungan data terbaru akan tertulis ulang ke kolom cache JSON dan up to date.
