Tampilan
Overview Produk
Apa itu Aktiva Transaksional Email (ATE)?
Aktiva Transaksional Email adalah layanan SaaS transactional email relay milik Aktiva. Pelanggan (perusahaan) berlangganan paket layanan untuk dapat mengirim email transaksional (notifikasi, OTP, invoice, dsb.) melalui infrastruktur relay milik Aktiva, dengan reputasi pengiriman (SPF/DKIM/DMARC) yang sudah dikelola.
Repository ini (transaksional-email-be, nama internal package: aktiva) adalah backend/API dari produk tersebut. Ia bukan mail server itu sendiri — pengiriman email aktual dilakukan oleh ZoneMTA dan Zimbra (lihat Alur Pengiriman Email). Backend ini berperan sebagai control plane: mengelola pelanggan, domain, langganan, billing, kuota, provisioning relay account, dan reporting.
Status
Sistem ini sudah production dan melayani banyak paid customer. Implikasinya: stabilitas dan kontinuitas layanan adalah prioritas utama dalam setiap perubahan.
Peran sistem dalam bisnis
Backend ATE menjembatani beberapa kebutuhan bisnis sekaligus:
| Domain | Tanggung jawab backend |
|---|---|
| Akuisisi & onboarding | Registrasi user, verifikasi email, pembuatan company, setup domain pengirim |
| Provisioning | Membuat relay account di Zimbra, mendaftarkan domain ke ZoneMTA, generate API token pengiriman |
| Billing & langganan | Membuat estimate/invoice di Zoho Books, pembayaran via Xendit (sekali bayar & recurring), pencatatan pembayaran, faktur pajak |
| Quota & enforcement | Menghitung kuota pengiriman per langganan, menangani over-quota (kelebihan kuota), suspend relay saat kuota habis/menunggak |
| Observability pelanggan | Menyimpan & menyajikan log pengiriman email (delivered/failed) dari Elasticsearch, laporan harian, ekspor CSV |
| Notifikasi | Mengirim email notifikasi (invoice, reminder, kuota, dll.) via SMTP/nodemailer + template Pug |
Komponen utama (high-level)
Ringkasan teknologi
| Aspek | Teknologi | Catatan |
|---|---|---|
| Runtime | Node.js 14.x | Sudah End-of-Life — lihat Rekomendasi Migrasi |
| Web framework | Express 4 | + express-async-errors |
| ORM | Sequelize 6 | Dialect PostgreSQL |
| Database | PostgreSQL | mysql2 ada di dependency tapi tidak dipakai untuk DB utama |
| Queue async | DB-backed (Jobs table) + child process | bull terpasang namun tidak digunakan |
| Email notifikasi | nodemailer + Pug | Template di views/mailing/ |
| Logging | Winston + Morgan | + Elasticsearch untuk delivery log |
| Auth | JWT (jsonwebtoken) | Access + refresh token |
| Validasi | Joi | |
| Pembayaran | Xendit (xendit-node) | |
| Invoicing | Zoho Books API | |
| Object storage | AWS SDK → Linode Object Storage | |
| Proses manager | PM2 | ecosystem.config.js |
| CI/CD | GitHub Actions | Deploy SSH + git pull + pm2 reload |
Peta dokumentasi
- Arsitektur Sistem — gambaran layered architecture & request flow.
- Glosarium — istilah domain (relay account, kuota, over-quota, proforma, dll.).
- Setup — cara menjalankan secara lokal.
- Basis Data — skema & ERD.
- Alur Bisnis — workflow inti end-to-end.
- Referensi API — daftar endpoint.
- Operasional & Known Issues.
- Migrasi & Improvement — rekomendasi strategi ke depan.