+2
-11
lib/bluesky_hose.ex
+2
-11
lib/bluesky_hose.ex
···
132
132
133
133
# Get a demo user for posting bookmarks
134
134
defp get_or_create_demo_user do
135
-
case Accounts.get_user_by_username("bluesky_bot") do
136
-
nil ->
137
-
{:ok, user} = Accounts.create_user(%{
138
-
username: "bluesky_bot",
139
-
email: "bluesky_bot@example.com",
140
-
display_name: "Bluesky Bot"
141
-
})
142
-
user
143
-
user ->
144
-
user
145
-
end
135
+
alias Bookmarker.Accounts.DemoUsers
136
+
DemoUsers.get_random_demo_user()
146
137
end
147
138
148
139
def handle_disconnect(%{reason: {:local, reason}}, state) do
+75
lib/bookmarker/accounts/demo_users.ex
+75
lib/bookmarker/accounts/demo_users.ex
···
1
+
defmodule Bookmarker.Accounts.DemoUsers do
2
+
@moduledoc """
3
+
Module for handling demo user creation and selection.
4
+
"""
5
+
6
+
alias Bookmarker.Accounts
7
+
alias Bookmarker.Accounts.User
8
+
alias Bookmarker.Repo
9
+
import Ecto.Query
10
+
11
+
@demo_user_count 100
12
+
@demo_user_prefix "demo_user_"
13
+
14
+
@doc """
15
+
Returns a random demo user from the pool of demo users.
16
+
If demo users don't exist yet, creates them first.
17
+
"""
18
+
def get_random_demo_user do
19
+
ensure_demo_users_exist()
20
+
21
+
User
22
+
|> where([u], like(u.username, ^"#{@demo_user_prefix}%"))
23
+
|> Repo.all()
24
+
|> Enum.random()
25
+
end
26
+
27
+
@doc """
28
+
Creates all demo users if they don't exist already.
29
+
"""
30
+
def ensure_demo_users_exist do
31
+
# Check if we already have demo users
32
+
demo_user_count =
33
+
User
34
+
|> where([u], like(u.username, ^"#{@demo_user_prefix}%"))
35
+
|> Repo.aggregate(:count, :id)
36
+
37
+
if demo_user_count < @demo_user_count do
38
+
# Create the remaining demo users
39
+
Enum.each(demo_user_count..(@demo_user_count - 1), fn index ->
40
+
username = "#{@demo_user_prefix}#{index + 1}"
41
+
42
+
case Accounts.get_user_by_username(username) do
43
+
nil ->
44
+
{:ok, _user} = Accounts.create_user(%{
45
+
username: username,
46
+
email: "#{username}@example.com",
47
+
display_name: generate_display_name(index)
48
+
})
49
+
_user ->
50
+
:ok
51
+
end
52
+
end)
53
+
end
54
+
end
55
+
56
+
# Generate a realistic display name
57
+
defp generate_display_name(index) do
58
+
first_names = [
59
+
"Alex", "Jamie", "Jordan", "Taylor", "Casey", "Riley", "Avery", "Quinn",
60
+
"Morgan", "Reese", "Charlie", "Blake", "Parker", "Dakota", "Peyton", "Elliot",
61
+
"Rowan", "Cameron", "Sam", "Ashley", "Robin", "Skyler", "Sage", "Jesse"
62
+
]
63
+
64
+
last_names = [
65
+
"Smith", "Jones", "Brown", "Johnson", "Williams", "Davis", "Miller", "Wilson",
66
+
"Taylor", "Moore", "Anderson", "Thomas", "Jackson", "White", "Harris", "Martin",
67
+
"Thompson", "Garcia", "Martinez", "Robinson", "Clark", "Rodriguez", "Lewis", "Lee"
68
+
]
69
+
70
+
first_name = Enum.at(first_names, rem(index, length(first_names)))
71
+
last_name = Enum.at(last_names, rem(div(index, length(first_names)), length(last_names)))
72
+
73
+
"#{first_name} #{last_name}"
74
+
end
75
+
end
+1
-1
lib/bookmarker/bookmarks/bookmark.ex
+1
-1
lib/bookmarker/bookmarks/bookmark.ex
···
21
21
bookmark
22
22
|> cast(attrs, [:url, :title, :description, :user_id])
23
23
|> validate_required([:url, :title, :user_id])
24
-
|> validate_length(:title, min: 1, max: 255)
24
+
|> validate_length(:title, min: 1)
25
25
|> validate_length(:url, min: 5, max: 2048)
26
26
|> foreign_key_constraint(:user_id)
27
27
|> put_assoc(:tags, tags)
+2
-11
lib/bookmarker_web/live/bookmark_live/new.ex
+2
-11
lib/bookmarker_web/live/bookmark_live/new.ex
···
56
56
end
57
57
58
58
defp get_or_create_demo_user do
59
-
case Accounts.get_user_by_username("demo_user") do
60
-
nil ->
61
-
{:ok, user} = Accounts.create_user(%{
62
-
username: "demo_user",
63
-
email: "demo@example.com",
64
-
display_name: "Demo User"
65
-
})
66
-
user
67
-
user ->
68
-
user
69
-
end
59
+
alias Bookmarker.Accounts.DemoUsers
60
+
DemoUsers.get_random_demo_user()
70
61
end
71
62
end
+2
-11
lib/bookmarker_web/live/bookmark_live/show.ex
+2
-11
lib/bookmarker_web/live/bookmark_live/show.ex
···
66
66
end
67
67
68
68
defp get_or_create_demo_user do
69
-
case Accounts.get_user_by_username("demo_user") do
70
-
nil ->
71
-
{:ok, user} = Accounts.create_user(%{
72
-
username: "demo_user",
73
-
email: "demo@example.com",
74
-
display_name: "Demo User"
75
-
})
76
-
user
77
-
user ->
78
-
user
79
-
end
69
+
alias Bookmarker.Accounts.DemoUsers
70
+
DemoUsers.get_random_demo_user()
80
71
end
81
72
end
+2
-11
lib/bookmarker_web/live/home_live.ex
+2
-11
lib/bookmarker_web/live/home_live.ex
···
151
151
end
152
152
153
153
defp get_or_create_demo_user do
154
-
case Accounts.get_user_by_username("demo_user") do
155
-
nil ->
156
-
{:ok, user} = Accounts.create_user(%{
157
-
username: "demo_user",
158
-
email: "demo@example.com",
159
-
display_name: "Demo User"
160
-
})
161
-
user
162
-
user ->
163
-
user
164
-
end
154
+
alias Bookmarker.Accounts.DemoUsers
155
+
DemoUsers.get_random_demo_user()
165
156
end
166
157
end
+2
-11
lib/bookmarker_web/live/tag_live/show.ex
+2
-11
lib/bookmarker_web/live/tag_live/show.ex
···
74
74
end
75
75
76
76
defp get_or_create_demo_user do
77
-
case Accounts.get_user_by_username("demo_user") do
78
-
nil ->
79
-
{:ok, user} = Accounts.create_user(%{
80
-
username: "demo_user",
81
-
email: "demo@example.com",
82
-
display_name: "Demo User"
83
-
})
84
-
user
85
-
user ->
86
-
user
87
-
end
77
+
alias Bookmarker.Accounts.DemoUsers
78
+
DemoUsers.get_random_demo_user()
88
79
end
89
80
end