Modul 01 · Kontekst mühəndisliyi
Bir null, iki məna: hamı dəstəkçi göründü
Şikayət
Heç kim şikayət etmədi. Sayta baxarkən görünürdü ki, ödəniş etməmiş hesablar da dəstəkçi nişanını və yalnız dəstəkçilərə açıq avatarları görür.
İlk təxmin
İlk fikir: «yəqin kimsə səhvən hamıya dəstəkçi statusu verib, bazadan silmək lazımdır». Bu ağlabatan idi, çünki nişan doğrudan da görünürdü.
Təhqiqatı aç
Dəlil
- 1Bazaya baxıldı: entitlements cədvəli tamamilə boş idi. Deməli heç kimə heç nə verilməmişdi — problem məlumatda deyil, oxunuşda idi.
- 2Client kodu oxundu: dəstəkçi olub-olmamaq `validUntil === null || validUntil > indi` ifadəsi ilə hesablanırdı.
- 3Serverə baxıldı: /api/entitlement onsuz da açıq `active` bayrağı göndərirdi, /api/billing/status isə yalnız `validUntil` göndərirdi.
Səbəb
`validUntil = null` iki tamam fərqli halı bildirirdi: «ömürlük dəstəkçi» və «heç vaxt ödəməyib». Client birincisini nəzərdə tutub yazılmışdı, real həyatda isə ikincisi hökm sürürdü.
Düzəliş
Server hər iki endpoint-də açıq `active` bayrağı göndərir, client isə özü qərar vermir — bayrağı oxuyur.
Qoruyucu
Düzəliş canlı serverdə üç hal üçün yoxlanıldı: sətir yoxdur → active:false, valid_until NULL → active:true, vaxtı keçib → active:false.
Götürüləsi dərs: Şərtnamədə hər nullable sahə üçün «null nə deməkdir?» sualı verilsəydi, bu kod heç vaxt yazılmazdı. Qərarı client-ə buraxma — serverdən hökm gəlsin.
Bağlı dərslər:Əvvəl şərtnamə, sonra kiçik addımlar