mirror of
https://github.com/algora-io/tv.git
synced 2025-04-07 06:49:52 +02:00
add routes /gh/:user_id/{thumbnail,channel}
(#33)
This commit is contained in:
parent
795e92289f
commit
0ab70fc530
@ -65,7 +65,7 @@ defmodule Algora.Accounts do
|
|||||||
Registers a user from their GithHub information.
|
Registers a user from their GithHub information.
|
||||||
"""
|
"""
|
||||||
def register_github_user(primary_email, info, emails, token) do
|
def register_github_user(primary_email, info, emails, token) do
|
||||||
if user = get_user_by_provider(:github, primary_email) do
|
if user = get_user_by_provider_email(:github, primary_email) do
|
||||||
update_github_token(user, token)
|
update_github_token(user, token)
|
||||||
else
|
else
|
||||||
info
|
info
|
||||||
@ -74,7 +74,7 @@ defmodule Algora.Accounts do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def get_user_by_provider(provider, email) when provider in [:github] do
|
def get_user_by_provider_email(provider, email) when provider in [:github] do
|
||||||
query =
|
query =
|
||||||
from(u in User,
|
from(u in User,
|
||||||
join: i in assoc(u, :identities),
|
join: i in assoc(u, :identities),
|
||||||
@ -86,6 +86,16 @@ defmodule Algora.Accounts do
|
|||||||
Repo.one(query)
|
Repo.one(query)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_user_by_provider_id(provider, id) when provider in [:github] do
|
||||||
|
query =
|
||||||
|
from(u in User,
|
||||||
|
join: i in assoc(u, :identities),
|
||||||
|
where: i.provider == ^to_string(provider) and i.provider_id == ^id
|
||||||
|
)
|
||||||
|
|
||||||
|
Repo.one(query)
|
||||||
|
end
|
||||||
|
|
||||||
def change_settings(%User{} = user, attrs) do
|
def change_settings(%User{} = user, attrs) do
|
||||||
User.settings_changeset(user, attrs)
|
User.settings_changeset(user, attrs)
|
||||||
end
|
end
|
||||||
|
46
lib/algora_web/controllers/github_controller.ex
Normal file
46
lib/algora_web/controllers/github_controller.ex
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
defmodule AlgoraWeb.GithubController do
|
||||||
|
use AlgoraWeb, :controller
|
||||||
|
|
||||||
|
alias Algora.{Accounts, Library}
|
||||||
|
|
||||||
|
def get_thumbnail(conn, %{"user_id" => user_id}) do
|
||||||
|
with {:ok, user} <- get_user(user_id),
|
||||||
|
{:ok, video} <- get_latest_video(user) do
|
||||||
|
redirect(conn, external: get_thumbnail_url(video))
|
||||||
|
else
|
||||||
|
{:error, :video_not_found} -> redirect(conn, to: ~p"/images/og/default.png")
|
||||||
|
_ -> put_status(conn, :not_found)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def get_channel(conn, %{"user_id" => user_id}) do
|
||||||
|
case get_user(user_id) do
|
||||||
|
{:ok, user} ->
|
||||||
|
redirect(conn, to: ~p"/#{user.handle}")
|
||||||
|
|
||||||
|
_ ->
|
||||||
|
put_status(conn, :not_found)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_user(id) do
|
||||||
|
case Accounts.get_user_by_provider_id(:github, id) do
|
||||||
|
nil -> {:error, :user_not_found}
|
||||||
|
user -> {:ok, user}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_latest_video(user) do
|
||||||
|
case Library.get_latest_video(user) do
|
||||||
|
nil -> {:error, :video_not_found}
|
||||||
|
user -> {:ok, user}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defp get_thumbnail_url(video) do
|
||||||
|
case video.thumbnail_url do
|
||||||
|
nil -> ~p"/images/og/default.png"
|
||||||
|
url -> url
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
@ -86,6 +86,9 @@ defmodule AlgoraWeb.Router do
|
|||||||
live "/og/cossgpt", COSSGPTOGLive, :index
|
live "/og/cossgpt", COSSGPTOGLive, :index
|
||||||
live "/:channel_handle", ChannelLive, :show
|
live "/:channel_handle", ChannelLive, :show
|
||||||
live "/:channel_handle/:video_id", VideoLive, :show
|
live "/:channel_handle/:video_id", VideoLive, :show
|
||||||
|
|
||||||
|
get "/gh/:user_id/thumbnail", GithubController, :get_thumbnail
|
||||||
|
get "/gh/:user_id/channel", GithubController, :get_channel
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user