Schema for consent log entries.
Tracks user consent for cookies and data processing, supporting GDPR, CCPA, and other privacy regulations.
Fields
user_id- The ID of the logged-in user (nil for anonymous)session_id- Session identifier for anonymous trackingconsent_type- Type of consent (necessary, analytics, marketing, preferences)consent_given- Whether consent was givenconsent_version- Version of privacy/cookie policyip_address- IP address when consent was recordeduser_agent_hash- SHA256 hash of user agent for fingerprintingmetadata- Additional metadata about the consent
Consent Types
necessary- Essential cookies (always required)analytics- Performance and analytics cookiesmarketing- Advertising and targeting cookiespreferences- Functionality and preference cookies
Usage
# Log consent for anonymous user
ConsentLog.create(%{
session_id: "abc123",
consent_type: "analytics",
consent_given: true,
consent_version: "1.0",
ip_address: "192.168.1.1"
})
# Log consent for logged-in user
ConsentLog.create(%{
user_id: 123,
consent_type: "marketing",
consent_given: false
})
# Get current consent status
ConsentLog.get_consent_status(user_id: 123)
ConsentLog.get_consent_status(session_id: "abc123")
Summary
Functions
Creates a changeset for consent log entry.
Returns valid consent types.
Create a new consent log entry.
Gets a single consent log by ID or UUID.
Same as get_consent_log/1, but raises Ecto.NoResultsError if not found.
Get consent status for a user or session.
Hash user agent string for privacy-focused storage.
Log consent for multiple types at once.
Types
@type t() :: %PhoenixKit.Modules.Legal.ConsentLog{ __meta__: term(), consent_given: boolean(), consent_type: String.t(), consent_version: String.t() | nil, id: integer() | nil, inserted_at: DateTime.t() | nil, ip_address: String.t() | nil, metadata: map() | nil, session_id: String.t() | nil, updated_at: DateTime.t() | nil, user_agent_hash: String.t() | nil, user_id: integer() | nil, user_uuid: Ecto.UUID.t() | nil, uuid: Ecto.UUID.t() | nil }
Functions
@spec changeset(t(), map()) :: Ecto.Changeset.t()
Creates a changeset for consent log entry.
Required Fields
:consent_type- Type of consent
Optional Fields
:user_id- User ID (for logged-in users):session_id- Session ID (for anonymous users):consent_given- Whether consent was given (default: false):consent_version- Version of policy:ip_address- IP address:user_agent_hash- Hashed user agent:metadata- Additional metadata
@spec consent_types() :: [String.t()]
Returns valid consent types.
@spec create(map()) :: {:ok, t()} | {:error, Ecto.Changeset.t()}
Create a new consent log entry.
Gets a single consent log by ID or UUID.
Accepts integer ID, UUID string, or string-formatted integer.
Examples
iex> ConsentLog.get_consent_log(123)
%ConsentLog{}
iex> ConsentLog.get_consent_log("550e8400-e29b-41d4-a716-446655440000")
%ConsentLog{}
iex> ConsentLog.get_consent_log(999)
nil
Same as get_consent_log/1, but raises Ecto.NoResultsError if not found.
Examples
iex> ConsentLog.get_consent_log!(123)
%ConsentLog{}
iex> ConsentLog.get_consent_log!(999)
** (Ecto.NoResultsError)
Get consent status for a user or session.
Returns a map of consent_type => consent_given for the most recent entries.
Options
:user_id- Get consent for logged-in user:session_id- Get consent for anonymous session
Hash user agent string for privacy-focused storage.
Log consent for multiple types at once.
Parameters
consents- Map of consent_type => consent_givenopts- Options including :user_id, :session_id, :ip_address, etc.
Example
ConsentLog.log_consents(
%{"analytics" => true, "marketing" => false},
user_id: 123,
consent_version: "1.0"
)