Current section
Files
Jump to
Current section
Files
lib/sql_membership_provider/user.ex
defmodule SqlMembershipProvider.User do
@moduledoc """
Struct for representing a user.
"""
use TypedEctoSchema
import Ecto.Query, only: [from: 2]
@primary_key {:user_id, :binary_id, autogenerate: true, null: false}
@field_source_mapper fn name -> name |> Atom.to_string() |> Macro.camelize() end
typed_schema "aspnet_Users" do
field(:is_anonymous, :boolean, null: false)
field(:last_activity_date, :utc_datetime, null: false)
field(:lowered_user_name, :string, null: false)
field(:mobile_alias, :string)
field(:user_name, :string, null: false)
belongs_to(:application, SqlMembershipProvider.Application,
references: :application_id,
type: :binary_id
)
has_one(:profile, SqlMembershipProvider.Profile, foreign_key: :user_id)
has_one(:membership, SqlMembershipProvider.Membership, foreign_key: :user_id)
many_to_many(:roles, SqlMembershipProvider.Role,
join_keys: [UserId: :user_id, RoleId: :role_id],
join_through: "aspnet_UsersInRoles"
)
end
@doc """
Fetch a user by user ID.
"""
@spec find_by_user_id(String.t()) :: Ecto.Query.t()
def find_by_user_id(user_id) when is_binary(user_id) do
from(u in SqlMembershipProvider.User,
where: u.user_id == ^user_id,
preload: [:application, :membership, :profile, :roles]
)
end
@doc """
Fetch a user by case-insensitive username.
"""
@deprecated "User find_by_user_name/2 instead"
@spec find_by_user_name(String.t()) :: Ecto.Query.t()
def find_by_user_name(user_name) when is_binary(user_name) do
lowered_user_name = String.downcase(user_name)
from(u in SqlMembershipProvider.User,
where: u.user_name == ^lowered_user_name,
preload: [:application, :membership, :profile, :roles]
)
end
@doc """
Fetch a user by case-insensitive username and case-insensitive application name.
"""
@since "0.3.1"
@spec find_by_user_name(String.t(), String.t()) :: Ecto.Query.t()
def find_by_user_name(user_name, application_name)
when is_binary(user_name) and is_binary(application_name) do
lowered_user_name = String.downcase(user_name)
lowered_application_name = String.downcase(application_name)
from(u in SqlMembershipProvider.User,
join: a in assoc(u, :application),
where: u.lowered_user_name == ^lowered_user_name,
where: a.lowered_application_name == ^lowered_application_name,
preload: [:application, :membership, :profile, :roles]
)
end
end