Proje: Okul Platform · Hub: Okul Platform — Domain

UserContact Nedir?

Kullanıcıların iletişim bilgileri (e-posta, telefon). Her kullanıcının birden fazla iletişim bilgisi olabilir.

İletişim Tipleri

CONTACT_TYPE_EMAIL_KEY = 'email'
CONTACT_TYPE_PHONE_KEY = 'phone'

Önemli Alanlar

  • user_id → User
  • type — email veya phone
  • value — İletişim değeri (normalize edilmiş)
  • is_primary — Birincil iletişim bilgisi mi
  • unsubscribed — E-posta aboneliğinden çıktı mı
  • is_verified — Doğrulandı mı
  • is_email_bounced — E-posta bounce oldu mu
  • is_valid — Geçerli mi

Özel Scope’lar

UserContact::query()->forPhone('05362238422')  // Telefona göre filtrele
UserContact::query()->forEmail('test@test.com')  // E-postaya göre filtrele

forPhonegetPhoneNakedWithDigit_11() ile normalize eder.

OTP Login Bağlantısı

OTP login: value alanı hem telefon hem de e-posta olabilir. Duplicate contact check (aynı telefon/e-posta birden fazla hesapta olursa hata):

  • Telefon duplicate → E-posta ile giriş öner
  • E-posta duplicate → Telefon ile giriş öner

B2C Kullanım

  • User::contacts ilişkisi üzerinden erişilir
  • CIO’ya gönderilirken: $user->contacts->firstWhere('type', 'phone') ile telefon alınır

B2B CustomerUser İletişim

B2B kullanıcılar da UserContact kullanır. createUserWithCustomerSchool() test helper’ı UserContact::factory() ile telefon oluşturur.