# FarukBase

Gerçek zamanlı NoSQL databasedir. Küçük ve orta ölçekli projelerde kullanıbilir.

## Özellikler

* Firabase gibi array hariç bütün JSON özellikleri destekler. (Arrayi dolaylı yolla destekler)
* GET,INSERT,DELETE,UPDATE komutları ile kullanım.
* Listener Sistemi (INS,DEL,SET) eventleri
* Farklı Core'lar ile Güvenlik ve Performans arasında seçim yapılabilir.
* Farklı Gate'ler ile Yetki/Yönetim sistemi seçimi yapılabilir.
* Farklı IO'lar ile farklı yollardan iletişim sağlabilir.

## Kavramlar

- **CORE** : Farukbase çekirdekleridir. MySQL Core güvenli çalışır. Express Core ise çok hızlı çalışır ve periyodik olarak json dosyasında yedeklenir.
- **GATE** : Bir Core üzerinde yetkilendirme / yönetim işlemlerini yapar. ( KEY/RULE , USER/RULE)
- **IO** : Dışarıyla veri alışverişi sağlar. ( SOCKETIO, HTTP )
- **Path** : Verinin yoludur. */oyunlar/1/bilgi/versiyon/ gibi*

## Fonksiyonlar

### Core

- GET( path ) : Adresten veri döndürür. *value* altında json verisi. *ref* altında verinin referansları saklanır. *error* altında hata bilgisi saklanır.
- INSERT( path, value, callback ) veya ( path, key, value, callback) : Path'e veri json verisi ekler. bir key kullanılmazsa sıralı bir sistemle key oluşturarak ekleme yapar.
- DELETE ( path , callback ) : Path'deki verileri siler.
- UPDATE ( path, value , callback ) : Path deki veriyi, gönderilen veri ile düzenler. Path boşsa pathe veri oluşturur. Pathde obje olarak veri varsa. Yeni veri ile kaynaştırır.


### IO

* GET( path , callback(*error,result*) ) **Pathden bir defalığına veri çeker**
* INSERT ( path , key , value , callback(*error,result*)) **Pathe key ile child ekler**
* INSERT ( path ,  value , callback(*error,result*)) **Sıralı key oluşturur ve child ekler**
* UPDATE ( path ,  value , callback(*error,result*)) Update data in the path **Pathdeki veriyi günceller**
* DELETE ( path , callback(*error,result*) ) **Pathdeki veriyi siler**
* ON( path , VALUE , callback(value,path,error) ) **Pathden gerçek zamanlı olarak veri alır ve her değişimde callback ağrılır **
* ON( path , CHILD_ADD , callback(*child_value,child_key,error*) ) **Pathe child eklendiğinde çağrılır **
* ON( path , CHILD_CHANGE , callback(*child_value,child_key,error*) ) **Pathdeki bir child değiştiği zaman çağrılır**
* ON( path , CHILD_DELETE , callback(*null , child_key , error*) ) **Pathden bir child silindiği zaman çağrılır**




### debug

- arrayı kendi biçimine çevirme eklenmeli
- http güvenlik token olayı yapılmadı



Yapılacaklar

- [x] socket.io server/client listener
- [x] storage
- [x] [auth] login/logout/setkey/getkey
- [x] ip check
- [x] unity socket.io client
- [x] web socket.io client
- [x] http server
- [x] https
- [x] logger
- [x] analitik
- [x] app-router toolu
- [ ] secure / check
- [ ] default bir database formu belirlenecek
- [ ] npm install farukbase -> farukbase kurucusu/ayarlayıcısı