Ulakbüs UI - API ilişkisi¶
Ulakbüs UI - API ilişkisi¶
UI hakkında¶
JSON
‘dır.index.html
dosyası tarayıcı tarafından işlendikten sonra uygulama başlar.app.js
dosyası çalışıp gerekli modülleri ve bağımlılıkları tanımlar.ulakbus
modülüdür.app_routes.js
dosyasında uygulamanın sayfaları ve kullanacakları controller
’lar ve template
’leri düzenlenmiştir.template
ve controller
ile yorumlanır.UI başlangıcı¶
http://api.ulakbus.net
adresinde bulunur. Geliştirme ortamı için http://nightly.api.ulakbus.net
adresinde bulunur.http://localhost/?backendurl=http://nightly.api.ulakbus.net
yazmanız yeterlidir./dashboard
adresine yönlendirir. Uygulamanın en başında kullanıcının login durumu kontrol eder ve kullanıcı mevcut değil ise /login
ekranına yönlendirilir.Login işlemi¶
http://api.ulakbus.net/login
adresine kullanıcı parametreleriyle XHR istegi gönderilir.JSON
nesnesinde cmd
parametresini baz alarak işlemin sonucunu değerlendirilir. cmd
, upgrade
veya retry
gelebilir.upgrade
yanıtıyla birlikte ws://api.ulakbus.net/ws
adresinde websocket açılır. Kullanıcı /dashboard
‘a yönlendirilir. Geri kalan tüm iletişim websocket üzerinden yönetilir.retry
yanıtı alınır ve kullanıcı tekrar /login
sayfasına yönlendirilir. Başka aksiyon alınmaz.Dashboard¶
{view: 'dashboard'}
isteği yapılır. bu isteğin yanıtında kullacının bilgisi ve de kulanıcı menüleri gelir.workflow
lar bpmn formatında backend API’da oluşturulur.Api response¶
Kullanıcı kendine ait işakışlarına menüler aracılığıyla ulaşır.
Kullanıcı bir iş akışı başlattığında api ye başlattığı iş akışının model ve workflow bilgisini gönderir. Api den gelen bilgiler ile UI tarafından yorumlanır. Yorumlama işlemi CRUDListFormController
tarafından yapılmaktadır.
Gelen yanıt içerisinde yer alan client_cmd
parametresine göre yorumlama tipi seçilir.
client_cmd
değeri show
, list
, form
, reload
veya reset
olabilir.
form
gönderilen datanınforms
nesnesi taşıdığı ve kullanıcı arayüzünün bunu form olarak yorumlaması gerektiği durumlarda kullanılır.list
sayfada listelenmesi istenen bir data olduğunda kullanılır. Bu data table olarak listelenir.show
komutu sayfada detay bilgileriyle gösterilmek istenen bır data olduğunda kullanılır.reload
komutu sayfada gösterilen datada bir değişiklik olduğu ve datanın API’dan yeniden istenmesi gerektiği durumlarda kullanılır.reset
komutu datanın ek parametreler olmadan yeniden çekilmesi için kullanılır.
Bu komutlar oluşturulan iş akışlarının ilgili adımlarında kullanılarak arayüzün istenen şekilde davranması için gereklidir.
Diğer yanıt parametreleri forms, meta, objects, pagination, reload_cmd, token, callbackID, notify, is_login olabilir.
reload_cmd
anahtarı"client_cmd": "reload"
olması durumunda arayüzün backend API’dan isteyeceği komutu taşır. UI post datası içinde cmd anahtarında bu değeri gönderir.token
anahtarında iş akış şemasının (workflow
) redis’te tutulan token değeri vardır. İş akışı tamamlanmadığı sürece bu token request nesnesinde API’a gönderilir.callbackID
UI tarafından üretilip gönderilmektedir. Yanıt içerisinde bulunuyorsa UI tarafından yapılan bir isteğin yanıtı olduğu anlamına gelmektedir. Uygulama genelinde yapılan isteklerde Javascript Promise alt yapısı kullanılarak asenkron istek yapılmaktadır. Bekleyen promise resolve edilerek iş akışının devamı sağlanmaktadır.meta
anahtarında arayüzde istenen yapılandırmalar yer alır. Boolean değer taşırlar. Bunlar şunlardır;allow_search
Listeleme ekranında arama kutusunun gösterilmesi için kullanılır.allow_selection
Listeleme ekranında tablonun solunda selectBox yer alması için kullanılır.allow_sort
Listeleme ekranındaki sıralama özelliği için kullanılır.allow_filter
Listelenen datanın filtrelemesi için kullanılır.allow_actions
ListNode tipinde listelenen data için en sağdaki işlemler kolonunun gösterilmesi için kullanılır.translate_widget
Katalog verilerin düzenleneceği ekran için oluşturulan widget’dır. Aynı zamanda çeviri işlemleri için kullanılacaktır. Boolean tipinde değer alır.
_debug_queries
anahtarı geliştiriciler için yardımcı bir anahtardır. Veritabanına yapılan sorguların süresi ve kaç adet sorgu yapıldığı gibi değerler bu anahtarda yer alır. Aktif olması için API ortamında çevre değişkeniDEBUG=1
olarak atanmalıdır.is_login
anahtarı kullanıcının giriş yapıp yapmadığını gösteren bir anahtardır. Bu anahtarfalse
değer taşıdığında arayüz login sayfasına yönlendirir.notify
ayayüzde bildirim göstermek için kullanılır. Gönderilen bildirimler pencerenin sağ üstünde yer alır ve bir süre sonra kaybolur.pagination
anahtarı listeleme gösterimlarinde sayfalama bilgisini bulundurur.
Ulakbüs UI Öğeleri¶
- Form öğesi - Ekleme ve düzenleme işlemleri
- Liste öğesi - Listeleme, arama, filtre ve silme işlemleri
- Detay öğesi - Tek nesne detay ve rapor ekranları
İçerik türü | Anahtar |
---|---|
Form | forms |
Liste | objects |
Detay | object |
- detay
- form
- liste
Form Öğesi¶
Örnek bir forms
nesnesi aşağıdaki gibidir:
{
"forms":{
"constraints":{},
"model":{ "ad":null, "soyad":null },
"grouping":{},
"form":[
{ "helpvalue":null, "type":"help" },
"ad",
"soyad",
{
"titleMap":[
{ "name":"Bay", "value":1 },
{ "name":"Bayan", "value":2 }
],
"type":"select",
"key":"cinsiyet",
"title":"Cinsiyet"
},
"e_posta",
"dogum_tarihi",
"save_edit",
"nufus_kayitlari_id",
],
"schema":{
"required":[ "ad", "soyad" ],
"type":"object",
"properties":{
"ad":{ "type":"string", "title":"Adı" },
"soyad":{ "type":"string", "title":"Soyadı" },
"e_posta":{ "type":"string", "title":"E-Posta" },
"save_edit":{ "cmd":"save::add_edit_form", "type":"button", "title":"Kaydet" },
"nufus_kayitlari_id":{
"list_cmd":"select_list",
"title":"Nüfus Bilgileri",
"wf":"crud",
"add_cmd":"add_edit_form",
"type":"model",
"model_name":"NufusKayitlari"
},
"dogum_tarihi":{ "type":"date", "title":"Doğum Tarihi" },
"cinsiyet":{ "type":"select", "title":"Cinsiyet" }
},
"title":"Personel"
}
}
}
forms
’un öğeler ise şunlardır:
form
Bu anahtar altında formda gösterilmesi istenen inputlar bir liste halinde yer alır.
schema
schema
anahtarının alt özellikleri vardır. Bunlardan required
bir liste halinde doldurulması gerekli alanları gösterir.properties
anahtarında form
anahtarında belirtilen alanların özelliklerinin yer aldığı anahtardır.{
"e_posta":{ "type":"string", "title":"E-Posta" }
}
type
alanında inputun tipi ve title
alanında bu inputun başlığı yer alır.İlişkisel veri tipleri olan ListNode, Node ve Model için bu anahtarlarda
wf
,add_cmd
,list_cmd
,model_name
değerleri bulunmaktadır. Bu değerler form sayfası oluşturulurken dikkate alınır.Formlarda birden fazla buton değişik işleri yapabilsin diye bu input alanlarına
cmd
değeri eklenmiştir. Bu değer form submit edilirkencmd
anahtarında API’a gönderilir.Ek işlevsellik isteyen alanlar için (Node, ListNode, Model, select, file, submit, date, text_general, etc.) template’ler oluşturulmuştur.
Field tipleri şunlar olabilir:
button
submit
file
select
date
int
boolean
string
typeahead
text_general
float
model
Node
ListNode
model
grouping
layout
değeri 12 birimlik alanda kaç birim olarak yer alacağını gösterir.{
"grouping": [
{
"group_title": "Gorev",
"items": ["gorev_tipi", "birim", "aciklama"],
"layout": "4",
"collapse": false
}
]
}
constraints
Form inputlarının birbirlerine göre bağımlılıklarının denetlendiği ve düzenlendiği anahtardır. Geliştirme aşamasındadır.
Liste öğesi¶
Liste öğesinde kaydedilen nesneler listelenir.
Listelenecek öğeler
objects
anahtarında döner. Dönen listede ilk nesne listenin başlık değerlerini oluşturur.İkinci nesneden itibaren
fields
anahtarında liste halinde aynı sırayla ilk nesnedeki başlıkların karşılığı değerler yer almaktadır.actions
anahtarında o satır için gerçekleştirilebilecek işlemler yer almaktadır. İşlemlerin gösterim şekillerishow_as
anahtarında gönderilir.İşlemler varsayılan olarak satırın sonundaki işlemler alanında gösterilir.
Eğer satırdaki bir hücreye uygulanması isteniyorsa hangi alana uygulanacağı bir liste içinde işlem nesnesinin
fields
anahtarında belitrilir.Gerçekleştirilecek işlemin ne olacağı işlemin
cmd
anahtarında yer alır.mode
anahtarı normal (varsayılan), new (yeni sayfada) ve modal (bir modal içinde) değerlerini alabilir.pagination
anahtarında sayfalama uygulandıysa sayfa başına kaç nesne olduğuper_page
, toplam nesne sayısıtotal_objects
, toplam sayfa sayısıtotal_pages
, ve o an hangi sayfada olunduğupage
bilgisi yer alır.Liste sayfasıyla birlikte gönderilen
"forms"
anahtarında o sayfada ayrıca form işlemlerinin yapılması sağlanmaktadır. Aşağıdaki örnekte o anki modele yeni bir kayıt eklemek için forms anahtarının kullanıldığı görülmektedir.
{
"forms":{
"constraints":{},
"model":{ "add": null },
"grouping":{},
"form":[ "add" ],
"schema":{
"required":[ "add" ],
"type":"object",
"properties":{
"add":{
"cmd":"add_edit_form",
"type":"button",
"title":"Ekle"
}
},
"title":"Personeller"
}
},
"pagination":{
"per_page":8,
"total_objects":26,
"total_pages":3,
"page":1
},
"objects":[
[ "Adı", "Soyadı", "TC No", "Durum" ],
{
"fields":[
"Işık",
"Ülker",
"19189958696",
null
],
"actions":[
{
"fields":[
0
],
"cmd":"show",
"mode":"normal",
"show_as":"link"
},
{
"cmd":"add_edit_form",
"name":"Düzenle",
"show_as":"button",
"mode":"normal"
},
{
"cmd":"delete",
"name":"Sil",
"show_as":"button",
"mode":"normal"
}
],
"key":"1234qwer"
}
]
}
Detay öğesi¶
Detay öğesinde gösterilmek istenen nesne anahtar değer olarak sıralanır. Örnekte bir kişi kaydının anahtar değerleri görülmektedir.
{
"object":{
"Cep Telefonu":"+90 (259) 6925396",
"Cinsiyet":"Erkek",
"Soyadı":"Arsoy",
"TC No":"63488661696",
"Adı":"Kutun",
"Doğum Tarihi":"03.04.1969",
"E-Posta":"daslan@arsoy.com"
}
}
Logout İşlemi¶
{wf: "logout"}
bilgisi API’a gönderilir. Gelen yanıt ardından websoket kapatılır, oturum sonlanır.