message_read_state
message_read_state, her kullanıcının her mesaj için ayrı okuma/durum kaydını tutar. Böylece tek bir inbox mesajı farklı kullanıcılar için farklı klasör, okunma ve sabitleme durumunda olabilir.
Bu tablo, kullanıcı bazlı inbox deneyimini mümkün kılar; mesajın kendisi inbox tablosunda kalırken kullanıcıya özel durum burada saklanır.
inbox_message.status Enum Değerleri
| Değer | Anlamı |
|---|---|
unread | Okunmamış |
read | Okunmuş |
deleted | Silinmiş |
inbox_message.folder Enum Değerleri
| Değer | Anlamı |
|---|---|
inbox | Gelen kutusu |
archived | Arşiv |
trash | Çöp kutusu |
FK Davranis Notlari
| FK | ON DELETE | ON UPDATE | Not |
|---|---|---|---|
message_read_state.message_id -> inbox.id | CASCADE | CASCADE | Mesaj silindiginde okuma durumu kayitlari temizlenir. |
message_read_state.user_id -> users.id | CASCADE | CASCADE | Kullanici silindiginde okuma durumu kayitlari yetim kalmaz. |
Kolonlar
| Kolon | Tip | Null | Anlamı |
|---|---|---|---|
id | bigint | hayır | Kayıt birincil anahtarı |
message_id | bigint | hayır | Bağlı mesaj; inbox.id |
user_id | int | hayır | İlgili kullanıcı; users.id |
status | inbox_message.status | hayır | Kullanıcı açısından okuma/silinme durumu |
folder | inbox_message.folder | hayır | Mesajın kullanıcı tarafındaki klasörü |
snooze_until | timestamp | evet | Bildirimin yeniden görünmesi için bekleme zamanı |
auto_archive_at | timestamp | evet | Otomatik arşive alınma zamanı |
pinned | boolean | hayır | Mesaj sabitlendi mi (DEFAULT: false) |
read_time | timestamp | evet | Okunma zamanı |
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ı |
(message_id, user_id) | Unique | Aynı kullanıcı için aynı mesaja yalnız bir durum kaydı olabilir |
Örnek Kayıtlar
- Mesaj 1 - Kullanıcı 1
- Mesaj 2 - Sabitlenmiş
- Mesaj 3 - Arşiv
- Mesaj 4 - Snooze
- Mesaj 5 - Yanıt
{
"id": 1,
"message_id": 1,
"user_id": 1,
"status": "read",
"folder": "inbox",
"snooze_until": null,
"auto_archive_at": "2026-05-03 09:00:00",
"pinned": false,
"read_time": "2026-04-03 09:01:00",
"create_time": "2026-04-03 09:00:00",
"update_time": "2026-04-03 09:01:00"
}
Özet: Hoş geldiniz mesajı kullanıcı 1 tarafından okunmuş durumda ve inbox klasöründe tutuluyor.
{
"id": 2,
"message_id": 2,
"user_id": 1,
"status": "unread",
"folder": "inbox",
"snooze_until": null,
"auto_archive_at": "2026-04-10 10:30:00",
"pinned": true,
"read_time": null,
"create_time": "2026-04-03 10:30:00",
"update_time": "2026-04-03 10:30:00"
}
Özet: Alarm mesajı henüz okunmamış, inbox'ta sabitlenmiş durumda.
{
"id": 3,
"message_id": 3,
"user_id": 2,
"status": "read",
"folder": "archived",
"snooze_until": null,
"auto_archive_at": "2026-05-03 11:00:00",
"pinned": false,
"read_time": "2026-04-03 11:05:00",
"create_time": "2026-04-03 11:00:00",
"update_time": "2026-04-03 11:05:00"
}
Özet: Kullanıcı mesajı okunmuş ve arşiv klasörüne taşınmış.
{
"id": 4,
"message_id": 4,
"user_id": 1,
"status": "unread",
"folder": "inbox",
"snooze_until": "2026-04-04 08:00:00",
"auto_archive_at": "2026-04-10 12:00:00",
"pinned": false,
"read_time": null,
"create_time": "2026-04-03 12:00:00",
"update_time": "2026-04-03 12:00:00"
}
Özet: Bağlantı kesilmesi mesajı okunmamış durumda ve belli bir tarihe kadar snooze edilmiş.
{
"id": 5,
"message_id": 5,
"user_id": 1,
"status": "read",
"folder": "inbox",
"snooze_until": null,
"auto_archive_at": "2026-05-03 11:10:00",
"pinned": false,
"read_time": "2026-04-03 11:12:00",
"create_time": "2026-04-03 11:10:00",
"update_time": "2026-04-03 11:12:00"
}
Özet: Kullanıcı 1, konuşma yanıtını okumuş ve inbox içinde tutuyor.