Files

52 lines
1.4 KiB
Elixir
Raw Permalink Normal View History

2024-07-11 12:41:05 +02:00
defmodule Lti13.Users do
import Ecto.Query, warn: false
alias Claper.Repo
alias Lti13.Users.User
def create_user(attrs) do
%User{}
|> User.changeset(attrs)
|> Repo.insert()
end
2024-07-11 16:33:02 +02:00
def get_user_by_sub_and_registration_id(sub, registration_id) do
Repo.get_by(User, sub: sub, registration_id: registration_id)
2024-07-11 12:41:05 +02:00
end
2024-08-11 11:16:34 +02:00
def get_all_users_by_email(email) do
Repo.all(from u in User, where: u.email == ^email)
end
def remove_user(claper_user, registration_id) do
Repo.delete_all(
from u in User,
where: u.registration_id == ^registration_id and u.user_id == ^claper_user.id
)
end
2024-07-11 16:33:02 +02:00
def get_or_create_user(
%{
sub: sub,
email: email,
registration_id: registration_id
} = attrs
) do
case get_user_by_sub_and_registration_id(sub, registration_id) do
nil -> create_new_user(attrs, email, registration_id)
%User{} = user -> {:ok, user |> Repo.preload(:user)}
end
end
2024-07-11 12:41:05 +02:00
2024-07-11 16:33:02 +02:00
defp create_new_user(attrs, email, registration_id) do
with {:ok, claper_user} <- Claper.Accounts.get_user_by_email_or_create(email),
updated_attrs <-
Map.merge(attrs, %{user_id: claper_user.id, registration_id: registration_id}),
{:ok, user} <- create_user(updated_attrs) do
{:ok, user |> Repo.preload(:user)}
else
_ -> {:error, %{reason: :invalid_user, msg: "Invalid user"}}
2024-07-11 12:41:05 +02:00
end
end
end