Как моделировать репозитории и звезды? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть функция, очень похожая на звезды GitHub. Пользователь может иметь репозитории, а другой пользователь может пометить этот репозиторий.

Моя starred_repos таблица выглядит так

| id | user_id | created_at | repo_id |
---------------------------------------
| ...| ...     | ...        | ...     |

Я хотел бы показать список всех помеченных репо для данного пользователя. Очень похоже на GitHub's one https://github.com/zemirco?tab=stars.

Отлично работает со следующим запросом

SELECT repos.*, users.*, starred_repos.created_at
FROM starred_repos
LEFT JOIN repos ON repos.id = starred_repos.repo_id
LEFT JOIN users ON users.id = repos.user_id
WHERE starred_repos.user_id = 1

Это дает мне помеченные репозитории для данного user_id, а также владельца репозитория.

В списке отсутствует тот факт, что другой пользователь снял репо или нет. Например, если вы посмотрите на мои звезды GitHub (когда вы вошли в систему), и я пометил репозиторий, который вы также пометили, кнопка говорит Unstar. Если вы не сняли репо из моего списка, они все скажут Star.

Итак, скажем, я хотел бы иметь звездочки для пользователя 1, как в запросе выше. У меня сам есть идентификатор пользователя 2, и запрос должен также вернуть, если пользователь с идентификатором 2 снял репо.

Как функция она должна выглядеть как GetStarredRepos(for_user_id: 1, own_user_id: 2).

Я ожидаю, что список будет таким (показывается только самое важное)

| id | owner_name | repo_name | starred |
-----------------------------------------
| ...| ......     | ...       | false   |
| ...| ......     | ...       | true    |

С этим результатом я могу создать список, подобный списку из GitHub.

Большое спасибо и счастливого Хэллоуина!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...