Current section

Files

Jump to
sql_membership_provider lib sql_membership_provider user.ex
Raw

lib/sql_membership_provider/user.ex

defmodule SqlMembershipProvider.User do
@moduledoc """
Struct for representing a user.
"""
import SqlMembershipProvider.TdsUtils
defstruct [
:application_id,
:is_anonymous,
:last_activity_date,
:lowered_user_name,
:mobile_alias,
:user_id,
:user_name
]
@type t() :: %SqlMembershipProvider.User{
application_id: String.t(),
is_anonymous: boolean(),
last_activity_date: tuple(),
lowered_user_name: String.t(),
mobile_alias: String.t() | nil,
user_id: String.t(),
user_name: String.t()
}
@doc """
Fetch a user by case-insensitive username.
"""
@spec find_by_user_name(atom() | pid(), String.t()) :: SqlMembershipProvider.User.t() | nil
def find_by_user_name(pid, user_name)
when (is_atom(pid) or is_pid(pid)) and is_binary(user_name) do
Tds.query!(
pid,
"SELECT TOP 1
ApplicationId as application_id,
IsAnonymous as is_anonymous,
LastActivityDate as last_activity_date,
LoweredUserName as lowered_user_name,
MobileAlias as mobile_alias,
UserId as user_id,
UserName as user_name
FROM aspnet_Users
WHERE UserName = @user_name",
[%Tds.Parameter{name: "@user_name", value: String.downcase(user_name)}]
)
|> result_to_map()
|> stringify_uuids(["application_id", "user_id"])
|> to_struct(__MODULE__)
|> List.first()
end
end