Yang akan aku perbaiki

Ada beberapa hal yang menurutku bisa ditingkatkan sebelum implementasi.

1. Jangan kirim email sinkron

Ini satu-satunya keputusan yang menurutku agak berisiko.

Di proposal tertulis email tetap dikirim sinkron karena mengikuti pola sistem sekarang.

Masalahnya:

SMTP bisa lambat,

timeout,

hosting shared kadang delay.

Akibatnya proses approve cuti atau pembayaran gaji bisa terasa lambat.

Menurutku solusi yang lebih aman adalah:

tetap fallback sinkron bila queue tidak tersedia,

tapi Mailable sudah mengimplementasikan ShouldQueue.

Jadi nanti kalau suatu saat deploy ke VPS atau Railway, tinggal aktifkan queue tanpa mengubah kode.

2. email_sent sebaiknya timestamp

Daripada boolean, aku lebih suka:

email_sent_at TIMESTAMP NULL

Keuntungannya:

tahu kapan email dikirim,

bisa retry email yang gagal,

bisa audit.

Boolean hanya menjawab “pernah atau belum”.

3. Notification model terlalu bertanggung jawab

Sekarang Notification::created mengirim email. Itu membuat model memiliki side effect.

Idealnya:

model hanya menyimpan data,

observer atau service yang mengirim email.

Misalnya NotificationObserver.

Dengan begitu testing akan lebih mudah.

4. Tambahkan idempotency key

Dedupe berbasis message [Ref: ...] memang bekerja.

Tapi akan lebih kuat jika Notification punya kolom:

reference_key

Lalu diberi unique index.