Table Information meta data
@Info{
'icon': 'http://icon.me/table_icon'
'display_name': 'Products',
'identifier': ['name', 'description'],
'order': ['name', 'description', 'active'],
'hide': ['createdby', 'created', 'updatedby','updated']
}
at product.description
Column information meta data
@Info{
'display_name': 'Description'
'display_length': 50,
'min_length': 1,
'max_length': 100,
}
Nice visualization of Data using D3 http://bl.ocks.org/robschmuecker/7880033
http://vowl.visualdataweb.org/webvowl/ https://github.com/VisualDataWeb/WebVOWL
https://github.com/dudadornelles/todo-backend-rust-iron/blob/master/src/main.rs
-
/window - list down all windows
-
/window/ - specific window
-
/data/
- retrieve data from a table- paging included, and user specific setting
-
/view/ - retrieve the specific window * include the window info, including the model meta data * include the first page of data of the table * include all 1:1 data for the extension tables * fetch the 1:M data only when the record is focused? * eager vs lazy * determine how the relative count of detail record, when it reaches more than 10 then probably use lazy loading.
- when the record is not put into focused, then the loading was unnecessary
- smooth introspection of data.
- paging should be lazy
- good if there paging size is small.
- a bit more complex, algorithmn, including caching
- minimal server load
-
which tabs where last opened, which records where focused
-
Remember opened tabs and records
-
connection urls
-
which column to order
-
arrangement of columns in the view
-
which column are not included/shown
-
global settings?, apply these settings to all windows (if applicable) I'll open (may complicate the system)
-
settings can be removed everytime.
-
history of settings can also be tracked
-
filters are expressed in strings
-
select=person.name,age&hide=gender&order_by=name.desc&page_size=15
-
The user preferences will be stored in a sqlite file in his local app directory setting
-
create - insert each row 1 by 1 or bulk?
- POST - /product <json_data>
- new record [{name:"swiss knife", desc: "more data"}]
- csv - use bult insert when csv /product?format=csv&column=name,description,price "swiss knife","simple cutter","10.00" "butterfly knife","evasion 10%","36.00"
- POST - /product <json_data>
-
update - update data per record/row - use primary keys/unique keys if possible, else use all filters as possible.
- PUT - /product <json_data> [{ old:{name:"swiss knife", desc: "more data"}, new:{name:"swift knife", desc: "more date"} } ]
-
delete
- DELETE /product <json_data> [{name:"swiss knife", desc: "more data"}]
- Each data in the user interface may have to be reformatted to the original formatting before it is displayed.
- determine the size of a row,
- rows which contains blobs such as images and base64 encoded data or blobs will have higher counts
- Count the number of bytes the data when retrieve using octet_length, pg_column_size when stored
- Add focused record in complex query focused_record=ef12321-abeafd,0
- Add a system to save changeset Note: indirect linker table will automatically be filled up where there is a new record for the main table and the indirect table.
- TODO: Make a cascading Error for each usecase
Each window, a user can set preference.
window | value |
---|---|
product | select=person.name,age&hide=gender&order_by=name.desc&page_size=15 |
Algorithmn: Whenever the [Save] button is clicked, the data models is iterated if it is modified or not. Checking modification is just by comparing the loaded data and the data in the user interface.
There is a daemon that keeps checking for changes, when a changes is detected the Save/Update button will be highlighted.
http://stackoverflow.com/questions/13304572/how-can-pg-column-size-be-smaller-than-octet-lengthngth,
Server side code in rust, and can be loaded dynamically using nodejs and invoke appropriate functions Can have optional client side plugin to enchance the UI display
Question: How will the indirect table determine which primary key value it is supposed to link when the main table data has not been saved in the database yet. Solution: use a temporary UUID in the client side. after saving it to the database, this UUID may be replaced with the db one. then mapping it to the indirect table and linker to update the value before putting the record in the linker table.