implemented optional 'allow_registration' config, with first registered user being pre-confirmed Admin, registration unavailable after that point if allow_registration: :false
This commit is contained in:
parent
ea74a89078
commit
f27df8d676
22 changed files with 395 additions and 244 deletions
priv/repo
|
@ -14,141 +14,150 @@ alias Shift73k.Repo
|
|||
alias Shift73k.Accounts
|
||||
alias Shift73k.Accounts.User
|
||||
|
||||
############################################################################
|
||||
## INSERTING MOCK USER DATA
|
||||
|
||||
{:ok, _admin} =
|
||||
Accounts.register_user(%{
|
||||
email: "admin@company.com",
|
||||
password: "123456789abC",
|
||||
password_confirmation: "123456789abC",
|
||||
role: Accounts.registration_role()
|
||||
})
|
||||
if Mix.env() == :dev do
|
||||
|
||||
{:ok, _user_1} =
|
||||
Accounts.register_user(%{
|
||||
email: "user1@company.com",
|
||||
password: "123456789abC",
|
||||
password_confirmation: "123456789abC",
|
||||
role: Accounts.registration_role()
|
||||
})
|
||||
if System.get_env("ECTO_SEED_DB") do
|
||||
|
||||
{:ok, _user_2} =
|
||||
Accounts.register_user(%{
|
||||
email: "user2@company.com",
|
||||
password: "123456789abC",
|
||||
password_confirmation: "123456789abC",
|
||||
role: Accounts.registration_role()
|
||||
})
|
||||
############################################################################
|
||||
## INSERTING MOCK USER DATA
|
||||
|
||||
# if Mix.env() == :dev do
|
||||
this_path = Path.dirname(__ENV__.file)
|
||||
users_json = Path.join(this_path, "MOCK_DATA_users.json")
|
||||
{:ok, _admin} =
|
||||
Accounts.register_user(%{
|
||||
email: "admin@company.com",
|
||||
password: "123456789abC",
|
||||
password_confirmation: "123456789abC",
|
||||
role: Accounts.registration_role()
|
||||
})
|
||||
|
||||
count_to_take = 15
|
||||
{:ok, _user_1} =
|
||||
Accounts.register_user(%{
|
||||
email: "user1@company.com",
|
||||
password: "123456789abC",
|
||||
password_confirmation: "123456789abC",
|
||||
role: Accounts.registration_role()
|
||||
})
|
||||
|
||||
mock_users = users_json |> File.read!() |> Jason.decode!() |> Enum.take_random(count_to_take)
|
||||
{:ok, _user_2} =
|
||||
Accounts.register_user(%{
|
||||
email: "user2@company.com",
|
||||
password: "123456789abC",
|
||||
password_confirmation: "123456789abC",
|
||||
role: Accounts.registration_role()
|
||||
})
|
||||
|
||||
extra_mock_users = ~s([
|
||||
{"email":"adam@73k.us","password":"adamadamA1","role":"admin","inserted_at":"2018-12-14T01:01:01Z","confirmed_at":true},
|
||||
{"email":"kat@73k.us","password":"katkatA1","role":"manager","inserted_at":"2018-12-14T01:06:01Z","confirmed_at":true},
|
||||
{"email":"babka@73k.us","password":"Babka2020","role":"user","inserted_at":"2018-12-14T01:06:01Z","confirmed_at":false},
|
||||
{"email":"malcolm@73k.us","password":"Malc2018","role":"user","inserted_at":"2018-12-14T01:06:01Z","confirmed_at":false},
|
||||
{"email":"casio@73k.us","password":"Casio2011","role":"user","inserted_at":"2018-12-14T01:06:01Z","confirmed_at":false}
|
||||
])
|
||||
# if Mix.env() == :dev do
|
||||
this_path = Path.dirname(__ENV__.file)
|
||||
users_json = Path.join(this_path, "MOCK_DATA_users.json")
|
||||
|
||||
# for random week_start_at values
|
||||
[head | tail] = Shift73k.weekdays()
|
||||
week_starts = [head | Enum.drop(tail, 4)]
|
||||
count_to_take = 15
|
||||
|
||||
mock_users =
|
||||
extra_mock_users
|
||||
|> Jason.decode!()
|
||||
|> Stream.concat(mock_users)
|
||||
|> Enum.map(fn e ->
|
||||
add_dt = NaiveDateTime.from_iso8601!(e["inserted_at"])
|
||||
mock_users = users_json |> File.read!() |> Jason.decode!() |> Enum.take_random(count_to_take)
|
||||
|
||||
%{
|
||||
email: e["email"],
|
||||
role: String.to_existing_atom(e["role"]),
|
||||
hashed_password: Bcrypt.hash_pwd_salt(e["password"]),
|
||||
week_start_at: Enum.at(week_starts, Enum.random(0..2)),
|
||||
calendar_slug: Ecto.UUID.generate(),
|
||||
inserted_at: add_dt,
|
||||
updated_at: add_dt,
|
||||
confirmed_at: (e["confirmed_at"] && NaiveDateTime.add(add_dt, 300, :second)) || nil
|
||||
}
|
||||
end)
|
||||
extra_mock_users = ~s([
|
||||
{"email":"adam@73k.us","password":"adamadamA1","role":"admin","inserted_at":"2018-12-14T01:01:01Z","confirmed_at":true},
|
||||
{"email":"kat@73k.us","password":"katkatA1","role":"manager","inserted_at":"2018-12-14T01:06:01Z","confirmed_at":true},
|
||||
{"email":"babka@73k.us","password":"Babka2020","role":"user","inserted_at":"2018-12-14T01:06:01Z","confirmed_at":false},
|
||||
{"email":"malcolm@73k.us","password":"Malc2018","role":"user","inserted_at":"2018-12-14T01:06:01Z","confirmed_at":false},
|
||||
{"email":"casio@73k.us","password":"Casio2011","role":"user","inserted_at":"2018-12-14T01:06:01Z","confirmed_at":false}
|
||||
])
|
||||
|
||||
Repo.insert_all(User, mock_users)
|
||||
# end
|
||||
# for random week_start_at values
|
||||
[head | tail] = Shift73k.weekdays()
|
||||
week_starts = [head | Enum.drop(tail, 4)]
|
||||
|
||||
#####
|
||||
# shift tepmlates
|
||||
alias Shift73k.Shifts.Templates.ShiftTemplate
|
||||
mock_users =
|
||||
extra_mock_users
|
||||
|> Jason.decode!()
|
||||
|> Stream.concat(mock_users)
|
||||
|> Enum.map(fn e ->
|
||||
add_dt = NaiveDateTime.from_iso8601!(e["inserted_at"])
|
||||
|
||||
shifts_json = Path.join(this_path, "MOCK_DATA_shift-templates.json")
|
||||
mock_shifts = shifts_json |> File.read!() |> Jason.decode!()
|
||||
%{
|
||||
email: e["email"],
|
||||
role: String.to_existing_atom(e["role"]),
|
||||
hashed_password: Bcrypt.hash_pwd_salt(e["password"]),
|
||||
week_start_at: Enum.at(week_starts, Enum.random(0..2)),
|
||||
calendar_slug: Ecto.UUID.generate(),
|
||||
inserted_at: add_dt,
|
||||
updated_at: add_dt,
|
||||
confirmed_at: (e["confirmed_at"] && NaiveDateTime.add(add_dt, 300, :second)) || nil
|
||||
}
|
||||
end)
|
||||
|
||||
Repo.insert_all(User, mock_users)
|
||||
# end
|
||||
|
||||
#####
|
||||
# shift tepmlates
|
||||
alias Shift73k.Shifts.Templates.ShiftTemplate
|
||||
|
||||
shifts_json = Path.join(this_path, "MOCK_DATA_shift-templates.json")
|
||||
mock_shifts = shifts_json |> File.read!() |> Jason.decode!()
|
||||
|
||||
time_from_mock = fn mock_time ->
|
||||
case String.length(mock_time) do
|
||||
4 -> Time.from_iso8601!("T0#{mock_time}:00")
|
||||
5 -> Time.from_iso8601!("T#{mock_time}:00")
|
||||
end
|
||||
end
|
||||
|
||||
seconds_day = 86_400
|
||||
seconds_days_14 = seconds_day * 14
|
||||
seconds_half_day = Integer.floor_div(seconds_day, 2)
|
||||
|
||||
for user <- Accounts.list_users() do
|
||||
user_shifts =
|
||||
mock_shifts
|
||||
|> Enum.take_random(:rand.uniform(15) + 5)
|
||||
|> Enum.map(fn e ->
|
||||
seconds_to_add = :rand.uniform(seconds_days_14) + seconds_half_day
|
||||
add_dt = NaiveDateTime.add(user.inserted_at, seconds_to_add)
|
||||
time_start = time_from_mock.(e["time_start"])
|
||||
shift_len_min = e["length_minutes"] || 0
|
||||
shift_length = e["length_hours"] * 60 * 60 + shift_len_min * 60
|
||||
time_end = Time.add(time_start, shift_length) |> Time.truncate(:second)
|
||||
|
||||
%{
|
||||
subject: e["subject"],
|
||||
description: e["description"],
|
||||
location: e["location"],
|
||||
time_zone: Tzdata.zone_list() |> Enum.random(),
|
||||
time_start: time_start,
|
||||
time_end: time_end,
|
||||
user_id: user.id,
|
||||
inserted_at: add_dt,
|
||||
updated_at: add_dt
|
||||
}
|
||||
end)
|
||||
|
||||
Repo.insert_all(ShiftTemplate, user_shifts)
|
||||
end
|
||||
|
||||
#####
|
||||
# insert shifts for each user?
|
||||
alias Shift73k.Shifts
|
||||
alias Shift73k.Shifts.Templates
|
||||
|
||||
for user <- Accounts.list_users() do
|
||||
# build a date range for the time from 120 days ago to 120 days from now
|
||||
today = Date.utc_today()
|
||||
date_range = Date.range(Date.add(today, -120), Date.add(today, 120))
|
||||
|
||||
# get 3 random shift templates for user
|
||||
st_list = Templates.list_shift_templates_by_user(user.id) |> Enum.take_random(3)
|
||||
|
||||
for st <- st_list do
|
||||
days_to_schedule = Enum.take_random(date_range, 47)
|
||||
shift_data = ShiftTemplate.attrs(st)
|
||||
|
||||
days_to_schedule
|
||||
|> Stream.map(&Map.put(shift_data, :date, &1))
|
||||
|> Enum.map(&Repo.timestamp/1)
|
||||
|> Shifts.create_multiple()
|
||||
end
|
||||
end
|
||||
|
||||
time_from_mock = fn mock_time ->
|
||||
case String.length(mock_time) do
|
||||
4 -> Time.from_iso8601!("T0#{mock_time}:00")
|
||||
5 -> Time.from_iso8601!("T#{mock_time}:00")
|
||||
end
|
||||
end
|
||||
|
||||
seconds_day = 86_400
|
||||
seconds_days_14 = seconds_day * 14
|
||||
seconds_half_day = Integer.floor_div(seconds_day, 2)
|
||||
|
||||
for user <- Accounts.list_users() do
|
||||
user_shifts =
|
||||
mock_shifts
|
||||
|> Enum.take_random(:rand.uniform(15) + 5)
|
||||
|> Enum.map(fn e ->
|
||||
seconds_to_add = :rand.uniform(seconds_days_14) + seconds_half_day
|
||||
add_dt = NaiveDateTime.add(user.inserted_at, seconds_to_add)
|
||||
time_start = time_from_mock.(e["time_start"])
|
||||
shift_len_min = e["length_minutes"] || 0
|
||||
shift_length = e["length_hours"] * 60 * 60 + shift_len_min * 60
|
||||
time_end = Time.add(time_start, shift_length) |> Time.truncate(:second)
|
||||
|
||||
%{
|
||||
subject: e["subject"],
|
||||
description: e["description"],
|
||||
location: e["location"],
|
||||
time_zone: Tzdata.zone_list() |> Enum.random(),
|
||||
time_start: time_start,
|
||||
time_end: time_end,
|
||||
user_id: user.id,
|
||||
inserted_at: add_dt,
|
||||
updated_at: add_dt
|
||||
}
|
||||
end)
|
||||
|
||||
Repo.insert_all(ShiftTemplate, user_shifts)
|
||||
end
|
||||
|
||||
#####
|
||||
# insert shifts for each user?
|
||||
alias Shift73k.Shifts
|
||||
alias Shift73k.Shifts.Templates
|
||||
|
||||
for user <- Accounts.list_users() do
|
||||
# build a date range for the time from 120 days ago to 120 days from now
|
||||
today = Date.utc_today()
|
||||
date_range = Date.range(Date.add(today, -120), Date.add(today, 120))
|
||||
|
||||
# get 3 random shift templates for user
|
||||
st_list = Templates.list_shift_templates_by_user(user.id) |> Enum.take_random(3)
|
||||
|
||||
for st <- st_list do
|
||||
days_to_schedule = Enum.take_random(date_range, 47)
|
||||
shift_data = ShiftTemplate.attrs(st)
|
||||
|
||||
days_to_schedule
|
||||
|> Stream.map(&Map.put(shift_data, :date, &1))
|
||||
|> Enum.map(&Repo.timestamp/1)
|
||||
|> Shifts.create_multiple()
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue