bank-sampah/Services/NotificationService.cs

208 lines
9.2 KiB
C#

using BankSampahApp.Models;
namespace BankSampahApp.Services;
public class NotificationService : INotificationService
{
private readonly List<NotificationItem> _notifications =
[
new()
{
Id = 1,
Title = "User BSU - 1",
Category = NotificationCategory.StatusAkun,
Severity = NotificationSeverity.Warning,
Summary = "Status akun Anda saat ini belum disetujui oleh [Nama BSU]. Mohon menunggu proses verifikasi data oleh pihak BSU. Anda akan mendapatkan notifikasi kembali setelah data Anda diverifikasi.",
CreatedAt = DateTime.UtcNow.AddDays(-1),
IsRead = false
},
new()
{
Id = 2,
Title = "User BSU - 2",
Category = NotificationCategory.StatusAkun,
Severity = NotificationSeverity.Success,
Summary = "Selamat! Akun Anda telah disetujui dan aktif oleh [Nama Bank Sampah Unit (BSU)]. Anda kini dapat melakukan transaksi penyetoran dan penarikan sampah melalui aplikasi Bank Sampah.",
CreatedAt = DateTime.UtcNow.AddDays(-2),
IsRead = true
},
new()
{
Id = 3,
Title = "User BSU - 2",
Category = NotificationCategory.StatusAkun,
Severity = NotificationSeverity.Error,
Summary = "Akun Anda ditolak oleh [Nama Bank Sampah Unit (BSU)]. Alasan: i. Data yang Anda berikan tidak valid atau tidak sesuai. ii. Pelanggaran terhadap kebijakan atau aturan Bank Sampah. Silakan hubungi [Nama BSU] untuk informasi lebih lanjut atau proses pengaktifan kembali akun Anda.",
CreatedAt = DateTime.UtcNow.AddDays(-3),
IsRead = false
},
new()
{
Id = 4,
Title = "User BSU - 2",
Category = NotificationCategory.Transaksi,
Severity = NotificationSeverity.Success,
Summary = "Terima kasih telah melakukan pengumpulan sampah di [Nama BSU]! Anda telah menyetorkan sampah seberat {berat_sampah} kg dengan total nilai sebesar Rp {jumlah_uang}. Terus berkontribusi menjaga lingkungan!",
CreatedAt = DateTime.UtcNow.AddDays(-4),
IsRead = false
},
new()
{
Id = 5,
Title = "User BSU - 2",
Category = NotificationCategory.Transaksi,
Severity = NotificationSeverity.Success,
Summary = "Penarikan saldo Anda telah berhasil diproses di [Nama BSU]. Jumlah yang ditarik: Rp {jumlah_uang}. Sisa saldo tabungan Anda saat ini: Rp {sisa_saldo}. Terima kasih telah berpartisipasi!",
CreatedAt = DateTime.UtcNow.AddDays(-5),
IsRead = true
},
new()
{
Id = 6,
Title = "User BSU - 2",
Category = NotificationCategory.StatusAkun,
Severity = NotificationSeverity.Success,
Summary = "Selamat! Akun Bank Sampah Unit (BSU) Anda telah disetujui dan diaktifkan oleh pihak Dinas. Anda kini dapat melakukan pengelolaan data nasabah, transaksi, serta pelaporan melalui sistem Bank Sampah.",
CreatedAt = DateTime.UtcNow.AddDays(-6),
IsRead = true
},
new()
{
Id = 7,
Title = "User BSU - 2",
Category = NotificationCategory.StatusAkun,
Severity = NotificationSeverity.Warning,
Summary = "Status verifikasi Bank Sampah Unit (BSU) Anda saat ini belum disetujui oleh pihak Dinas. Mohon menunggu proses pemeriksaan data dan kelengkapan dokumen.",
CreatedAt = DateTime.UtcNow.AddDays(-7),
IsRead = false
},
new()
{
Id = 8,
Title = "User BSU - 2",
Category = NotificationCategory.StatusAkun,
Severity = NotificationSeverity.Error,
Summary = "Mohon maaf, akun Bank Sampah Unit (BSU) Anda tidak dapat diaktifkan oleh pihak Dinas. Silakan lengkapi data atau hubungi pihak Dinas untuk proses klarifikasi dan pengajuan ulang.",
CreatedAt = DateTime.UtcNow.AddDays(-8),
IsRead = false
},
new()
{
Id = 9,
Title = "Pengajuan BSU - 1",
Category = NotificationCategory.Pengajuan,
Severity = NotificationSeverity.Info,
Summary = "Pengajuan verifikasi Bank Sampah Unit (BSU) Anda telah berhasil dikirim ke Bank Sampah Induk (BSI).\nMohon menunggu proses verifikasi dan persetujuan dari pihak BSI.\nAnda akan mendapatkan notifikasi kembali setelah pengajuan diverifikasi. ♻️",
CreatedAt = DateTime.UtcNow.AddDays(-9),
IsRead = false
},
new()
{
Id = 10,
Title = "Pengajuan BSU - 1",
Category = NotificationCategory.Pengajuan,
Severity = NotificationSeverity.Success,
Summary = "Selamat! 🎉\nPengajuan verifikasi Bank Sampah Unit (BSU) Anda telah disetujui dan diaktifkan oleh Bank Sampah Induk (BSI).\nAnda kini dapat mulai melakukan pengelolaan data transaksi.",
CreatedAt = DateTime.UtcNow.AddDays(-10),
IsRead = false
},
new()
{
Id = 11,
Title = "Pengajuan BSU - 2",
Category = NotificationCategory.Pengajuan,
Severity = NotificationSeverity.Warning,
Summary = "Anda menerima pengajuan keanggotaan baru dari Nasabah yang ingin bergabung dengan Bank Sampah Unit (BSU) Anda.\nMohon lakukan verifikasi data dan kelengkapan identitas sebelum memberikan keputusan.\n🔹 Nama Nasabah: {nama_nasabah}\n🔹 Tanggal Pengajuan: {tanggal_pengajuan}\n🔹 Nomor HP / ID Nasabah: {id_nasabah}\nLakukan verifikasi agar nasabah dapat segera menjadi anggota aktif BSU Anda. ♻️",
CreatedAt = DateTime.UtcNow.AddDays(-11),
IsRead = true
},
new()
{
Id = 12,
Title = "Pengajuan BSU - 2",
Category = NotificationCategory.Pengajuan,
Severity = NotificationSeverity.Info,
Summary = "Anda menerima pengajuan keanggotaan baru dari Bank Sampah Unit (BSU).\nMohon tinjau dan verifikasi data sebelum menyetujui atau menolak pengajuan.\n🔹 Nama BSU: {nama_bsu}\n🔹 Tanggal Pengajuan: {tanggal_pengajuan}\n🔹 Diajukan oleh: {nama_pengaju / penanggung_jawab}\nSegera lakukan verifikasi agar BSU dapat menjadi bagian dari jaringan Bank Sampah Induk Anda. ♻️",
CreatedAt = DateTime.UtcNow.AddDays(-12),
IsRead = false
},
new()
{
Id = 13,
Title = "Pengajuan BSU - 3",
Category = NotificationCategory.Pengajuan,
Severity = NotificationSeverity.Warning,
Summary = "Terdapat pengajuan verifikasi baru dari Bank Sampah Unit (BSU) yang perlu ditinjau.\nSilakan lakukan pemeriksaan data dan dokumen BSU sebelum menentukan status persetujuan.\n🔹 Nama BSU: {nama_bsu}\n🔹 Tanggal Pengajuan: {tanggal_pengajuan}\n🔹 Diajukan oleh: {nama_pengaju / penanggung_jawab}\nSegera lakukan verifikasi agar BSU dapat melanjutkan proses operasionalnya. ♻️",
CreatedAt = DateTime.UtcNow.AddDays(-13),
IsRead = true
}
];
public Task<IReadOnlyList<NotificationItem>> GetNotificationsAsync(NotificationCategory? category = null)
{
IEnumerable<NotificationItem> query = _notifications;
if (category.HasValue)
{
query = query.Where(n => n.Category == category.Value);
}
return Task.FromResult<IReadOnlyList<NotificationItem>>(query
.OrderByDescending(n => n.CreatedAt)
.Select(n => new NotificationItem
{
Id = n.Id,
Title = n.Title,
Summary = n.Summary,
Category = n.Category,
Severity = n.Severity,
CreatedAt = n.CreatedAt,
Link = $"/Notifications/Show/{n.Id}",
IsRead = n.IsRead
})
.ToList());
}
public NotificationItem? GetById(int id)
{
var notification = _notifications.FirstOrDefault(n => n.Id == id);
return notification is null
? null
: new NotificationItem
{
Id = notification.Id,
Title = notification.Title,
Summary = notification.Summary,
Category = notification.Category,
Severity = notification.Severity,
CreatedAt = notification.CreatedAt,
Link = $"/Notifications/Show/{notification.Id}",
IsRead = notification.IsRead
};
}
public Task<bool> UpdateReadStateAsync(int id, bool isRead)
{
var notification = _notifications.FirstOrDefault(n => n.Id == id);
if (notification is null)
{
return Task.FromResult(false);
}
notification.IsRead = isRead;
return Task.FromResult(true);
}
public Task<bool> DeleteAsync(int id)
{
var notification = _notifications.FirstOrDefault(n => n.Id == id);
if (notification is null)
{
return Task.FromResult(false);
}
_notifications.Remove(notification);
return Task.FromResult(true);
}
}