{"action":"created","issue":{"url":"https://api.github.com/repos/java-park-mail-ru/Accord-02-2018/issues/4","repository_url":"https://api.github.com/repos/java-park-mail-ru/Accord-02-2018","labels_url":"https://api.github.com/repos/java-park-mail-ru/Accord-02-2018/issues/4/labels{/name}","comments_url":"https://api.github.com/repos/java-park-mail-ru/Accord-02-2018/issues/4/comments","events_url":"https://api.github.com/repos/java-park-mail-ru/Accord-02-2018/issues/4/events","html_url":"https://github.com/java-park-mail-ru/Accord-02-2018/pull/4","id":319727080,"number":4,"title":"Rk3","user":{"login":"Meganster","id":20360999,"avatar_url":"https://avatars0.githubusercontent.com/u/20360999?v=4","gravatar_id":"","url":"https://api.github.com/users/Meganster","html_url":"https://github.com/Meganster","followers_url":"https://api.github.com/users/Meganster/followers","following_url":"https://api.github.com/users/Meganster/following{/other_user}","gists_url":"https://api.github.com/users/Meganster/gists{/gist_id}","starred_url":"https://api.github.com/users/Meganster/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Meganster/subscriptions","organizations_url":"https://api.github.com/users/Meganster/orgs","repos_url":"https://api.github.com/users/Meganster/repos","events_url":"https://api.github.com/users/Meganster/events{/privacy}","received_events_url":"https://api.github.com/users/Meganster/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"isopov","id":462800,"avatar_url":"https://avatars1.githubusercontent.com/u/462800?v=4","gravatar_id":"","url":"https://api.github.com/users/isopov","html_url":"https://github.com/isopov","followers_url":"https://api.github.com/users/isopov/followers","following_url":"https://api.github.com/users/isopov/following{/other_user}","gists_url":"https://api.github.com/users/isopov/gists{/gist_id}","starred_url":"https://api.github.com/users/isopov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/isopov/subscriptions","organizations_url":"https://api.github.com/users/isopov/orgs","repos_url":"https://api.github.com/users/isopov/repos","events_url":"https://api.github.com/users/isopov/events{/privacy}","received_events_url":"https://api.github.com/users/isopov/received_events","type":"User","site_admin":false},"assignees":[{"login":"isopov","id":462800,"avatar_url":"https://avatars1.githubusercontent.com/u/462800?v=4","gravatar_id":"","url":"https://api.github.com/users/isopov","html_url":"https://github.com/isopov","followers_url":"https://api.github.com/users/isopov/followers","following_url":"https://api.github.com/users/isopov/following{/other_user}","gists_url":"https://api.github.com/users/isopov/gists{/gist_id}","starred_url":"https://api.github.com/users/isopov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/isopov/subscriptions","organizations_url":"https://api.github.com/users/isopov/orgs","repos_url":"https://api.github.com/users/isopov/repos","events_url":"https://api.github.com/users/isopov/events{/privacy}","received_events_url":"https://api.github.com/users/isopov/received_events","type":"User","site_admin":false}],"milestone":null,"comments":0,"created_at":"2018-05-02T21:59:53Z","updated_at":"2018-05-03T08:52:51Z","closed_at":null,"author_association":"CONTRIBUTOR","pull_request":{"url":"https://api.github.com/repos/java-park-mail-ru/Accord-02-2018/pulls/4","html_url":"https://github.com/java-park-mail-ru/Accord-02-2018/pull/4","diff_url":"https://github.com/java-park-mail-ru/Accord-02-2018/pull/4.diff","patch_url":"https://github.com/java-park-mail-ru/Accord-02-2018/pull/4.patch"},"body":""},"comment":{"url":"https://api.github.com/repos/java-park-mail-ru/Accord-02-2018/issues/comments/386230290","html_url":"https://github.com/java-park-mail-ru/Accord-02-2018/pull/4#issuecomment-386230290","issue_url":"https://api.github.com/repos/java-park-mail-ru/Accord-02-2018/issues/4","id":386230290,"user":{"login":"isopov","id":462800,"avatar_url":"https://avatars1.githubusercontent.com/u/462800?v=4","gravatar_id":"","url":"https://api.github.com/users/isopov","html_url":"https://github.com/isopov","followers_url":"https://api.github.com/users/isopov/followers","following_url":"https://api.github.com/users/isopov/following{/other_user}","gists_url":"https://api.github.com/users/isopov/gists{/gist_id}","starred_url":"https://api.github.com/users/isopov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/isopov/subscriptions","organizations_url":"https://api.github.com/users/isopov/orgs","repos_url":"https://api.github.com/users/isopov/repos","events_url":"https://api.github.com/users/isopov/events{/privacy}","received_events_url":"https://api.github.com/users/isopov/received_events","type":"User","site_admin":false},"created_at":"2018-05-03T08:52:51Z","updated_at":"2018-05-03T08:52:51Z","author_association":"NONE","body":"- `spring.datasource.username = postgres` - это больно бьёт в неожиданный момент\r\n- `spring.datasource.driver-class-name=org.postgresql.Driver` - а зачем это нужно?\r\n- бут версии 2.0.1 вышел еще до РК2))\r\n- Junit просили 5 - настаиваете делать на 4-ом?\r\n- тестов на механику напишете?\r\n- spring-websocket  - почему зависимость на него, а не на стартер?\r\n- spring-websocket & spring-security-core - почему их версии явно указываете свои, а не пользуетесь управляемыми из бута?\r\n- ru.mail.park.websocket.mechanics.TaskRunner#INSTANCE - синглтоны по-хорошему должны все управляться спрингом...\r\n- `catch (RuntimeException e) { LOGGER.warn(\"GameMechanics failed\"); }` - очень плохой паттерн логирования ошибок. Хороший отлчиается совсем чуть - `catch (RuntimeException e) { LOGGER.warn(\"GameMechanics failed\", e); }`\r\n- Засилие JSONObject обескураживает - чем вам Jackson & ObjectMapper не угодил?\r\n- ru.mail.park.websocket.services.GameRoomService#queue - LinkedList - это потоко-небезопасная коллекция. Очевидно тут надо на LinkedBlockingDeque заменить, но для безопасной многопоточности этого может и не хватить...\r\n- ru.mail.park.websocket.mechanics.GameRoom#isFinished - где-то используется?\r\n- ru.mail.park.websocket.mechanics.GameRoom#userService - тоже нигде не используется и в таком месте и не должен - их игрового цикла реального времени не стоит синхронно ходить в базу.\r\n- ru.mail.park.websocket.mechanics.GameLoop#stop - в единственном месте использования сразу после вызова этого метода происходит `thread.interrupt()` на том же потоке? Зачем интерраптить по два раза по два раза?\r\n- `catch (InterruptedException e) { LOGGER.warn(\"interupted\"); }` - если завершение через interrupt это нормальное завершение, почему логирование с warn?"}}
{"actor":{"display_login":"isopov"}}