{"action":"created","comment":{"url":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/comments/155258673","pull_request_review_id":81547436,"id":155258673,"diff_hunk":"@@ -0,0 +1,147 @@\n+---\n+id: 49\n+layout: post\n+title: \"Domain-driven design - language\"\n+perex: '''\n+ Domain-driven design is a software design that focuses on understanding underlying business.\n+ It is useful for long-term projects because it leads to high-quality software that serves users.\n+ It helps when dealing with difficult problems, keeps track of core problems and prevents us from getting lost in the code.\n+'''\n+author: 29\n+lang: en\n+---\n+\n+### Personal motivation\n+\n+Before I started to apply domain design ideas, I struggled with software development.\n+I knew how to make user interface, how to deal with API, how to work with templates, how to use design patterns.\n+But the most important code was hidden in services that were connected to a database.\n+Although I had useful tools, I had a really big problem with testing these services, the tests were slow and not maintainable.\n+\n+Thanks to the domain design I started to learn how to think in object oriented programming.\n+I know there is still much to learn, but at least I know in which way to progress.\n+DDD has a huge positive impact on my architectural, modeling and testing skills.\n+\n+This is just a side effect because domain-driven design is not about objects, domain-driven design is about the domain.\n+\n+## Domain\n+\n+Domain is an area that project covers, it has its own terminology, requirements, problems to solve.\n+A concrete domain is its own small world. It can be e-shop, hockey statistics, content management, our new project.\n+Domain has its natural boundaries too, it does not cover everything.\n+\n+## Domain language\n+\n+Every domain has its own terminology, its own language.\n+A term in a domain means something completely different in another domain.\n+\n+\n+Imagine an account.\n+A bank account allows us to send and receive money and has its unique number.\n+Anytime we tell about an account in a bank, an account is always a bank account.\n+In the other hand, an account in an information system is used to authorize a user.\n+We have the term \"account\" meaning something absolutely different in two different domains.\n+Domain has an impact on what we imagine when someone says a concrete term.\n+So we have to learn and specify domain terms first.\n+\n+Let's speak about e-shop domain. What is a price?\n+For us, as customers, it is how much we pay.\n+A manager can think about price as an amount that his company pays to the supplier.\n+For an accountant, a price is just a number.\n+And e-shop programmer is now confused.\n+\n+Language is crucial because customers and experts are telling their stories in their language.\n+But it is also natural language, inaccurate, ambiguous, context-aware.\n+And as we can see, language can be tricky even within one domain.\n+\n+## Ubiquitous language\n+\n+To reduce natural language ambiguity, we can introduce accurate language.\n+\n+Is price that we are selling for always a selling price?\n+Do users use often term selling price instead of price?\n+Great, maybe experts agree that we use only the term selling price because it is definitive.\n+When we discuss with users, we always use term selling price, the user interface communicate selling price, we find selling price in the documentation.\n+What is written in code - variables, classes, methods? The selling price. Always.\n+\n+The strict term became part of everyday users' life, communication between experts and programmers, programmers' work.\n+The term is everywhere, it became ubiquitous.\n+\n+Ubiquitous language connects users, domain experts, programmers, so it creates project backbone.\n+It may not be a bad idea to document key terms, especially if terms have conditions of use.\n+The documentation may help new programmers, as well as users, to get into the project.\n+\n+Be careful, ubiquitous language, this definitive, specific language must always come from domain experts or users, their stories and their conversations.\n+We must not invent our terms, our language. Never.\n+\n+## Impact on model\n+\n+### VIP price\n+\n+Let's talk about the e-shop for a while.\n+Our client wants to have better prices for regular customers, so they keep buying products.\n+Client starts calling these prices as VIP prices since they are only for VIP customers.\n+This is a reasonable story.\n+\n+We can think about clients use-case - we need another price.\n+Well, what will happen when he asks for yet another price?\n+We will have to rewrite our software again.\n+What if we generalize this task?\n+We can offer an unlimited amount of prices by introducing price lists.\n+A product can have a price in multiple price lists.\n+Sounds good, right? A cool feature - price lists.\n+\n+### Mental model\n+\n+What client has in mind are two prices for the same product\n+\n+![product with exactly two prices](/assets/images/posts/2017/ddd-language/user-product-prices.png)\n+\n+We think about product, price lists, and prices\n+\n+![one product, two price lists and two prices that connect product and price lists](/assets/images/posts/2017/ddd-language/programmer-product-prices.png)\n+\n+When the client tells us his stories, we have to map his language to our language and our model.\n+When he is using software, he has to map his model to language in the user interface.\n+We ended with two different languages and with models that diverged.\n+\n+And now imagine that a client wants to lower the VIP price.\n+For him it is straightforward - he wants to change a number that is called VIP price.\n+What is it for a programmer?\n+We have to find a VIP price list, find a price for a given product in the price list and finally change the value.\n+What would happen if the price list is not found?\n+If the price in price list is not found?\n+Now we have use cases that do not exist in client's domain.\n+The client can't explain what should happen because it does not make sense for him.\n+\n+The model does not fit user use cases, the model language is messed up.\n+If we would invent our language, we would speak with users in terms they do not understand, and they would be using their language anyway because it is their domain language.\n+The user interface will not communicate with them in their language and using the software will cause frustration.\n+\n+The domain way to solve diverged model and language is to refactor software, so user and programmer will use the same ubiquitous language.\n+\n+## Domain evolution\n+\n+The domain may evolve, nothing is permanent.\n+Important thing is that the ubiquitous language is evolving with the domain and so is the software.\n+When the ubiquitous language is changed, the mental model is changed and the software is refactored by this new model.\n+\n+## TL;DR\n+\n+The building block of domain-driven design is the ubiquitous language.\n+The ubiquitous language connects people in the project, so everyone can understand each other.\n+We have to keep using the language that comes from the domain and never invent our own.\n+\n+So simple, yet so powerful.\n+\n+Next time we'll take a look at modeling.\n+\n+## References\n+\n+EVANS, Eric. *Domain-driven design: tackling complexity in the heart of software*. Boston: Addison-Wesley, 2004. ISBN 0-321-12521-5.\n+\n+FOWLER, Martin. UbiquitousLanguage. *MartinFowler.com* [online]. 2006 [2017-11-28]. Available: [https://martinfowler.com/bliki/UbiquitousLanguage.html](https://martinfowler.com/bliki/UbiquitousLanguage.html)\n+\n+## Contact\n+\n+<em class=\"fa fa-home\"></em> [svatasimara.cz](http://svatasimara.cz/)","path":"source/_posts/2017/2017-12-05-domain-driven-design-language.md","position":149,"original_position":147,"commit_id":"21a2fc7b3e8cc33700720763530d106d4a09ce22","original_commit_id":"0f83617d1d258505b46ef27edc2d6d3567782ba0","user":{"login":"TomasVotruba","id":924196,"avatar_url":"https://avatars1.githubusercontent.com/u/924196?v=4","gravatar_id":"","url":"https://api.github.com/users/TomasVotruba","html_url":"https://github.com/TomasVotruba","followers_url":"https://api.github.com/users/TomasVotruba/followers","following_url":"https://api.github.com/users/TomasVotruba/following{/other_user}","gists_url":"https://api.github.com/users/TomasVotruba/gists{/gist_id}","starred_url":"https://api.github.com/users/TomasVotruba/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/TomasVotruba/subscriptions","organizations_url":"https://api.github.com/users/TomasVotruba/orgs","repos_url":"https://api.github.com/users/TomasVotruba/repos","events_url":"https://api.github.com/users/TomasVotruba/events{/privacy}","received_events_url":"https://api.github.com/users/TomasVotruba/received_events","type":"User","site_admin":false},"body":"Btw, what is goal of this contact?\r\n\r\nAre you offering consultancy, making lecture or looking for a job? Feel free to write it here, so reader can write your with a reason.\r\n\r\nE.g. \"Are you designing architecture and like DDD aproach? Hire me, I can help you\"","created_at":"2017-12-06T14:55:37Z","updated_at":"2017-12-06T14:55:37Z","html_url":"https://github.com/pehapkari/pehapkari.cz/pull/352#discussion_r155258673","pull_request_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/352","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/comments/155258673"},"html":{"href":"https://github.com/pehapkari/pehapkari.cz/pull/352#discussion_r155258673"},"pull_request":{"href":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/352"}}},"pull_request":{"url":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/352","id":156330263,"html_url":"https://github.com/pehapkari/pehapkari.cz/pull/352","diff_url":"https://github.com/pehapkari/pehapkari.cz/pull/352.diff","patch_url":"https://github.com/pehapkari/pehapkari.cz/pull/352.patch","issue_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/issues/352","number":352,"state":"open","locked":false,"title":"Add article Domain-driven design - language","user":{"login":"simara-svatopluk","id":1669982,"avatar_url":"https://avatars3.githubusercontent.com/u/1669982?v=4","gravatar_id":"","url":"https://api.github.com/users/simara-svatopluk","html_url":"https://github.com/simara-svatopluk","followers_url":"https://api.github.com/users/simara-svatopluk/followers","following_url":"https://api.github.com/users/simara-svatopluk/following{/other_user}","gists_url":"https://api.github.com/users/simara-svatopluk/gists{/gist_id}","starred_url":"https://api.github.com/users/simara-svatopluk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/simara-svatopluk/subscriptions","organizations_url":"https://api.github.com/users/simara-svatopluk/orgs","repos_url":"https://api.github.com/users/simara-svatopluk/repos","events_url":"https://api.github.com/users/simara-svatopluk/events{/privacy}","received_events_url":"https://api.github.com/users/simara-svatopluk/received_events","type":"User","site_admin":false},"body":"","created_at":"2017-12-04T23:04:17Z","updated_at":"2017-12-06T14:55:37Z","closed_at":null,"merged_at":null,"merge_commit_sha":"daf96d4a6c1a23ee2b4ea007838a8bfeb2b22d8d","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/352/commits","review_comments_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/352/comments","review_comment_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/issues/352/comments","statuses_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/statuses/21a2fc7b3e8cc33700720763530d106d4a09ce22","head":{"label":"simara-svatopluk:ddd-language","ref":"ddd-language","sha":"21a2fc7b3e8cc33700720763530d106d4a09ce22","user":{"login":"simara-svatopluk","id":1669982,"avatar_url":"https://avatars3.githubusercontent.com/u/1669982?v=4","gravatar_id":"","url":"https://api.github.com/users/simara-svatopluk","html_url":"https://github.com/simara-svatopluk","followers_url":"https://api.github.com/users/simara-svatopluk/followers","following_url":"https://api.github.com/users/simara-svatopluk/following{/other_user}","gists_url":"https://api.github.com/users/simara-svatopluk/gists{/gist_id}","starred_url":"https://api.github.com/users/simara-svatopluk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/simara-svatopluk/subscriptions","organizations_url":"https://api.github.com/users/simara-svatopluk/orgs","repos_url":"https://api.github.com/users/simara-svatopluk/repos","events_url":"https://api.github.com/users/simara-svatopluk/events{/privacy}","received_events_url":"https://api.github.com/users/simara-svatopluk/received_events","type":"User","site_admin":false},"repo":{"id":73744656,"name":"pehapkari.cz","full_name":"simara-svatopluk/pehapkari.cz","owner":{"login":"simara-svatopluk","id":1669982,"avatar_url":"https://avatars3.githubusercontent.com/u/1669982?v=4","gravatar_id":"","url":"https://api.github.com/users/simara-svatopluk","html_url":"https://github.com/simara-svatopluk","followers_url":"https://api.github.com/users/simara-svatopluk/followers","following_url":"https://api.github.com/users/simara-svatopluk/following{/other_user}","gists_url":"https://api.github.com/users/simara-svatopluk/gists{/gist_id}","starred_url":"https://api.github.com/users/simara-svatopluk/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/simara-svatopluk/subscriptions","organizations_url":"https://api.github.com/users/simara-svatopluk/orgs","repos_url":"https://api.github.com/users/simara-svatopluk/repos","events_url":"https://api.github.com/users/simara-svatopluk/events{/privacy}","received_events_url":"https://api.github.com/users/simara-svatopluk/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/simara-svatopluk/pehapkari.cz","description":"Website of Czech and Slovak PHP Community","fork":true,"url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz","forks_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/forks","keys_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/keys{/key_id}","collaborators_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/teams","hooks_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/hooks","issue_events_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/issues/events{/number}","events_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/events","assignees_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/assignees{/user}","branches_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/branches{/branch}","tags_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/tags","blobs_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/git/refs{/sha}","trees_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/git/trees{/sha}","statuses_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/statuses/{sha}","languages_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/languages","stargazers_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/stargazers","contributors_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/contributors","subscribers_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/subscribers","subscription_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/subscription","commits_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/commits{/sha}","git_commits_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/git/commits{/sha}","comments_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/comments{/number}","issue_comment_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/issues/comments{/number}","contents_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/contents/{+path}","compare_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/compare/{base}...{head}","merges_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/merges","archive_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/downloads","issues_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/issues{/number}","pulls_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/pulls{/number}","milestones_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/milestones{/number}","notifications_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/labels{/name}","releases_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/releases{/id}","deployments_url":"https://api.github.com/repos/simara-svatopluk/pehapkari.cz/deployments","created_at":"2016-11-14T20:34:34Z","updated_at":"2016-11-14T20:34:35Z","pushed_at":"2017-12-06T14:52:58Z","git_url":"git://github.com/simara-svatopluk/pehapkari.cz.git","ssh_url":"git@github.com:simara-svatopluk/pehapkari.cz.git","clone_url":"https://github.com/simara-svatopluk/pehapkari.cz.git","svn_url":"https://github.com/simara-svatopluk/pehapkari.cz","homepage":"http://pehapkari.cz","size":9667,"stargazers_count":0,"watchers_count":0,"language":"HTML","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":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"pehapkari:master","ref":"master","sha":"45a23cb0768eafc446efaf64a6fc865120da04d6","user":{"login":"pehapkari","id":12694503,"avatar_url":"https://avatars3.githubusercontent.com/u/12694503?v=4","gravatar_id":"","url":"https://api.github.com/users/pehapkari","html_url":"https://github.com/pehapkari","followers_url":"https://api.github.com/users/pehapkari/followers","following_url":"https://api.github.com/users/pehapkari/following{/other_user}","gists_url":"https://api.github.com/users/pehapkari/gists{/gist_id}","starred_url":"https://api.github.com/users/pehapkari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pehapkari/subscriptions","organizations_url":"https://api.github.com/users/pehapkari/orgs","repos_url":"https://api.github.com/users/pehapkari/repos","events_url":"https://api.github.com/users/pehapkari/events{/privacy}","received_events_url":"https://api.github.com/users/pehapkari/received_events","type":"Organization","site_admin":false},"repo":{"id":41292979,"name":"pehapkari.cz","full_name":"pehapkari/pehapkari.cz","owner":{"login":"pehapkari","id":12694503,"avatar_url":"https://avatars3.githubusercontent.com/u/12694503?v=4","gravatar_id":"","url":"https://api.github.com/users/pehapkari","html_url":"https://github.com/pehapkari","followers_url":"https://api.github.com/users/pehapkari/followers","following_url":"https://api.github.com/users/pehapkari/following{/other_user}","gists_url":"https://api.github.com/users/pehapkari/gists{/gist_id}","starred_url":"https://api.github.com/users/pehapkari/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pehapkari/subscriptions","organizations_url":"https://api.github.com/users/pehapkari/orgs","repos_url":"https://api.github.com/users/pehapkari/repos","events_url":"https://api.github.com/users/pehapkari/events{/privacy}","received_events_url":"https://api.github.com/users/pehapkari/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pehapkari/pehapkari.cz","description":"Website of Czech and Slovak PHP Community","fork":false,"url":"https://api.github.com/repos/pehapkari/pehapkari.cz","forks_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/forks","keys_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/teams","hooks_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/hooks","issue_events_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/issues/events{/number}","events_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/events","assignees_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/assignees{/user}","branches_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/branches{/branch}","tags_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/tags","blobs_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/git/refs{/sha}","trees_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/statuses/{sha}","languages_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/languages","stargazers_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/stargazers","contributors_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/contributors","subscribers_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/subscribers","subscription_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/subscription","commits_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/commits{/sha}","git_commits_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/git/commits{/sha}","comments_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/comments{/number}","issue_comment_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/issues/comments{/number}","contents_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/contents/{+path}","compare_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/merges","archive_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/downloads","issues_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/issues{/number}","pulls_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls{/number}","milestones_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/milestones{/number}","notifications_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/labels{/name}","releases_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/releases{/id}","deployments_url":"https://api.github.com/repos/pehapkari/pehapkari.cz/deployments","created_at":"2015-08-24T08:59:03Z","updated_at":"2017-11-06T09:04:19Z","pushed_at":"2017-12-06T14:52:59Z","git_url":"git://github.com/pehapkari/pehapkari.cz.git","ssh_url":"git@github.com:pehapkari/pehapkari.cz.git","clone_url":"https://github.com/pehapkari/pehapkari.cz.git","svn_url":"https://github.com/pehapkari/pehapkari.cz","homepage":"https://pehapkari.cz","size":9861,"stargazers_count":17,"watchers_count":17,"language":"HTML","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":103,"mirror_url":null,"archived":false,"open_issues_count":7,"license":null,"forks":103,"open_issues":7,"watchers":17,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/352"},"html":{"href":"https://github.com/pehapkari/pehapkari.cz/pull/352"},"issue":{"href":"https://api.github.com/repos/pehapkari/pehapkari.cz/issues/352"},"comments":{"href":"https://api.github.com/repos/pehapkari/pehapkari.cz/issues/352/comments"},"review_comments":{"href":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/352/comments"},"review_comment":{"href":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pehapkari/pehapkari.cz/pulls/352/commits"},"statuses":{"href":"https://api.github.com/repos/pehapkari/pehapkari.cz/statuses/21a2fc7b3e8cc33700720763530d106d4a09ce22"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"TomasVotruba"}}