Tapis.Core.Reminders
1.0.3
dotnet add package Tapis.Core.Reminders --version 1.0.3
NuGet\Install-Package Tapis.Core.Reminders -Version 1.0.3
<PackageReference Include="Tapis.Core.Reminders" Version="1.0.3" />
<PackageVersion Include="Tapis.Core.Reminders" Version="1.0.3" />
<PackageReference Include="Tapis.Core.Reminders" />
paket add Tapis.Core.Reminders --version 1.0.3
#r "nuget: Tapis.Core.Reminders, 1.0.3"
#:package Tapis.Core.Reminders@1.0.3
#addin nuget:?package=Tapis.Core.Reminders&version=1.0.3
#tool nuget:?package=Tapis.Core.Reminders&version=1.0.3
Tapis.Core.Reminders
Notlar ve hatırlatıcılar modülünün sözleşme paketi. Her ürün (ServiceManagement, HostelManagement) bu paketi kendi API'sinde barındırır ve kendi tenant veritabanında kendi tablolarını tutar. Paket tenant çözümlemesi, kimlik doğrulama ya da ürün varlıkları bilmez; ihtiyaç duyduğu her şeyi port üzerinden alır.
1.0.2'den beri uygulama servisleri ürünün içindedir (kullanıcı kararı S1, 2026-10-13). Paket not, hatırlatıcı,
bildirim ve ek servislerinin yalnız arayüzünü verir; implementasyon ürünün kendi repository/UnitOfWork
katmanını kullandığı için ürün projesinde yaşar. Paket container'dan DbContext çözmez.
İçerik
| Alan | Ne yapar |
|---|---|
Entities/ |
Note, Reminder, ReminderChecklistItem, ReminderAlarm, Notification, Attachment — hepsi OwnerUserId taşır |
Persistence/ |
ApplyRemindersModel(ModelBuilder) ile tablolar ürünün kendi DbContext'ine katılır (xmin damgası ve denetim interceptor'ı böylece otomatik gelir) |
Services/ |
servis arayüzleri (INoteService, IReminderService, INotificationService, IAttachmentService), tekrar kuralı (RecurrenceService), alarm işleyici (ReminderDispatchService) ve ek eşlemesi (AttachmentMap) |
RemindersLocalizationConsts |
ileti ve işlem anahtarları (İngilizce); metinler ürünün kaynak dosyalarında, ISharedLocalizer ile çözülür |
Scheduling/ |
sonraki alarma kadar uyuyan zamanlayıcı döngüsü ve sinyal |
Hubs/ |
RemindersHub — kullanıcı bazlı grup, NotificationCreated / UnreadCount olayları |
Controllers/ |
api/Notes, api/Reminders, api/ReminderAttachments, api/ReminderNotifications |
Ports/ |
IFileStorage, IReminderDbContextFactory, IReminderSchedulerSignal, IReminderRealtimeNotifier, IReminderClock |
Ürüne bağlama
// Program.cs
builder.Services.AddRemindersModule(builder.Configuration);
builder.Services.AddScoped<IReminderDbContextFactory, ServiceManagementReminderDbContextFactory>();
// Uygulama servisleri ürünün kendisindedir (S1): paket yalnız arayüzü tanımlar.
builder.Services.AddScoped<INoteService, NotService>();
builder.Services.AddScoped<IReminderService, HatirlaticiService>();
builder.Services.AddScoped<INotificationService, HatirlaticiBildirimService>();
builder.Services.AddScoped<IAttachmentService, HatirlaticiEkService>();
builder.Services.AddControllers().AddRemindersControllers();
...
app.MapRemindersModule(); // hub
// DbContext.OnModelCreating
builder.ApplyRemindersModel();
Yapılandırma Reminders bölümünden okunur (MaxSleepMinutes, MaxAttempts, RetryDelayMinutes, BatchSize,
IdleShutdownMinutes, Attachments:MaxSizeMb, Attachments:AllowedExtensions, Attachments:MaxFilesPerRecord,
Attachments:LocalRootPath).
Kurallar
- Uygulama servisi yazan ürün kendi
IUnitOfWork/repository'lerini kullanır,DbContext'i doğrudan açmaz; doğrulama FluentValidation validator'ıyla ürün tarafında yapılır (paket DTO'ları ürünün globalValidationFilter'ından geçer); kullanıcıya dönen her iletiISharedLocalizerileRemindersLocalizationConstsanahtarından çözülür. - Kayıtlar kişiseldir: her sorgu token'daki
OwnerUserIdile süzülür, başka kullanıcının kaydı olmayan kayıtla aynı 404'ü alır. - Bildirim yalnız uygulama içidir: e-posta, SMS, WhatsApp gönderilmez ve bunlar için soyutlama yoktur.
- Ek dosyalar yalnız yetki denetimi yapan indirme ucundan akar; depolama anahtarı istemciye hiç verilmez.
- Tüm tarihler yerel saat (Europe/Istanbul) yazılır; modülde UTC kullanılmaz.
- Elle transaction yalnız ürünün yürütme stratejisinin içinde açılır. Ürünler PostgreSQL context'ini
EnableRetryOnFailure(3)ile kuruyor; EF, yeniden deneyen bir strateji altındaBeginTransaction'ıInvalidOperationExceptionile reddeder. Yeni bir transaction gerekiyorsa gövdedb.Database.CreateExecutionStrategy().ExecuteAsync(...)içine konur ve yeniden denenebilir yazılır (her denemedeChangeTracker.Clear()+ veriyi sıfırdan oku). 1.0.0'da alarm turu bu kuralı ihlal ettiği için zamanlayıcı PostgreSQL'de hiç çalışmadı; SQLite testleri yeniden denemediği için göstermedi (regresyon testi:AlarmYenidenDenemeStratejisiTests).
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.EntityFrameworkCore (>= 10.0.10)
- Microsoft.EntityFrameworkCore.Relational (>= 10.0.10)
- Npgsql.EntityFrameworkCore.PostgreSQL (>= 10.0.0)
- Tapis.Core.Shared (>= 2.0.17)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.