{"action":"created","comment":{"url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/comments/144724822","pull_request_review_id":69423012,"id":144724822,"diff_hunk":"@@ -0,0 +1,438 @@\n+---\n+id: 59\n+layout: post\n+title: \"How to use Doctrine Repository as Service in Symfony\"\n+perex: '''\n+    Dependency injection with autowiring is super easy [since Symfony 3.3](@todo). Yet on my  mentorings I still meet service locators.\n+    <br><br>\n+    Mostly due to traditional registration of Doctrine repositories.\n+    <br><br>\n+    The way out from *service locators* to *repository as service* was [described](https://matthiasnoback.nl/2014/05/inject-a-repository-instead-of-an-entity-manager/) by many [before](https://medium.com/@adamquaile/composition-over-inheritance-in-doctrine-repositories-f6a53a026f60) and **now we put it into Symfony 3.3 context**.  \n+'''\n+tweet_todo: \"...\"\n+---\n+\n+This post is follow up to [my StackOverflow answer](https://stackoverflow.com/questions/38346281/symfony-3-outsourcing-controller-code-into-service-layer/38349271#38349271) to clarify key points and show the most simple version yet.\n+\n+The person who kicked me to do this post was Vašek (@todo surname+link)from Příbram, *thank you for that*.\n+\n+\n+**tl;dr;** Our goal is to have clean code using constructor injection and composition over inheritance:\n+\n+```yaml\n+# app/config/services.yml\n+\n+services:\n+    _defaults:\n+        autowire: true\n+\n+    App\\Repository\\:\n+        source: ../Repository\n+```\n+\n+\n+\n+\n+## How do we Register Repositories Now\n+\n+\n+### 1. Entity Repository\n+\n+```php\n+<?php declare(strict_types=1);\n+\n+namespace App\\Repository;\n+\n+use App\\Entity\\Post;\n+use Doctrine\\ORM\\EntityRepository; \n+\n+final class PostRepository extends EntityRepository\n+{\n+    /**\n+     * Our custom method\n+     *\n+     * @return Post[]\n+     */\n+    public function findPostsByAuthor(int $authorId): array\n+    {\n+        return $this->findBy([\n+            'author' => $authorId\n+        ]);\n+    }\n+    \n+}\n+```\n+\n+\n+:+1:\n+\n+it's easy\n+everybody does that\n+default methods like findBy(), findOneBy() are at your service\n+\n+:-1:\n+\n+- if we register is as a service, we get this error (@todo-screee)\n+- why? because parent constructor is missing typehint\n+- also we can't get another dependency, like `PostSorter`, well we can but instead of\n+- \n+ \n+ ...\n+ \n+- we need to do this\n+\n+\n+    ...\n+\n+\n+- default methods of EntityRepository don't have argument typehints, so this would pass `$this->postRepository->get('someString');` even if it shouldn't.\n+\n+\n+### 2. Entity\n+\n+```php\n+<?php declare(strict_types=1);\n+\n+namespace App\\Entity;\n+\n+use Doctrine\\ORM\\Entity;\n+use Doctrine\\ORM\\EntityRepository;\n+\n+/**\n+ * @Entity(repositoryClass=\"App\\Repository\\PostRepository\")\n+ */\n+final class Post\n+{\n+    ...\n+}\n+```\n+\n+This reminds me of circular dependency and [active record pattern](@todo april fool post on Doctrine). Why should entity know about its repository?\n+\n+Do you know why we need `repositoryClass=\"PostRepository\"`?\n+\n+Yep, it's service locator. It basically works like this:\n+\n+    ```yaml\n+    $this->entityManager->getRepository(Post::class);\n+    ```\n+    \n+    - Find `Post` entity\n+    - Find repository in `@Entity` annotation \n+    - Create repository (@link-to-code) \n+    - and return it\n+\n+\n+Instead of registration to Symfony container like any other service, the Doctrine has its own with on logic coupled to annotation. [Pharetto reminder]()!\n+\n+\n+:+1:\n+\n+- everybody does that \n+- it's in documentation\n+\n+\n+:-1:\n+\n+- It is complicated to have more repositories for one entity. What if I want to have `PostRedisRepository` for Redis-related operations and `PostFrontRepository` for reading-only? \n+\n+\n+### 3. Use in Controller\n+\n+You have to use this [complicated service registration in YAML](https://matthiasnoback.nl/2014/05/inject-a-repository-instead-of-an-entity-manager/#factory-service):\n+\n+ @todo screen\n+\n+or just pass `EntityManager`.\n+\n+\n+```php\n+<?php declare(strict_types=1);\n+\n+namespace App\\Controller;\n+\n+use App\\Entity\\Post;\n+use App\\Repository\\PostRepository;\n+use Doctrine\\ORM\\EntityManager;\n+\n+final class PostController\n+{\n+    /** \n+     * @var PostRepository \n+     */\n+    private $postRepository;\n+\n+    public function __construct(EntityManager $entityManager)\n+    {\n+        $this->postRepository = $entityManager->getRepository(Post::class);\n+    }\n+}\n+```\n+\n+:+1:\n+\n+didnt! find any\n+\n+:-1:\n+\n+-  IDE doesn't know it's `App\\Repository\\PostRepository`, so we have to typehint extra everywhere we need that. Example above would work because there is typehinted property, but this would fail:\n+    \n+    ```php\n+    $postRepository = $entityManager->getRepository(Post::class);\n+    $postRepository->getPostsByAuthor(); // method not found, or was it found*()?\n+    ```\n+\n+- When we use Doctrine's EntityRepository method, like `get($id)`, we will face same problem:\n+ \n+    ```php\n+    $post = $this->postRepository->get(1);\n+    $post->getName(); # or was it \"$post->getTitle()\";\n+    ```\n+    \n+To enable typehtins, we have to add them manually.\n+\n+    ```php\n+    /** @var App\\Entity\\Post $post */\n+    $post = $this->postRepository->get(1);\n+    $post->getName(); # or was it \"$post->getTitle()\";\n+    ```\n+\n+This annotation helper should never be in *your* code, except this case:\n+ \n+    ```php\n+    /** @var SomeService $someService */\n+    $someService = $container->get(SomeService::class);\n+    ```\n+\n+\n+### 4. Registration `services.yml`\n+\n+\n+None. Everything is handled by Doctrine Repository locator.\n+\n+\n+\n+### Advantages Summary\n+\n+- Everybody does that.\n+- It's easy to copy-paste if already present in our code.\n+- It's spread in most of documentation, both in Doctrine and Symfony and in many posts about Doctrine.\n+- No brain, no gain.\n+\n+\n+### Problems Summary\n+\n+- We cannot use autowiring.\n+- We cannot inject repository to other service just via constructor.\n+- We have to **typehint manually** everything (plugins an other workarounds put asside).\n+- **We have Doctrine in our Controller** - Controller should only delegate to model, without knowing what Database package is used.  \n+- To allow constructor injection, we have to prepare for *config programming*.\n+- Thus it's coupled to the framework you use and less reusable.\n+- We cannot use multiple repository for single entity. It naturally leads to huge repositories.\n+- We cannot use construtor injection in repositoreis, which can easily lead you to creating static helper classes.\n+- Also, you directly depend on Doctrine's API, so if `get()` changes to `find()` in one `composer update`, your app is down.\n+ \n+\n+\n+#1## How to Make This Better with Symfony 3.3?\n+\n+It require few steps, but all leads to single one SOLID change. Have you heard about *composition over inheritance*?\n+\n+Instead of *inheritance*...\n+\n+```php\n+<?php declare(strict_types=1);\n+\n+namespace App\\Repository;\n+\n+use App\\Entity\\Post;\n+use Doctrine\\ORM\\EntityRepository; \n+\n+final class PostRepository extends EntityRepository\n+{\n+}\n+```\n+\n+...we will use *composition*:\n+\n+\n+```php\n+<?php declare(strict_types=1);\n+\n+namespace App\\Repository;\n+\n+use App\\Entity\\Post;\n+use Doctrine\\ORM\\EntityManager;\n+use Doctrine\\ORM\\EntityRepository;\n+\n+final class PostRepository\n+{\n+    /**\n+     * @var Repository  \n+     */\n+    private $repository;\n+    \n+    public function __construct(EntityManager $entityManager)\n+    {\n+        $this->repository = $entityManager->getRepository(Post::class);","path":"source/_posts/2017/2017-10-09-how-to-use-doctrine-repository-as-service-in-symfony.md","position":277,"original_position":277,"commit_id":"c83fde904518adca794ac11abd56dffc50d7cfa6","original_commit_id":"c83fde904518adca794ac11abd56dffc50d7cfa6","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":"I think it would be too much for this post. But maybe an idea for your post on Péhápkaři? ;) ","created_at":"2017-10-15T16:47:41Z","updated_at":"2017-10-15T16:47:41Z","html_url":"https://github.com/TomasVotruba/tomasvotruba.cz/pull/184#discussion_r144724822","pull_request_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/184","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/comments/144724822"},"html":{"href":"https://github.com/TomasVotruba/tomasvotruba.cz/pull/184#discussion_r144724822"},"pull_request":{"href":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/184"}},"in_reply_to_id":144723740},"pull_request":{"url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/184","id":146655238,"html_url":"https://github.com/TomasVotruba/tomasvotruba.cz/pull/184","diff_url":"https://github.com/TomasVotruba/tomasvotruba.cz/pull/184.diff","patch_url":"https://github.com/TomasVotruba/tomasvotruba.cz/pull/184.patch","issue_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/issues/184","number":184,"state":"open","locked":false,"title":"[post] repo service init","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":"Title: How to use Reposities with Doctrine as Service in Symfony?\r\n\r\nDoctrine Repositories ~= native","created_at":"2017-10-15T15:41:59Z","updated_at":"2017-10-15T16:47:41Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8f858e430ccec4e310002a953fe9923ea9cda9c8","assignee":null,"assignees":[],"requested_reviewers":[],"milestone":null,"commits_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/184/commits","review_comments_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/184/comments","review_comment_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/comments{/number}","comments_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/issues/184/comments","statuses_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/statuses/c83fde904518adca794ac11abd56dffc50d7cfa6","head":{"label":"TomasVotruba:post-repository-as-service","ref":"post-repository-as-service","sha":"c83fde904518adca794ac11abd56dffc50d7cfa6","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},"repo":{"id":48589800,"name":"tomasvotruba.cz","full_name":"TomasVotruba/tomasvotruba.cz","owner":{"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},"private":false,"html_url":"https://github.com/TomasVotruba/tomasvotruba.cz","description":"Static site about myself. Runs on Symplify\\Statie ","fork":false,"url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz","forks_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/forks","keys_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/keys{/key_id}","collaborators_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/teams","hooks_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/hooks","issue_events_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/issues/events{/number}","events_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/events","assignees_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/assignees{/user}","branches_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/branches{/branch}","tags_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/tags","blobs_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/git/refs{/sha}","trees_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/git/trees{/sha}","statuses_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/statuses/{sha}","languages_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/languages","stargazers_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/stargazers","contributors_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/contributors","subscribers_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/subscribers","subscription_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/subscription","commits_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/commits{/sha}","git_commits_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/git/commits{/sha}","comments_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/comments{/number}","issue_comment_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/issues/comments{/number}","contents_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/contents/{+path}","compare_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/compare/{base}...{head}","merges_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/merges","archive_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/downloads","issues_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/issues{/number}","pulls_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls{/number}","milestones_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/milestones{/number}","notifications_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/labels{/name}","releases_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/releases{/id}","deployments_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/deployments","created_at":"2015-12-25T19:45:18Z","updated_at":"2017-05-29T17:58:20Z","pushed_at":"2017-10-15T15:42:22Z","git_url":"git://github.com/TomasVotruba/tomasvotruba.cz.git","ssh_url":"git@github.com:TomasVotruba/tomasvotruba.cz.git","clone_url":"https://github.com/TomasVotruba/tomasvotruba.cz.git","svn_url":"https://github.com/TomasVotruba/tomasvotruba.cz","homepage":"https://www.tomasvotruba.cz","size":15965,"stargazers_count":4,"watchers_count":4,"language":"HTML","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":21,"mirror_url":null,"open_issues_count":9,"forks":21,"open_issues":9,"watchers":4,"default_branch":"master"}},"base":{"label":"TomasVotruba:master","ref":"master","sha":"31777ac0bd549f31c0fde534dd1f902064d01bd7","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},"repo":{"id":48589800,"name":"tomasvotruba.cz","full_name":"TomasVotruba/tomasvotruba.cz","owner":{"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},"private":false,"html_url":"https://github.com/TomasVotruba/tomasvotruba.cz","description":"Static site about myself. Runs on Symplify\\Statie ","fork":false,"url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz","forks_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/forks","keys_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/keys{/key_id}","collaborators_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/teams","hooks_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/hooks","issue_events_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/issues/events{/number}","events_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/events","assignees_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/assignees{/user}","branches_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/branches{/branch}","tags_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/tags","blobs_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/git/refs{/sha}","trees_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/git/trees{/sha}","statuses_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/statuses/{sha}","languages_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/languages","stargazers_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/stargazers","contributors_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/contributors","subscribers_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/subscribers","subscription_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/subscription","commits_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/commits{/sha}","git_commits_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/git/commits{/sha}","comments_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/comments{/number}","issue_comment_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/issues/comments{/number}","contents_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/contents/{+path}","compare_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/compare/{base}...{head}","merges_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/merges","archive_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/downloads","issues_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/issues{/number}","pulls_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls{/number}","milestones_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/milestones{/number}","notifications_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/labels{/name}","releases_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/releases{/id}","deployments_url":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/deployments","created_at":"2015-12-25T19:45:18Z","updated_at":"2017-05-29T17:58:20Z","pushed_at":"2017-10-15T15:42:22Z","git_url":"git://github.com/TomasVotruba/tomasvotruba.cz.git","ssh_url":"git@github.com:TomasVotruba/tomasvotruba.cz.git","clone_url":"https://github.com/TomasVotruba/tomasvotruba.cz.git","svn_url":"https://github.com/TomasVotruba/tomasvotruba.cz","homepage":"https://www.tomasvotruba.cz","size":15965,"stargazers_count":4,"watchers_count":4,"language":"HTML","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":21,"mirror_url":null,"open_issues_count":9,"forks":21,"open_issues":9,"watchers":4,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/184"},"html":{"href":"https://github.com/TomasVotruba/tomasvotruba.cz/pull/184"},"issue":{"href":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/issues/184"},"comments":{"href":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/issues/184/comments"},"review_comments":{"href":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/184/comments"},"review_comment":{"href":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/pulls/184/commits"},"statuses":{"href":"https://api.github.com/repos/TomasVotruba/tomasvotruba.cz/statuses/c83fde904518adca794ac11abd56dffc50d7cfa6"}},"author_association":"OWNER"}}
{"actor":{"display_login":"TomasVotruba"}}