{"action":"created","issue":{"url":"https://api.github.com/repos/dojo/stores/issues/20","repository_url":"https://api.github.com/repos/dojo/stores","labels_url":"https://api.github.com/repos/dojo/stores/issues/20/labels{/name}","comments_url":"https://api.github.com/repos/dojo/stores/issues/20/comments","events_url":"https://api.github.com/repos/dojo/stores/issues/20/events","html_url":"https://github.com/dojo/stores/issues/20","id":181377976,"number":20,"title":"[User Story] Transforming Data","user":{"login":"kitsonk","id":1282577,"avatar_url":"https://avatars.githubusercontent.com/u/1282577?v=3","gravatar_id":"","url":"https://api.github.com/users/kitsonk","html_url":"https://github.com/kitsonk","followers_url":"https://api.github.com/users/kitsonk/followers","following_url":"https://api.github.com/users/kitsonk/following{/other_user}","gists_url":"https://api.github.com/users/kitsonk/gists{/gist_id}","starred_url":"https://api.github.com/users/kitsonk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kitsonk/subscriptions","organizations_url":"https://api.github.com/users/kitsonk/orgs","repos_url":"https://api.github.com/users/kitsonk/repos","events_url":"https://api.github.com/users/kitsonk/events{/privacy}","received_events_url":"https://api.github.com/users/kitsonk/received_events","type":"User","site_admin":false},"labels":[{"id":456215985,"url":"https://api.github.com/repos/dojo/stores/labels/discussion","name":"discussion","color":"0052cc","default":false},{"id":456216617,"url":"https://api.github.com/repos/dojo/stores/labels/user-story","name":"user-story","color":"245a87","default":false}],"state":"closed","locked":false,"assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/dojo/stores/milestones/9","html_url":"https://github.com/dojo/stores/milestone/9","labels_url":"https://api.github.com/repos/dojo/stores/milestones/9/labels","id":2157689,"number":9,"title":"2016.12","description":"","creator":{"login":"dylans","id":97291,"avatar_url":"https://avatars.githubusercontent.com/u/97291?v=3","gravatar_id":"","url":"https://api.github.com/users/dylans","html_url":"https://github.com/dylans","followers_url":"https://api.github.com/users/dylans/followers","following_url":"https://api.github.com/users/dylans/following{/other_user}","gists_url":"https://api.github.com/users/dylans/gists{/gist_id}","starred_url":"https://api.github.com/users/dylans/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dylans/subscriptions","organizations_url":"https://api.github.com/users/dylans/orgs","repos_url":"https://api.github.com/users/dylans/repos","events_url":"https://api.github.com/users/dylans/events{/privacy}","received_events_url":"https://api.github.com/users/dylans/received_events","type":"User","site_admin":false},"open_issues":13,"closed_issues":23,"state":"open","created_at":"2016-11-25T13:46:50Z","updated_at":"2016-12-14T17:06:32Z","due_on":"2016-12-31T00:00:00Z","closed_at":null},"comments":2,"created_at":"2016-10-06T10:25:20Z","updated_at":"2016-12-14T17:06:32Z","closed_at":"2016-12-14T17:06:32Z","body":"# User Story\n\nA developer, having a set of data, either directly via the Stores API or via the Query API, needs to transform that data from its source shape to another shape(s).  Also, this transformation needs to be able to observe the source data set, so that subsequent changes are propagated through the transformation pipeline.\n# Considerations\n\nThere are several key factors that need to be considered around the Transformation API:\n- _Results_ - Externally, the results of a transformation should have an API surface similar to that of a _read only_ Store.  There should be a way to retrieve meta data about the underlying source of an object that has been transformed so a consumer could go back to the authoritative source to perform a mutation.\n- _Multiple Views_ - It is anticipated that many use cases of the transformation will be to take a query or store and transform it into multiple views.  Conceptually, think of a list of todo items, where a developer would need to create widgets (via setting unique widget states) for every todo item returned from a query.  It would need to transform that also to a value of the number of todo items to be displayed in a widget which lists the count of items.\n- _Domain Specific Languages_ - There should be available two domain specific languages available to leverage the Transformation API:\n  - _Declarative_ - This API should use simple JavaScript objects (POJOs) to provide a declarative way of describing a transformation. This allows the transformation to be easily serialisable to and from JSON. It also allows an easy mechanism for other actors to procedurally generate a transformation and have it executed by the Transformation API.\n  - _Functional_ - This should have full functional parity with the declarative syntax but be offered up in chain-able functions, so that a developer can build a transformation incrementally taking advantage of intellisense and robust type validation via TypeScript. There should also be a mechanism to serialise complete functional transformations into the declarative syntax.\n- _Offloading and the Query API_ - Implementations of the Transformation API are likely going to be very co-dependent on query implementations to achieve efficient _offloading_.  This is because most server side implementations do not have a strong architectural division between querying and transformation.\n- _API functionality_ - While it isn't expected to have a significant superset of the Transformation API for certain implementations, there maybe cause to do so.  This should generally be limited so that the transformation functionality is as \"universal\" as possible.\n- _Interaction with `dojo-app`_ - The Transformation API should work with `dojo-app` to be able to reference more complex objects, like instances of stores, functions, actions and other complex object instances it may need to reference.\n"},"comment":{"url":"https://api.github.com/repos/dojo/stores/issues/comments/267092470","html_url":"https://github.com/dojo/stores/issues/20#issuecomment-267092470","issue_url":"https://api.github.com/repos/dojo/stores/issues/20","id":267092470,"user":{"login":"maier49","id":5474358,"avatar_url":"https://avatars.githubusercontent.com/u/5474358?v=3","gravatar_id":"","url":"https://api.github.com/users/maier49","html_url":"https://github.com/maier49","followers_url":"https://api.github.com/users/maier49/followers","following_url":"https://api.github.com/users/maier49/following{/other_user}","gists_url":"https://api.github.com/users/maier49/gists{/gist_id}","starred_url":"https://api.github.com/users/maier49/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/maier49/subscriptions","organizations_url":"https://api.github.com/users/maier49/orgs","repos_url":"https://api.github.com/users/maier49/repos","events_url":"https://api.github.com/users/maier49/events{/privacy}","received_events_url":"https://api.github.com/users/maier49/received_events","type":"User","site_admin":false},"created_at":"2016-12-14T17:06:32Z","updated_at":"2016-12-14T17:06:32Z","body":"Transform API provided by #67 "}}
{"actor":{"display_login":"maier49"}}