anchovycation / metronom

Easy to use Redis ORM based on node-redis with TypeScript support
https://anchovycation.github.io/metronom/
GNU General Public License v3.0
7 stars 3 forks source link

Utilites.safeWrite's business logic fixed #32

Closed saracalihan closed 2 years ago

saracalihan commented 2 years ago

ModelInstance.save fonksiyonundaki hata yüzünden kullanıcılarda Model.isFlex değeri false yani şemadaki alanların dışına çıkılamadığı kayıtlarda bazı değerler kaydedilecek kayıtta olduğu halde içine şemadaki varsayılan değerler yazılıyordu.

Yaptığım inceleme sonucunda hatanın şema değerlerini atayan ve objeleri kaydederken JSON'a çeviren safeWrite fonksiyonu içinde buldum. Fonksiyon yazılırken mantıksal bir hata yapılmış ve gelen veri içindeki bazı değerlerin ezilmesi daha da önemlisi şemanın istenmeyen bir şekilde değiştirilmesi mümkün hale getirilmiş.

Şema ile yapılan atama işlemlerini tamamen ortadan kaldırarak şema kullanımını daha güvenli hale getirdim. İleriki süreçte daha güvenli olması için şema tamamen readonly hale getirlimelidir. Kod içinde mantıksal değişiklik de yaparak fonksiyonu düzgün çalışır hale getirdim.

Kod Çıktısı

Model'in isFlex değeri false olduğu için gelen veri içindeki sadece şemada bulunan alanlar ayıklanmalı eğer bir key şemada var fakat gelen veride yoksa şemadaki varsayılan değeri otomatik olarak atanmalıdır.

data değişkeni gelen veriyi, schema değişkeni şemayı ve temp ise çıktıyı temsil etmektedir. Screenshot_20220709_023210

Bu yapıya göre b ve c keyleri ortaktır ve d şemada olduğu için çıktıya eklenmelidir.

Eski mantıksal işleyişe göre: temp=schema atamasından dolayı şemanın da değeri değişmekteydi. Screenshot_20220709_023746 Yeni mantıksal işleyişe göre:

Screenshot_20220709_023553

Close #27