Skip to content

feat: partner (/outher) yüzeyi — ⚠️ DERLENMEDİ, CI doğrulaması gerekiyor - #1

Merged
muhammetsafak merged 3 commits into
mainfrom
feat/partner-outher-surface
Jul 30, 2026
Merged

feat: partner (/outher) yüzeyi — ⚠️ DERLENMEDİ, CI doğrulaması gerekiyor#1
muhammetsafak merged 3 commits into
mainfrom
feat/partner-outher-surface

Conversation

@muhammetsafak

Copy link
Copy Markdown
Member

⚠️ Bu kod derlenmedi ve test edilmedi

Makinede cmake / g++ / clang++ / cl / conan / vcpkg hiçbiri kurulu değil — derleme ve test çalıştırılamadı.

Merge etmeden önce CI'ın yeşil olduğu görülmeli. Kod ve testler yazıldı ama bu makinede çalıştırılamadı.

Mevcut hasta personasının yanına ikinci bir persona ekler. Tamamen eklemeli — mevcut yüzey hiç değişmedi, breaking change yok.

Yüzey — 24 uç

partner.doctors      → search, branches, detail, locations
partner.slots        → schedule
partner.appointments → reserve, reserveWithoutAgreement, instantReserve, create,
                       createWithoutSlot, cancelWithoutSlot, list, info, checkDoctor
partner.diets        → list, detail
partner.laboratory   → catalog, catalogDetail, results, resultDetail
partner.measures     → last, list, graph, addList, add, update, delete,
                       healthInformation (deprecated)

Transport ve partner token altyapısı zaten hazırdı; yalnızca tiplenmiş metotlar eklendi.

include/bulutklinik/bulutklinik.hpp (partner sınıfları) + src/bulutklinik.cpp (implementasyon).
tests/test_partner.cpp yazıldı ve CMakeLists.txt'e kaydedildi.

Derleyici olmadan yapılabilen doğrulama

Path yazım hatası, derleyicisi olmayan bir dilde en olası ve en sessiz hata. Makineyle kapatıldı:

  1. 6 dilin partner kaynaklarından /outher/... path literalleri çıkarıldı → altısı da aynı 24 ucu kullanıyor
  2. Bu küme sunucudaki gerçek apiouther route'larıyla (routes/v3/outher.php) karşılaştırıldı → fark yok; SDK'de olup sunucuda olmayan ⌀, tersi ⌀

Bu, path hatalarını kapatır — tip ve derleme hatalarını kapatmaz.

Tasarım kararları

