inbox
inbox, sistem, cihaz alarmı ve kullanıcı mesajlarını tek bir ileti kutusu modeli altında toplayan tablodur. Kullanıcıya doğrudan gönderilen mesajlar ile cihaz bağlamlı bildirimler aynı veri yapısı üzerinden taşınır.
Bu tablo, push bildirimi üretimi, konuşma zinciri (conversation_id) ve mesaj yanıt ilişkisinin (reply_to_id) tek yerde tutulmasını sağlar.
Kritik Kural
receiver_id ve device_id alanları için XOR kuralı geçerlidir: tam olarak biri dolu olmalıdır. Yani kayıt ya kullanıcı hedeflidir ya da cihaz hedeflidir; ikisi birden aynı anda dolu olmamalıdır.
Yapilacaklar (Soft Delete ve Audit)
-
is_deletedvedelete_timealanlari ile mesaj silme davranisi soft-delete standardina tasindi. -
created_byveupdated_byactor alanlari eklendi; sistem mesajlari icin0standardi tanimlandi. -
create_timeveupdate_timeyasam dongusu alanlari olarak korundu. - Mesaj guncelleme/silme islemlerini audit log tablosuna append-only yaz.
-
update_timeicin DB trigger zorunlulugu ekle.
FK Davranis Notlari
| FK | ON DELETE | ON UPDATE | Not |
|---|---|---|---|
inbox.sender_id -> users.id | SET NULL | CASCADE | Gonderen silinse de mesaj gecmisi korunur. |
inbox.receiver_id -> users.id | SET NULL | CASCADE | Alici silinse de mesaj gecmisi korunur. |
inbox.device_id -> devices.id | SET NULL | CASCADE | Cihaz hedefi silinse de mesaj gecmisi korunur. |
| Bu tabloyu referanslayan FK | ON DELETE | ON UPDATE | Not |
|---|---|---|---|
message_read_state.message_id -> inbox.id | CASCADE | CASCADE | Mesaj silinince kullanici okuma durumlari birlikte temizlenir. |
rule_events.message_id -> inbox.id | SET NULL | CASCADE | Olay gecmisi korunur, mesaj referansi opsiyonel kalir. |
Kolonlar
| Kolon | Tip | Null | Anlamı |
|---|---|---|---|
id | bigint | hayır | Mesaj birincil anahtarı |
type | varchar(30) | hayır | Mesaj tipi |
sender_id | int | evet | Gönderen kullanıcı; users.id |
receiver_id | int | evet | Alıcı kullanıcı; users.id |
device_id | varchar(21) | evet | Hedef cihaz; devices.id |
title | text | hayır | Mesaj başlığı |
message | text | hayır | Mesaj içeriği |
tags | json | evet | Etiket/kategori bilgileri |
reply_to_id | bigint | evet | Yanıtlanan mesaj; inbox.id |
conversation_id | bigint | evet | Konuşma zinciri kimliği |
payload | json | evet | Push template veya ek yük bilgileri |
push_state | boolean | hayır | Push bildirimi gönderildi mi (DEFAULT: false) |
push_sent_at | timestamp | evet | Push gönderim zamanı |
is_deleted | boolean | hayır | Soft delete bayrağı (DEFAULT: false) |
delete_time | timestamp | evet | Soft delete zamanı |
created_by | int | hayır | Kaydı oluşturan actor; users.id |
updated_by | int | hayır | Kaydı güncelleyen actor; users.id |
create_time | timestamp | hayır | Kayıt oluşturulma zamanı |
update_time | timestamp | hayır | Son güncelleme zamanı |
İndeksler
| İndeks | Tip | Açıklama |
|---|---|---|
id | Primary Key | Tablo birincil anahtarı |
Örnek Kayıtlar
- Hoş Geldiniz
- Pompa Alarmı
- Bakım Planı
- Bağlantı Kesildi
- Yanıt
- E2E-001 Alarm Mesaji
{
"id": 1,
"type": "system",
"sender_id": null,
"receiver_id": 1,
"device_id": null,
"title": "Hoş Geldiniz",
"message": "Uygulamaya başarıyla giriş yaptınız.",
"tags": {"category":"welcome"},
"reply_to_id": null,
"conversation_id": null,
"payload": {"push_template":{"code":"WELCOME","version":1,"locale":"tr"}},
"push_state": true,
"push_sent_at": "2026-04-03 09:00:05",
"is_deleted": false,
"delete_time": null,
"created_by": 0,
"updated_by": 0,
"create_time": "2026-04-03 09:00:00",
"update_time": "2026-04-03 09:00:05"
}
Özet: Kullanıcı 1'e gönderilmiş sistem kaynaklı hoş geldiniz mesajı.
{
"id": 2,
"type": "alert",
"sender_id": null,
"receiver_id": null,
"device_id": "46000000C47CA670",
"title": "Pompa Alarmı",
"message": "Cihazda kritik akım alarmı oluştu.",
"tags": {"category":"alarm","severity":"high"},
"reply_to_id": null,
"conversation_id": null,
"payload": {"push_template":{"code":"DEVICE_ALARM","version":1,"locale":"tr"},"push_params":{"device_name":"Kuyu 1 PowerStat","alarm":"Kritik akım alarmı"}},
"push_state": true,
"push_sent_at": "2026-04-03 10:30:05",
"is_deleted": false,
"delete_time": null,
"created_by": 0,
"updated_by": 0,
"create_time": "2026-04-03 10:30:00",
"update_time": "2026-04-03 10:30:05"
}
Özet: Cihaz hedefli alarm mesajı; push template ve parametreler payload içinde taşınır.
{
"id": 3,
"type": "user_message",
"sender_id": 1,
"receiver_id": 2,
"device_id": null,
"title": "Bakım Planı",
"message": "Yarın cihaz kontrolü için sahaya gidilecek.",
"tags": {"category":"message"},
"reply_to_id": null,
"conversation_id": 1001,
"payload": null,
"push_state": false,
"push_sent_at": null,
"is_deleted": false,
"delete_time": null,
"created_by": 1,
"updated_by": 1,
"create_time": "2026-04-03 11:00:00",
"update_time": "2026-04-03 11:00:00"
}
Özet: Kullanıcılar arası konuşmanın başlangıç mesajı; conversation_id ile thread'e bağlanır.
{
"id": 4,
"type": "system",
"sender_id": null,
"receiver_id": null,
"device_id": "46000000C47CA671",
"title": "Bağlantı Kesildi",
"message": "Cihaz son 2 saattir veri göndermiyor.",
"tags": {"category":"connectivity","severity":"medium"},
"reply_to_id": null,
"conversation_id": null,
"payload": {"push_template":{"code":"DEVICE_OFFLINE","version":1,"locale":"tr"},"push_params":{"device_name":"Organize Sanayi PowerStat"}},
"push_state": true,
"push_sent_at": null,
"is_deleted": false,
"delete_time": null,
"created_by": 0,
"updated_by": 0,
"create_time": "2026-04-03 12:00:00",
"update_time": "2026-04-03 12:00:00"
}
Özet: Cihaz bazlı bağlantı kesilme mesajı; push henüz planlanmış ama gönderilmemiş olabilir.
{
"id": 5,
"type": "user_message",
"sender_id": 2,
"receiver_id": 1,
"device_id": null,
"title": "Yanıt",
"message": "Tamam, bakım sonrası bana bilgi ver.",
"tags": {"category":"message"},
"reply_to_id": 3,
"conversation_id": 1001,
"payload": null,
"push_state": false,
"push_sent_at": null,
"is_deleted": false,
"delete_time": null,
"created_by": 2,
"updated_by": 2,
"create_time": "2026-04-03 11:10:00",
"update_time": "2026-04-03 11:10:00"
}
Özet: Aynı konuşma zincirinde, 3 numaralı mesaja verilmiş kullanıcı yanıtı.
{
"id": 101,
"type": "alert",
"sender_id": null,
"receiver_id": null,
"device_id": "46000000C47CA670",
"title": "E2E-001 Yuksek Akim Alarmi",
"message": "IFUND_R/S/T degerleri 45A esigini asti.",
"tags": {"category":"alarm","scenario":"E2E-001"},
"reply_to_id": null,
"conversation_id": null,
"payload": {"push_template":{"code":"DEVICE_ALARM","version":1,"locale":"tr"}},
"push_state": true,
"push_sent_at": "2026-04-09 10:30:05",
"is_deleted": false,
"delete_time": null,
"created_by": 0,
"updated_by": 0,
"create_time": "2026-04-09 10:30:05",
"update_time": "2026-04-09 10:30:05"
}
Özet: E2E-001 aksiyon çıktısı. rule_events.message_id=101 ile rule olayına bağlanır.