mobile_devices
Bu tablo kullanıcıya ait mobil kurulumları ve push token ilişkisini taşır.
Bir kullanıcının birden fazla telefonu olabilir. Push token, cihaz platformu, uygulama sürümü ve son görülme bilgileri kullanıcı tablosunda tutulursa hem tekrar oluşur hem de çok cihazlı senaryo bozulur. Bu nedenle her mobil kurulum ayrı bir kayıt olarak izlenir; aynı kullanıcı hem iPhone hem Android cihazla sisteme bağlanabilir. Kısaca: kullanıcının hangi mobil kurulumlarla sisteme eriştiği bu tabloda tutulur.
Push performans kuralı: kullanıcı statüsü 204 (Suspended) olduğunda bu kullanıcıya push gönderimi yapılmaz. Uygulama katmanı push gönderiminden önce users.status_id kontrol eder; 204 ise ilgili kullanıcının tüm cihaz kurulumları push hedef listesinden çıkarılır. Kullanıcı tekrar 202 (Active) olduğunda push gönderimi yeniden açılır.
Push teslim başarısızlık kuralı: push sağlayıcısı "token geçersiz / cihaz push kabul etmiyor" dönerse ilgili mobile_devices kaydı pasife alınır (is_active: false) ve push hedef listesinden çıkarılır. Aynı kayıt uzun süre pasif kalırsa (operasyon politikası) silinebilir. Önerilen sıra: önce pasifleştir, geri kazanılamayan tokenlarda temizlik job'ı ile sil.
Bu tablo kullanıcı hesabının kendisini veya yetki ilişkilerini taşımaz; o bilgiler sırasıyla users, authorities ve authority_permissions tablolarındadır. Burada yalnızca mobil istemcinin kurulumu, teknik kimliği ve erişim durumu yer alır. Kısaca: kimlik ve yetki tanımı burada değildir.
Kolonlar
| Kolon | Tip | Null | Kısıtlar | Anlamı |
|---|---|---|---|---|
id | int | hayır | PK, AUTO INCREMENT | Mobil cihaz anahtarı |
user_id | int | hayır | FK → users.id | Sahibi olan kullanıcı |
device_identifier | varchar(255) | hayır | UNIQUE (user_id ile birlikte) | Uygulama kurulum kimliği |
push_token | varchar(255) | hayır | - | Push bildirimi token değeri |
platform | mobile_device.platform | hayır | ENUM: ios, android | Mobil işletim sistemi ailesi |
manufacturer | varchar(50) | evet | - | Cihaz üreticisi |
model | varchar(50) | evet | - | Cihaz modeli |
os_version | varchar(50) | evet | - | İşletim sistemi sürümü |
app_version | varchar(50) | evet | - | Uygulama sürümü |
is_active | boolean | hayır | DEFAULT: true | Kurulum aktif mi (Suspended veya push teslim hatasında push hedefinden düşürülür) |
last_login_time | timestamp | evet | - | Son başarılı giriş zamanı |
last_seen_time | timestamp | evet | - | Son aktif görülme zamanı |
create_time | timestamp | hayır | - | Oluşturma zamanı |
update_time | timestamp | hayır | - | Güncelleme zamanı |
Unique Constraint: (user_id, device_identifier)
Push Token Yaşam Döngüsü (Öneri)
- Uygulama her açılışta
user_id + device_identifier + push_tokenbilgisi ile kayıt güncellemeli. - Aynı kullanıcı ve aynı kurulum kimliği varsa yeni satır açmak yerine mevcut kayıt güncellenmeli.
- Push sağlayıcısı "token geçersiz / kayıt yok" döndürdüğünde ilgili cihaz kaydı pasife alınmalı (
is_active: false). - Pasif cihaz kayıtları belirlenen süre sonunda (ör. 30 gün) temizlik süreci ile silinmeli.
- Push gönderim listesi oluşturulurken yalnızca aktif kullanıcı + aktif cihaz kayıtları filtreye alınmalı.
Örnek Kayıtlar
- Kullanıcı 1 iPhone
- Kullanıcı 1 Android
- Kullanıcı 2 iPhone
{
"id": 1,
"user_id": 1,
"device_identifier": "ios-installation-001",
"push_token": "expo_token_user1_ios",
"platform": "ios",
"manufacturer": "Apple",
"model": "iPhone 14",
"os_version": "17.4",
"app_version": "1.0.3",
"is_active": true,
"last_login_time": "2026-04-03T09:00:00Z",
"last_seen_time": "2026-04-03T10:30:00Z",
"create_time": "2026-04-01T08:00:00Z",
"update_time": "2026-04-03T10:30:00Z"
}
Özet: Aynı kullanıcının iOS kurulumunu temsil eder. Son görülme zamanı güncel olduğu için aktif kullanılan ana cihaz gibi davranır.
{
"id": 2,
"user_id": 1,
"device_identifier": "android-installation-001",
"push_token": "fcm_token_user1_android",
"platform": "android",
"manufacturer": "Samsung",
"model": "Galaxy S23",
"os_version": "14",
"app_version": "1.0.3",
"is_active": true,
"last_login_time": "2026-04-02T21:00:00Z",
"last_seen_time": "2026-04-03T09:45:00Z",
"create_time": "2026-04-01T08:10:00Z",
"update_time": "2026-04-03T09:45:00Z"
}
Özet: Aynı kullanıcıya ait ikinci kurulumdur. Böylece sistem tek kullanıcı için çoklu cihaz senaryosunu ayrı kayıtlarla yönetebilir.
{
"id": 3,
"user_id": 2,
"device_identifier": "ios-installation-002",
"push_token": "expo_token_user2_ios",
"platform": "ios",
"manufacturer": "Apple",
"model": "iPhone 13",
"os_version": "17.3",
"app_version": "1.0.2",
"is_active": true,
"last_login_time": "2026-04-03T08:15:00Z",
"last_seen_time": "2026-04-03T10:10:00Z",
"create_time": "2026-04-01T09:00:00Z",
"update_time": "2026-04-03T10:10:00Z"
}
Özet: Farklı bir kullanıcıya ait iOS kurulumu. Cihaz takibinin kullanıcı bazında ayrıştığını ve tokenların kullanıcı tablosuna gömülmediğini gösterir.