{"action":"created","comment":{"url":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/comments/200609242","pull_request_review_id":134958847,"id":200609242,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMDYwOTI0Mg==","diff_hunk":"@@ -0,0 +1,109 @@\n+package design\n+\n+import (\n+\td \"github.com/goadesign/goa/design\"\n+\ta \"github.com/goadesign/goa/design/apidsl\"\n+)\n+\n+var workItemBoardSingle = JSONSingle(\n+\t\"workItemBoard\",\n+\t`A board for work item types`,\n+\tworkItemBoardData,\n+\tworkItemBoardLinks,\n+)\n+\n+var workItemBoardList = JSONList(\n+\t\"workItemBoard\",\n+\t`List of work item boards`,\n+\tworkItemBoardData,\n+\tworkItemBoardLinks,\n+\tnil,\n+)\n+\n+var workItemBoardLinks = a.Type(\"WorkItemBoardLinks\", func() {\n+\ta.Attribute(\"self\", d.String, func() {\n+\t\ta.Example(\"http://api.openshift.io/api/spacetemplates/2d98c73d-6969-4ea6-958a-812c832b6c18/workitemboards\")\n+\t})\n+\ta.Required(\"self\")\n+})\n+\n+var workItemBoardColumnData = a.Type(\"WorkItemBoardColumnData\", func() {\n+\ta.Description(`a column represents a vertical lane in a board`)\n+\ta.Attribute(\"type\", d.String, \"The type string of the work item board column\", func() {\n+\t\ta.Enum(\"boardcolumns\")\n+\t})\n+\ta.Attribute(\"id\", d.UUID, \"ID of the work item board column\", func() {\n+\t\ta.Example(\"712f20e4-2202-4469-9a02-b892b7051b2b\")\n+\t})\n+\ta.Attribute(\"attributes\", workItemBoardColumnAttributes)\n+\ta.Required(\"id\", \"type\", \"attributes\")\n+})\n+\n+var workItemBoardColumnAttributes = a.Type(\"WorkItemBoardColumnAttributes\", func() {\n+\ta.Attribute(\"name\", d.String)\n+\ta.Attribute(\"order\", d.Integer)\n+\t// TODO(michaelkleinhenz): as soon as we allow column customization, we need\n+\t// to also provide transRuleKey and transRuleArguments.\n+\ta.Required(\"name\")\n+})\n+\n+var workItemBoardData = a.Type(\"WorkItemBoardData\", func() {\n+\ta.Description(`a board shows different work item type together in a board`)\n+\ta.Attribute(\"type\", d.String, \"The type string of the work item board\", func() {\n+\t\ta.Enum(\"workitemboards\")\n+\t})\n+\ta.Attribute(\"id\", d.UUID, \"ID of the work item board\", func() {\n+\t\ta.Example(\"40bbdd3d-8b5d-4fd6-ac90-7236b669af04\")\n+\t})\n+\ta.Attribute(\"attributes\", workItemBoardAttributes)\n+\ta.Attribute(\"relationships\", workItemBoardRelationships)\n+\ta.Attribute(\"links\", genericLinks)\n+\ta.Required(\"type\", \"attributes\")\n+})\n+\n+var workItemBoardAttributes = a.Type(\"WorkItemBoardAttributes\", func() {\n+\ta.Attribute(\"name\", d.String)\n+\ta.Attribute(\"version\", d.Integer, \"Version for optimistic concurrency control\")\n+\ta.Attribute(\"created-at\", d.DateTime, \"timestamp of entity creation\")\n+\ta.Attribute(\"updated-at\", d.DateTime, \"timestamp of last entity update\")\n+\ta.Attribute(\"context\", d.String, \"Context of this board\")\n+\ta.Attribute(\"contextType\", d.String, \"Type of the context, used in addition to the context value\")\n+\ta.Required(\"name\", \"context\", \"contextType\")\n+})\n+\n+var workItemBoardRelationships = a.Type(\"WorkItemBoardRelationships\", func() {\n+\ta.Attribute(\"columns\", relationGenericList, \"List of work item board columns attached to the board\")\n+\ta.Attribute(\"spaceTemplate\", relationGeneric, \"The space template to which this board belongs\")\n+})\n+\n+var _ = a.Resource(\"work_item_boards\", func() {\n+\ta.BasePath(\"/workitemboards\")\n+\ta.Parent(\"space_template\")\n+\n+\ta.Action(\"list\", func() {\n+\t\ta.Routing(\n+\t\t\ta.GET(\"\"),\n+\t\t)\n+\t\ta.Description(\"List work item boards\")\n+\t\ta.Response(d.OK, workItemBoardList)\n+\t\ta.Response(d.InternalServerError, JSONAPIErrors)\n+\t\ta.Response(d.NotFound, JSONAPIErrors)\n+\t})","path":"design/work_item_board.go","position":91,"original_position":91,"commit_id":"b1dd453e00249348c14675602a8c6e8dde5669b9","original_commit_id":"b1dd453e00249348c14675602a8c6e8dde5669b9","user":{"login":"DhritiShikhar","id":6303309,"node_id":"MDQ6VXNlcjYzMDMzMDk=","avatar_url":"https://avatars0.githubusercontent.com/u/6303309?v=4","gravatar_id":"","url":"https://api.github.com/users/DhritiShikhar","html_url":"https://github.com/DhritiShikhar","followers_url":"https://api.github.com/users/DhritiShikhar/followers","following_url":"https://api.github.com/users/DhritiShikhar/following{/other_user}","gists_url":"https://api.github.com/users/DhritiShikhar/gists{/gist_id}","starred_url":"https://api.github.com/users/DhritiShikhar/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DhritiShikhar/subscriptions","organizations_url":"https://api.github.com/users/DhritiShikhar/orgs","repos_url":"https://api.github.com/users/DhritiShikhar/repos","events_url":"https://api.github.com/users/DhritiShikhar/events{/privacy}","received_events_url":"https://api.github.com/users/DhritiShikhar/received_events","type":"User","site_admin":false},"body":"Also `a.Response(d.NotModified)`","created_at":"2018-07-06T10:07:52Z","updated_at":"2018-07-06T10:07:52Z","html_url":"https://github.com/fabric8-services/fabric8-wit/pull/2111#discussion_r200609242","pull_request_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/2111","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/comments/200609242"},"html":{"href":"https://github.com/fabric8-services/fabric8-wit/pull/2111#discussion_r200609242"},"pull_request":{"href":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/2111"}}},"pull_request":{"url":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/2111","id":193559160,"node_id":"MDExOlB1bGxSZXF1ZXN0MTkzNTU5MTYw","html_url":"https://github.com/fabric8-services/fabric8-wit/pull/2111","diff_url":"https://github.com/fabric8-services/fabric8-wit/pull/2111.diff","patch_url":"https://github.com/fabric8-services/fabric8-wit/pull/2111.patch","issue_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/issues/2111","number":2111,"state":"open","locked":false,"title":"WIP: feat(boardview): Board View for WIT.","user":{"login":"michaelkleinhenz","id":7101098,"node_id":"MDQ6VXNlcjcxMDEwOTg=","avatar_url":"https://avatars1.githubusercontent.com/u/7101098?v=4","gravatar_id":"","url":"https://api.github.com/users/michaelkleinhenz","html_url":"https://github.com/michaelkleinhenz","followers_url":"https://api.github.com/users/michaelkleinhenz/followers","following_url":"https://api.github.com/users/michaelkleinhenz/following{/other_user}","gists_url":"https://api.github.com/users/michaelkleinhenz/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelkleinhenz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelkleinhenz/subscriptions","organizations_url":"https://api.github.com/users/michaelkleinhenz/orgs","repos_url":"https://api.github.com/users/michaelkleinhenz/repos","events_url":"https://api.github.com/users/michaelkleinhenz/events{/privacy}","received_events_url":"https://api.github.com/users/michaelkleinhenz/received_events","type":"User","site_admin":false},"body":"# Board View for WIT Backend Services\r\n\r\n## Description\r\nThis implements the backend support for board views. It contains changes to the JSONAPI services as well as to the space template system. It provides backend support for a flexible, extensible board view implementation.\r\n\r\n# Board View for WIT Backend Services\r\n\r\nImplements User Stories:\r\n - Board Configuration on Process Template: https://openshift.io/openshiftio/openshiftio/plan/detail/1725\r\n - Basic Board View for Planner: https://openshift.io/openshiftio/openshiftio/plan/detail/2073\r\n\r\n## Description\r\nThis implements the backend support for board views. It contains changes to the JSONAPI services as well as to the space template system. It provides backend support for a flexible, extensible board view implementation.\r\n\r\n## Changes to the JSONAPI\r\n\r\nThis section describes the API of the new service changes. It defines new entities available through JSONAPI as well as the changes to existing endpoints.\r\n\r\n### Board/Column Definition in the Space Template Response\r\n\r\nThe response for `/spacetemplates` and `/spacetemplates/:id` gets a new relationship for the board definition:\r\n\r\n```yaml\r\n# [...]\r\n\"workitemboards\": {\r\n  \"links\": {\r\n    \"related\": \"http://api/spacetemplates/000-000-001/workitemboards\"\r\n  }\r\n},\r\n# [...]\r\n```\r\n\r\nNote that this relationship will *not* be present on the response for `/space/:id` as having normalized template information on the `space` relationships is deprecated. The client should always use the provided `space-template` relationship on the `space` entitiy to pull template information.\r\n\r\nThe new external relationship `workitemboards` is available at the endpoint `/spacetemplates/:id/workitemboards` and has the following structure: \r\n\r\n```yaml\r\n{\r\n  \"id\": \"000-000-002\",\r\n  \"attributes\": {\r\n    \"name\": \"Scenarios Board\",\r\n    \"description\": \"This is the default board config for the legacy template (Experiences).\",\r\n    \"contextType\": \"TypeLevelContext\",  // this designates the type of the context\r\n    \"context\": \"000-000-003\",  // this designates the ID of the context, in this case the typegroup ID\r\n    \"created-at\": \"0001-01-01T00:00:00Z\",\r\n    \"updated-at\": \"0001-01-01T00:00:00Z\"\r\n  },\r\n  \"relationships\": {\r\n    \"spaceTemplate\": {\r\n      \"data\": {\r\n        \"id\": \"000-000-004\",\r\n        \"type\": \"spacetemplates\"\r\n      }\r\n    },\r\n    \"columns\": {\r\n      \"data\": [\r\n        {\r\n          \"id\": \"000-000-005\",\r\n          \"type\": \"boardcolumns\"\r\n        }\r\n      ]\r\n    }\r\n  },\r\n  \"included\": [\r\n    {\r\n      \"id\": \"000-000-005\",\r\n      \"title\": \"workitemboardcolumn\",\r\n      \"columnOrder\": 0,  // the left-to-right order of the column in the view\r\n      \"type\": \"boardcolumns\"\r\n    }\r\n  ],\r\n  \"type\": \"workitemboards\"\r\n}\r\n```\r\n\r\nNote that clients should always use the `related` link from the `/spacetemplate` response to pull the column definitions. The column definitions are attached as an included relationship to match the JSONAPI standard.\r\n\r\nThere might be zero or more `onUpdateActions` defined on a `boardcolumns` definition. The definition, including the `transRuleKey` and `transRuleArguments` values are only used on the WIT side and should not be used by the UI. They are provided for a future use case where the user might be allowed to update those values to change the board behaviour. `transRuleKey` describes the rule/action that is executed when a Work Item is moved *into* this column while `transRuleArguments` gives additional parameters for this action. In the current state of the implementation, this will execute a rule that updates the state of the Work Item moved into the column based on the meta-state given in `transRuleArguments`. In the future, there might be other rules/actions and different arguments. One example could be to create columns for labels. In this case, the rule/action needs to update the labels on the Work Item and the `transRuleArguments` may contain the label attached to the described column.\r\n\r\nThe columns are described as an embedded JSONAPI relationship. `onUpdateActions` are also described as included relationships.\r\n\r\n### Board Position Data on the Work Item Response\r\n\r\nThe response to `/workitems` and `/workitems/:id` is updated to contain the positions of the Work Item in the boards. Note that a Work Item may have multiple positions as a Work Item can and will appear in multiple boards. A Work Item can appear only once in each board though:\r\n\r\n```yaml\r\n{\r\n  \"data\": [\r\n    {\r\n      \"attributes\": {\r\n        \"system.created_at\": \"0001-01-01T00:00:00Z\",\r\n        \"system.title\":\"Some Work Item\",\r\n        # [...]\r\n      },\r\n      relationships: {\r\n         \"boardcolumns\": {\r\n           \"data\": [\r\n             {\r\n               \"id\":\"000-000-005\",\r\n               \"type\":\"boardcolumns\"\r\n             }\r\n           ]\r\n         }  \r\n      },\r\n      # [...]\r\n```\r\n\r\nThe ID reference of the board column is always referring to the UUID of a column. The board is given implicitly as we're dealing with UUIDs. The column positions are described as an embedded JSONAPI relationship.\r\n\r\n### Meta State on the Work Item\r\n\r\nThe meta-state is not directly connected to the board/column definitions, but to the first application of that system, mapping states to board columns. The meta-state is stored with the Work Item and returned as a standard JSONAPI attribute:\r\n\r\n```yaml\r\n{\r\n  \"data\": [\r\n    {\r\n      \"attributes\": {\r\n        \"system.created_at\": \"0001-01-01T00:00:00Z\",\r\n        \"system.title\": \"Some Work Item\",\r\n        \"system.metastate\": \"mInprogress\",\r\n        # [...]\r\n      },\r\n# [...]\r\n```\r\n\r\n### Rule/Actions on Work Item Data Updates\r\n\r\nThe rules/actions being executed on Work Item data changes are exposed by a new relationship `onUpdateActions` on the ` /workitemtypes` and `/workitemtypes/:id` responses:\r\n\r\n```yaml\r\n# [...]\r\n\"onUpdateActions\": {\r\n  \"data\": [\r\n    {\r\n      \"id\": \"000-000-006\",\r\n      \"type\": \"onUpdateActions\",\r\n      \"transRuleKey\": \"updateColumnPositionFromStateChange\",\r\n      \"transRuleArguments\": { \r\n        \"someArgument\": \"someValue\" \r\n      }\r\n    }\r\n  ]\r\n}\r\n# [...]\r\n```\r\n\r\nThere may be zero or more rules defined on a Work Item Type. Note that the rule/action information is not (yet) used on the UI. This might change when we allow the user to update those values to change the board view behaviour. \r\n\r\nThe rule/action system might later be used beyond the board view use case as a generic \"onUpdate\" mechanism.\r\n\r\n## Updates on the Board Position and State Values\r\n\r\nThe above only describes the schema of the board positions and the meta-state values. This section will describe how to update those values.\r\n\r\n### Update the Position of Work Items on a Board\r\n\r\nWhen a Work Item is moved on a board by the user, a rule/action is executed on the WIT side on update of the `boardcolumns` relationship. Clients are expected to send a `PATCH` request with the updated list of `boardcolumns` to `/workitems/:id`. *The response of the `PATCH` request contains an updated Work Item that may contain updated attribute and/or relationship values* (for example, an updated `system.state` attribute). The client is expected to update the local Work Item data from that response.\r\n\r\nThe rule/action being executed on the WIT side is defined by `transRuleID` and `transRuleArguments` values in the board definition (see above). If a card is moved on the board, that rule/action get executed and calculate the updates necessary to the Work Item.\r\n\r\n### Update of Work Item Data\r\n\r\nWhen a Work Item is updated (either attributes or relationships), the WIT will re-calculate the board positions of the particular Work Item. The client is expected to send a `PATCH` request to `/workitems/:id` as usual to update Work Item data. *The response of the `PATCH` request contains an updated Work Item that may contain updated attribute and/or relationship values* (for example, an updated `boardcolumns` relationship). The client is expected to update the local Work Item data from that response.\r\n\r\nThe rule/action being executed on the WIT side is defined by the `onUpdateActions` relationship on the Work Item Type definition (see above). If a Work Item is updated, the rules/actions are executed and the new board positions for the Work Item are calculated.\r\n \r\n## Querying for Work Items related to a Board View\r\n\r\nWhen displaying the board view, the UI needs a way to get all Work Items that are related to that board view. This is done by extending the query language for criterias on boards and columns:\r\n\r\n```\r\n{ $AND: [\r\n    { space: { $EQ: mySpaceID } },\r\n    { typegroup.name: { $EQ: Execution } },\r\n    { iteration: { $EQ: myIterationID } },\r\n    { column: { $EQ: myColumnID }}\r\n  ]}\r\n```\r\n\r\nOr for getting all Work Items on an entire board:\r\n\r\n```\r\n{ $AND: [\r\n    { space: { $EQ: mySpaceID } },\r\n    { typegroup.name: { $EQ: Execution } },\r\n    { iteration: { $EQ: myIterationID } },\r\n    { board: { $EQ: myBoardID }}\r\n  ]}\r\n```\r\n\r\nThe new criterias `column` and `board` can be used with other query language features as usual to allow for more fine-granular filtering. The `boardID` and `columnID` values can be retrieved from the board definition contained in the Space Template.\r\n\r\n## Internal Wiring\r\n\r\n### Default Board Definition in the Space Templates\r\n\r\nThe default board definition has to be added to the Space Template definition. This is done through the YAML definition files:\r\n\r\n```yaml\r\nboard_config:\r\n\r\n- id: \"24181b5c-713f-4bef-a19f-45240875da92\"\r\n  name: Scenarios Board\r\n  description: This is the default board config for the legacy template (Scenarios).\r\n  context: \"679a563c-ac9b-4478-9f3e-4187f708dd30\"\r\n  contextType: \"TypeLevelContext\"\r\n  columns:\r\n  - id: \"b4edad70-1d77-4e5a-b973-0f0d599fd20d\"\r\n    title: \"New\"\r\n    order: 0\r\n    transRuleKey: \"updateStateFromColumnMove\"\r\n    transRuleArguments: \"{ metaState: 'mNew' }\"\r\n  - id: \"b4edad70-1d77-4e5a-b973-0f0d599fd20d\"\r\n    title: \"In Progress\"\r\n    order: 0\r\n    transRuleKey: \"updateStateFromColumnMove\"\r\n    transRuleArguments: \"{ metaState: 'mInprogress' }\"\r\n\r\n- id: \"56d62801-798a-4bb0-9c97-89f136f3d539\"\r\n  name: Experiences Board\r\n  description: This is the default board config for the legacy template (Experiences).\r\n  context: \"8e4c995d-8e5f-4ad6-85bd-3cfbe718f908\"\r\n  contextType: \"TypeLevelContext\"\r\n  columns:\r\n  - id: \"b4edad70-1d77-4e5a-b973-0f0d599fd20d\"\r\n    title: \"New\"\r\n    order: 0\r\n    transRuleKey: \"updateStateFromColumnMove\"\r\n    transRuleArguments: \"{ metaState: 'mNew' }\"\r\n  - id: \"ba79f468-d2b3-4f9b-a0de-3817f40d64b4\"\r\n    title: \"In Progress\"\r\n    order: 0\r\n    transRuleKey: \"updateStateFromColumnMove\"\r\n    transRuleArguments: \"{ metaState: 'mInprogress' }\"\r\n```\r\n\r\nThe default board definitions get loaded/updated into the database on launch in the same way the Work Item Type definitions are bootstrapped.\r\n\r\n### New Database Table holding the Column Definitions\r\n\r\nThis is the table that holds the board definition for a specific board of a specific Space. A Work Item placed in a column links back to exactly one `boardcolumn` entry per `boardID`. A Work Item may be in multiple columns but only in one column per board. The `boardcolumns` defintions link back to a Space template (`spaceTemplateID`), not a Space as we don’t allow customization yet and the schema is modelled the same way the Work Item Types are modelled. That means that `columnID` and `boardID` are the same for Spaces using the same Space template. This is not an issue as the Work Item definition links back to the Space, so the context is given.\r\n\r\n(Pseudocode)\r\n```sql\r\nCREATE TABLE boardcolumns ( \r\n   id UUID NOT NULL,\r\n   spaceTemplateID UUID NOT NULL,\r\n   boardID UUID NOT NULL,\r\n   columnID UUID NOT NULL,\r\n   columnOrder INT,\r\n   context UUID NOT NULL,  // typeLevelID for now, but is generic\r\n   contextType VARCHAR NOT NULL, // \"TypeLevelContext\"\r\n   transRuleKey VARCHAR NOT NULL,  // \"updateStateFromColumnMove\"\r\n   transRuleArguments JSONB,      // contains { metaState: \"mSomeState\" }\r\n   columnTitle VARCHAR NOT NULL\r\n)\r\n```\r\n\r\n| **ID** | **spaceTemplateID** | **boardID** | **columnID** | **cOrder** | **transRuleID** | **transRuleArguments**       | **context** | **contextType** | **columnTitle** |\r\n| ------ | ------------------- | ----------- | ------------ | ---------- | --------------- | ---------------------------- | ----------- | --------------- | --------------- |\r\n| 1      | s0                  | s0-b0       | s0-b0-c0     | 0          | upFrCMove       | { metaState: \"mNew\" }        | ExId        | TLContext       | Todo            |\r\n| 2      | s0                  | s0-b0       | s0-b0-c1     | 1          | upFrCMove       | { metaState: \"mInprogress\" } | ExId        | TLContext       | In Progress     |\r\n| 3      | s0                  | s0-b0       | s0-b0-c2     | 2          | upFrCMove       | { metaState: \"mDone }        | ExId        | TLContext       | Done            |\r\n| 4      | s0                  | s0-b1       | s0-b1-c0     | 0          | upFrCMove       | { metaState: \"mNew\" }        | ScenId      | TLContext       | New             |\r\n| 5      | s0                  | s0-b1       | s0-b1-c1     | 1          | upFrCMove       | { metaState: \"mInprogress\" } | ScenId      | TLContext       | Working         |\r\n| 6      | s0                  | s0-b1       | s0-b1-c2     | 2          | upFrCMove       | { metaState: \"mDone\" }       | ScenId      | TLContext       | Closed          |\r\n\r\n### Meta-State in the Space Template Definition [DONE]\r\n\r\nThe meta-state is stored and covered by a new Work Item Type attribute that provides the mapping by using the ordered nature of the enum definitions in the space template. The new attribute is added to the generalized WIT definition so it is inherited by all existing WITs in all templates:\r\n\r\n```yaml\r\n\"system.metastate\":\r\n      label: Meta-State\r\n      description: The meta-state of the work item\r\n      read_only: yes\r\n      required: yes\r\n      type:\r\n        simple_type:\r\n          kind: enum\r\n        base_type:\r\n          kind: string\r\n        # This will allow other WITs to overwrite the values of the state.\r\n        rewritable_values: yes\r\n        # the sequence of the values need to match the sequence of the \r\n        # system.state attributes. This encapsulates the mapping.\r\n        values: \r\n        - mNew\r\n        - mOpen\r\n        - mInprogress\r\n        - mResolved\r\n        - mClosed\r\n```\r\n\r\nThe implementation needs to get the set of `system.state` values and the set of the `system.metastate` values to get the mapping from state to meta-state. The meta-state will be added to the Work Item JSONAPI model response like every other attribute (see above).\r\n","created_at":"2018-06-08T09:34:23Z","updated_at":"2018-07-06T10:07:52Z","closed_at":null,"merged_at":null,"merge_commit_sha":"a7ef222bf536ee6f2cc1b737fdfb5e2882088a4f","assignee":null,"assignees":[],"requested_reviewers":[{"login":"baijum","id":121129,"node_id":"MDQ6VXNlcjEyMTEyOQ==","avatar_url":"https://avatars3.githubusercontent.com/u/121129?v=4","gravatar_id":"","url":"https://api.github.com/users/baijum","html_url":"https://github.com/baijum","followers_url":"https://api.github.com/users/baijum/followers","following_url":"https://api.github.com/users/baijum/following{/other_user}","gists_url":"https://api.github.com/users/baijum/gists{/gist_id}","starred_url":"https://api.github.com/users/baijum/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/baijum/subscriptions","organizations_url":"https://api.github.com/users/baijum/orgs","repos_url":"https://api.github.com/users/baijum/repos","events_url":"https://api.github.com/users/baijum/events{/privacy}","received_events_url":"https://api.github.com/users/baijum/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":950449756,"node_id":"MDU6TGFiZWw5NTA0NDk3NTY=","url":"https://api.github.com/repos/fabric8-services/fabric8-wit/labels/work-in-progress","name":"work-in-progress","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/2111/commits","review_comments_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/2111/comments","review_comment_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/comments{/number}","comments_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/issues/2111/comments","statuses_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/statuses/b1dd453e00249348c14675602a8c6e8dde5669b9","head":{"label":"michaelkleinhenz:boardview","ref":"boardview","sha":"b1dd453e00249348c14675602a8c6e8dde5669b9","user":{"login":"michaelkleinhenz","id":7101098,"node_id":"MDQ6VXNlcjcxMDEwOTg=","avatar_url":"https://avatars1.githubusercontent.com/u/7101098?v=4","gravatar_id":"","url":"https://api.github.com/users/michaelkleinhenz","html_url":"https://github.com/michaelkleinhenz","followers_url":"https://api.github.com/users/michaelkleinhenz/followers","following_url":"https://api.github.com/users/michaelkleinhenz/following{/other_user}","gists_url":"https://api.github.com/users/michaelkleinhenz/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelkleinhenz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelkleinhenz/subscriptions","organizations_url":"https://api.github.com/users/michaelkleinhenz/orgs","repos_url":"https://api.github.com/users/michaelkleinhenz/repos","events_url":"https://api.github.com/users/michaelkleinhenz/events{/privacy}","received_events_url":"https://api.github.com/users/michaelkleinhenz/received_events","type":"User","site_admin":false},"repo":{"id":131597385,"node_id":"MDEwOlJlcG9zaXRvcnkxMzE1OTczODU=","name":"fabric8-wit","full_name":"michaelkleinhenz/fabric8-wit","owner":{"login":"michaelkleinhenz","id":7101098,"node_id":"MDQ6VXNlcjcxMDEwOTg=","avatar_url":"https://avatars1.githubusercontent.com/u/7101098?v=4","gravatar_id":"","url":"https://api.github.com/users/michaelkleinhenz","html_url":"https://github.com/michaelkleinhenz","followers_url":"https://api.github.com/users/michaelkleinhenz/followers","following_url":"https://api.github.com/users/michaelkleinhenz/following{/other_user}","gists_url":"https://api.github.com/users/michaelkleinhenz/gists{/gist_id}","starred_url":"https://api.github.com/users/michaelkleinhenz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/michaelkleinhenz/subscriptions","organizations_url":"https://api.github.com/users/michaelkleinhenz/orgs","repos_url":"https://api.github.com/users/michaelkleinhenz/repos","events_url":"https://api.github.com/users/michaelkleinhenz/events{/privacy}","received_events_url":"https://api.github.com/users/michaelkleinhenz/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/michaelkleinhenz/fabric8-wit","description":null,"fork":true,"url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit","forks_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/forks","keys_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/teams","hooks_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/hooks","issue_events_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/issues/events{/number}","events_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/events","assignees_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/assignees{/user}","branches_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/branches{/branch}","tags_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/tags","blobs_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/git/refs{/sha}","trees_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/statuses/{sha}","languages_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/languages","stargazers_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/stargazers","contributors_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/contributors","subscribers_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/subscribers","subscription_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/subscription","commits_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/commits{/sha}","git_commits_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/git/commits{/sha}","comments_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/comments{/number}","issue_comment_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/issues/comments{/number}","contents_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/contents/{+path}","compare_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/merges","archive_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/downloads","issues_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/issues{/number}","pulls_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/pulls{/number}","milestones_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/milestones{/number}","notifications_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/labels{/name}","releases_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/releases{/id}","deployments_url":"https://api.github.com/repos/michaelkleinhenz/fabric8-wit/deployments","created_at":"2018-04-30T13:11:46Z","updated_at":"2018-04-30T13:11:50Z","pushed_at":"2018-07-05T16:29:25Z","git_url":"git://github.com/michaelkleinhenz/fabric8-wit.git","ssh_url":"git@github.com:michaelkleinhenz/fabric8-wit.git","clone_url":"https://github.com/michaelkleinhenz/fabric8-wit.git","svn_url":"https://github.com/michaelkleinhenz/fabric8-wit","homepage":"http://devdoc.almighty.io/","size":9034,"stargazers_count":0,"watchers_count":0,"language":"Go","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"fabric8-services:master","ref":"master","sha":"88b4ed94f58e2455953ee4c452e07e12b4a087c2","user":{"login":"fabric8-services","id":29751612,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI5NzUxNjEy","avatar_url":"https://avatars1.githubusercontent.com/u/29751612?v=4","gravatar_id":"","url":"https://api.github.com/users/fabric8-services","html_url":"https://github.com/fabric8-services","followers_url":"https://api.github.com/users/fabric8-services/followers","following_url":"https://api.github.com/users/fabric8-services/following{/other_user}","gists_url":"https://api.github.com/users/fabric8-services/gists{/gist_id}","starred_url":"https://api.github.com/users/fabric8-services/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fabric8-services/subscriptions","organizations_url":"https://api.github.com/users/fabric8-services/orgs","repos_url":"https://api.github.com/users/fabric8-services/repos","events_url":"https://api.github.com/users/fabric8-services/events{/privacy}","received_events_url":"https://api.github.com/users/fabric8-services/received_events","type":"Organization","site_admin":false},"repo":{"id":54260706,"node_id":"MDEwOlJlcG9zaXRvcnk1NDI2MDcwNg==","name":"fabric8-wit","full_name":"fabric8-services/fabric8-wit","owner":{"login":"fabric8-services","id":29751612,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI5NzUxNjEy","avatar_url":"https://avatars1.githubusercontent.com/u/29751612?v=4","gravatar_id":"","url":"https://api.github.com/users/fabric8-services","html_url":"https://github.com/fabric8-services","followers_url":"https://api.github.com/users/fabric8-services/followers","following_url":"https://api.github.com/users/fabric8-services/following{/other_user}","gists_url":"https://api.github.com/users/fabric8-services/gists{/gist_id}","starred_url":"https://api.github.com/users/fabric8-services/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fabric8-services/subscriptions","organizations_url":"https://api.github.com/users/fabric8-services/orgs","repos_url":"https://api.github.com/users/fabric8-services/repos","events_url":"https://api.github.com/users/fabric8-services/events{/privacy}","received_events_url":"https://api.github.com/users/fabric8-services/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/fabric8-services/fabric8-wit","description":null,"fork":false,"url":"https://api.github.com/repos/fabric8-services/fabric8-wit","forks_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/forks","keys_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/keys{/key_id}","collaborators_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/teams","hooks_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/hooks","issue_events_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/issues/events{/number}","events_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/events","assignees_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/assignees{/user}","branches_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/branches{/branch}","tags_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/tags","blobs_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/git/refs{/sha}","trees_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/git/trees{/sha}","statuses_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/statuses/{sha}","languages_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/languages","stargazers_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/stargazers","contributors_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/contributors","subscribers_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/subscribers","subscription_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/subscription","commits_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/commits{/sha}","git_commits_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/git/commits{/sha}","comments_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/comments{/number}","issue_comment_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/issues/comments{/number}","contents_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/contents/{+path}","compare_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/compare/{base}...{head}","merges_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/merges","archive_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/downloads","issues_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/issues{/number}","pulls_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls{/number}","milestones_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/milestones{/number}","notifications_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/labels{/name}","releases_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/releases{/id}","deployments_url":"https://api.github.com/repos/fabric8-services/fabric8-wit/deployments","created_at":"2016-03-19T10:42:15Z","updated_at":"2018-07-04T20:25:15Z","pushed_at":"2018-07-05T16:29:27Z","git_url":"git://github.com/fabric8-services/fabric8-wit.git","ssh_url":"git@github.com:fabric8-services/fabric8-wit.git","clone_url":"https://github.com/fabric8-services/fabric8-wit.git","svn_url":"https://github.com/fabric8-services/fabric8-wit","homepage":"http://devdoc.almighty.io/","size":12824,"stargazers_count":38,"watchers_count":38,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":78,"mirror_url":null,"archived":false,"open_issues_count":181,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":78,"open_issues":181,"watchers":38,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/2111"},"html":{"href":"https://github.com/fabric8-services/fabric8-wit/pull/2111"},"issue":{"href":"https://api.github.com/repos/fabric8-services/fabric8-wit/issues/2111"},"comments":{"href":"https://api.github.com/repos/fabric8-services/fabric8-wit/issues/2111/comments"},"review_comments":{"href":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/2111/comments"},"review_comment":{"href":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/fabric8-services/fabric8-wit/pulls/2111/commits"},"statuses":{"href":"https://api.github.com/repos/fabric8-services/fabric8-wit/statuses/b1dd453e00249348c14675602a8c6e8dde5669b9"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"DhritiShikhar"}}