Okuma/yazma hasta referansı ayrıldı. Okuma için identityNumber/phoneNumber yeterli; yazma için ad/soyad/telefon zorunlu (hasta partner'ın şirketinde yoksa sunucu oluşturur).

healthInformation deprecated. Paylaşılan tüketici tenant'ına yazdığı için last/list ile geri okunamıyor. Mevcut teusan entegrasyonları için duruyor.

Ölçüm kapsamı. Partner yalnız kendi şirketinde kayıtlı ölçümleri görür — kiracı izolasyonunun doğal sonucu.

Testlerin kanıtlaması beklenenler (CI'da)

  • Partner çağrıları her zaman partner token gönderiyor, hasta token'ı store'da dolu olsa bile
  • Hasta yüzeyi etkilenmiyor
  • TCKN hiçbir URL'de geçmiyor
  • Ölçüm yazma verb+path'leri doğru, alanlar patient ile yan yana düzleşiyor
  • Lab id'si -lab son ekiyle değişmeden gidip geliyor

Bağımlılık

Sunucu tarafı: greenglobaltr/BulutApi#1911

Mevcut hasta personasinin yanina ikinci bir persona ekler. Tamamen eklemeli;
mevcut yuzey hic degismedi, breaking change yok.

24 uc: doctors, slots, appointments, diets, laboratory, measures.
Transport ve partnerToken altyapisi zaten hazirdi; yalnizca tiplenmis
metotlar eklendi.

Okuma/yazma hasta referansi ayrildi: okuma icin identityNumber/phoneNumber
yeterli, yazma icin ad/soyad/telefon zorunlu. healthInformation deprecated --
paylasilan tuketici tenant'ina yaziyor, last/list ile geri okunamiyor.

test_partner.cpp CMakeLists.txt'e kaydedildi.

DIKKAT -- BU KOD DERLENMEDI VE TEST EDILMEDI.
Bu makinede cmake/g++/clang/cl/conan/vcpkg hicbiri yok, bu yuzden derleme ve test calistirilamadi. CI'da dogrulanmasi
gerekiyor.

Derleyici olmadan yapilabilen tek dogrulama yapildi: 6 dilin partner
kaynaklarindan /outher path literalleri cikarilip karsilastirildi -- altisi da
ayni 24 ucu kullaniyor -- ve bu kume sunucudaki gercek apiouther route'lariyla
karsilastirildi, fark cikmadi. Bu path yazim hatalarini kapatir, tip ve
derleme hatalarini KAPATMAZ.
SDK artik tek persona sunuyor. 0.6.0'da client.partner.* altinda duran
company-kapsamli /outher yuzeyi kok seviyeye tasindi; hasta girisi gerektiren
ne varsa kaldirildi. 6 grup / 28 uc, hepsi /outher uzerinde.

Neden simdi yapilabildi: api tarafinda a2df42a53 ("Partner (/outher) yuzeyi")
hasta uclarinin company-kapsamli muadillerini acti. Kalan bosluk yok.

Yuzey
- client.partner.<grup> -> client.<grup>. Yol, govde ve davranis aynen
  korundu; bu bir yeniden adlandirma. Partner oneki siniflardan ve
  girdi tiplerinden dusuruldu.
- Kaldirilanlar: auth (11 metot), payments (5), skin, meals, addresses (4)
  ve 0.6.0'da kokte duran hasta-persona gruplari. Hicbirinin company
  kapsamli karsiligi yok; gerekcesi DESIGN.md 1.2'de.

Kimlik dogrulama
- partnerToken artik istemcinin tek kimlik bilgisi; clientId/clientSecret
  kaldirildi.
- TokenStore tek bir partner token tutuyor ve her istekte okunuyor, boylece
  uzun omurlu bir surec yeniden kurulmadan token dondurebiliyor.
- Sessiz yenileme yok. Partner token'i disaridan uretiliyor ve buradan
  yenilenemiyor: 401 / resultType 4 artik retry'siz AuthenticationError.
  Bu, resultType 4'un hasta SDK'sindaki anlaminin tam tersi, o yuzden
  sunucu mesajina ne yapilmasi gerektigi ekleniyor.
- Token yokken istek gonderilmiyor; dispatch oncesi hata veriliyor. Aksi
  halde geriye yalnizca anlamsiz bir 401 donuyordu.
- partnerToken ile tokenStore birlikte verilirse kurulum hatasi. Ikisinden
  hangisinin kastedildigini tahmin etmek kimlik bilgisi hatalarinin cikis
  noktasi.

Yapilandirma
- apiVersion secenegi eklendi (v3 varsayilan, v4). Tum yollar surumden
  bagimsiz oldugu icin v4'e gecmek kod degil yapilandirma degisikligi.

DESIGN.md spec 1.0.0'a cikarildi -- 12. bolum 0.6.x -> 1.0.0 gecis rehberi --
ve 6 depoya birebir kopyalandi. README'ler ve CHANGELOG'lar yeni yuzeye gore
yeniden yazildi; ornekler ve canli duman testi partner akisina cevrildi.

0.6.0 bu depoya derlenmeden girmisti (DERLENMEDI) ve test dosyasi hic
derlenmiyordu: HttpRequest::body bir std::optional<std::string> ve .value()
olmadan json::parse'a veriliyordu. Duzeltildi.

Dogrulama: MSVC 14.44 ile derleme + ctest (23 case, 70 assertion).
Surum 1.0.0 (CMakeLists.txt, conanfile.py, vcpkg.json).
Yayin oncesi 6 SDK ../api kaynagina karsi denetlendi. 28 ucun tamami v3 ve v4
route tablolarinda mevcut, dogru scope grubunda (27 apiouther + setAuthScopeInfo,
healthInformation teusan) ve gonderilen govdeler FormRequest kurallariyla
ortusuyor. Iki uyusmazlik cikti.

1) doctors.search artik searchParams'i bos haritaya dusurmuyor

Sunucu kurali `required|array`; PHP'nin `required` kurali BOS diziyi reddediyor
(Illuminate ValidatesAttributes::validateRequired -> count($value) < 1). JSON
`{}` PHP tarafinda `[]` olarak cozuldugu icin, searchParams verilmediginde
gonderilen istek filtresiz arama degil garantili 422'ydi.

JS'de `input.searchParams ?? {}` varsayilani kaldirildi ve DoctorSearchInput.
searchParams zorunlu yapildi -- degisiklik bu cagriyi yapan bir testi hemen
yakaladi. Diger 5 SDK'da parametre zaten zorunluydu; hepsine en az bir anahtar
gerektigi belgelendi.

2) healthInformation notu duzeltildi

DESIGN.md ve 6 README, `identity` alaninin dogrulama sirasinda null'landigi bir
API hatasini anlatiyordu. O hata 2026-07-21'de api tarafinda duzeltilmis
(65b15f39c); not artik yanlisti.

Gercekte kalan durum daha gevsek ve bilinmeye deger: eslesme
PatientUsersModel::patientUserFindWithOr uzerinden `identity OR phone_number`
seklinde GLOBAL kullanici tablosunda yapiliyor ve ilk satir aliniyor. Yani tek
basina telefon, gonderilen TCKN'den farkli birini cozebilir. Ayni gruptaki
apiouther okumalari bunun tam tersi: kendi sirketine kapali ve belirsizlikte
hata veriyor. Not buna gore yeniden yazildi.

Tel uzerinde baska degisiklik yok; 28 ucun method/path/govdesi aynen duruyor.
Uc bagimsiz HTTP yigini (js fetch, python httpx, go net/http) calisma aninda
28 cagrinin tamaminda birebir ayni govdeyi uretiyor.
@muhammetsafak
muhammetsafak merged commit 8225f4e into main Jul 30, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant