Skip to content

Commit 4dd83ae

Browse files
committed
refactor organization onboarding process to separate metadata parsing
1 parent 7ece60d commit 4dd83ae

File tree

1 file changed

+65
-51
lines changed

1 file changed

+65
-51
lines changed

lib/algora/organizations/organizations.ex

Lines changed: 65 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -111,79 +111,93 @@ defmodule Algora.Organizations do
111111
end)
112112
end
113113

114-
def onboard_organization_from_domain(domain, opts \\ %{}) do
115-
case Algora.Crawler.fetch_site_metadata(domain) do
116-
{:ok, metadata} ->
117-
org_name =
118-
case get_in(metadata, [:display_name]) do
119-
nil ->
120-
domain
121-
|> String.split(".")
122-
|> List.first()
123-
|> String.capitalize()
124-
125-
name ->
126-
name
127-
end
114+
def parse_site_metadata(domain, metadata, opts \\ %{}) do
115+
org_name =
116+
case get_in(metadata, [:display_name]) do
117+
nil ->
118+
domain
119+
|> String.split(".")
120+
|> List.first()
121+
|> String.capitalize()
128122

129-
org_handle =
130-
case get_in(metadata, [:handle]) do
131-
nil ->
132-
domain
133-
|> String.split(".")
134-
|> List.first()
135-
|> String.downcase()
136-
137-
handle ->
138-
handle
123+
name ->
124+
name
125+
end
126+
127+
org_handle =
128+
case get_in(metadata, [:handle]) do
129+
nil ->
130+
domain
131+
|> String.split(".")
132+
|> List.first()
133+
|> String.downcase()
134+
135+
handle ->
136+
handle
137+
end
138+
139+
Map.merge(
140+
%{
141+
display_name: org_name,
142+
bio: get_in(metadata, [:bio]) || get_in(metadata, [:og_description]) || get_in(metadata, [:og_title]),
143+
avatar_url: get_in(metadata, [:avatar_url]) || get_in(metadata, [:favicon_url]),
144+
handle: org_handle,
145+
domain: domain,
146+
og_title: get_in(metadata, [:og_title]),
147+
og_image_url: get_in(metadata, [:og_image_url]),
148+
website_url: get_in(metadata, [:website_url]),
149+
twitter_url: get_in(metadata, [:socials, :twitter]),
150+
github_url: get_in(metadata, [:socials, :github]),
151+
youtube_url: get_in(metadata, [:socials, :youtube]),
152+
twitch_url: get_in(metadata, [:socials, :twitch]),
153+
discord_url: get_in(metadata, [:socials, :discord]),
154+
slack_url: get_in(metadata, [:socials, :slack]),
155+
linkedin_url: get_in(metadata, [:socials, :linkedin])
156+
},
157+
opts
158+
)
159+
end
160+
161+
def onboard_organization_from_domain(domain, opts \\ %{}) do
162+
# Use provided metadata or fetch it
163+
result =
164+
case Map.get(opts, :metadata) do
165+
nil ->
166+
case Algora.Crawler.fetch_site_metadata(domain) do
167+
{:ok, metadata} -> {:ok, parse_site_metadata(domain, metadata, opts)}
168+
{:error, reason} -> {:error, reason}
139169
end
140170

141-
params =
142-
Map.merge(
143-
%{
144-
display_name: org_name,
145-
bio: get_in(metadata, [:bio]) || get_in(metadata, [:og_description]) || get_in(metadata, [:og_title]),
146-
avatar_url: get_in(metadata, [:avatar_url]) || get_in(metadata, [:favicon_url]),
147-
handle: org_handle,
148-
domain: domain,
149-
og_title: get_in(metadata, [:og_title]),
150-
og_image_url: get_in(metadata, [:og_image_url]),
151-
website_url: get_in(metadata, [:website_url]),
152-
twitter_url: get_in(metadata, [:socials, :twitter]),
153-
github_url: get_in(metadata, [:socials, :github]),
154-
youtube_url: get_in(metadata, [:socials, :youtube]),
155-
twitch_url: get_in(metadata, [:socials, :twitch]),
156-
discord_url: get_in(metadata, [:socials, :discord]),
157-
slack_url: get_in(metadata, [:socials, :slack]),
158-
linkedin_url: get_in(metadata, [:socials, :linkedin])
159-
},
160-
opts
161-
)
171+
metadata ->
172+
{:ok, metadata}
173+
end
162174

175+
case result do
176+
{:ok, metadata} ->
163177
org = Repo.one(from o in User, where: o.domain == ^domain, limit: 1)
164178

165179
org_handle =
166180
case org do
167-
nil -> ensure_unique_org_handle(params.handle)
181+
nil -> ensure_unique_org_handle(metadata.handle)
168182
org -> org.handle
169183
end
170184

171185
case org do
172186
nil ->
173187
%User{type: :organization}
174-
|> Org.changeset(Map.put(params, :handle, org_handle))
188+
|> Org.changeset(Map.put(metadata, :handle, org_handle))
175189
|> Repo.insert()
176190

177191
existing_org ->
178-
params =
192+
metadata =
179193
if existing_org.handle do
180-
Map.delete(params, :handle)
194+
Map.delete(metadata, :handle)
181195
else
182-
params
196+
metadata
183197
end
184198

185199
existing_org
186-
|> Org.changeset(params)
200+
|> Org.changeset(metadata)
187201
|> Repo.update()
188202
end
189203

0 commit comments

Comments
 (0)