PhoenixKit.Modules.Connections.Connection (phoenix_kit v1.7.38)

Copy Markdown View Source

Schema for two-way mutual connection relationships.

Represents a bidirectional relationship that requires acceptance from both parties. Similar to LinkedIn connections or Facebook friend requests.

Status Flow

  • pending - Request sent, awaiting response
  • accepted - Both parties have agreed to connect
  • rejected - Recipient declined the request

Fields

  • requester_id - User who initiated the connection request
  • recipient_id - User who received the request
  • status - Current status of the connection
  • requested_at - When the request was sent
  • responded_at - When the recipient responded (nil if pending)

Examples

# Pending connection request
%Connection{
  id: "018e3c4a-9f6b-7890-abcd-ef1234567890",
  requester_id: 1,
  recipient_id: 2,
  status: "pending",
  requested_at: ~N[2025-01-15 10:30:00],
  responded_at: nil
}

# Accepted connection
%Connection{
  id: "018e3c4a-9f6b-7890-abcd-ef1234567890",
  requester_id: 1,
  recipient_id: 2,
  status: "accepted",
  requested_at: ~N[2025-01-15 10:30:00],
  responded_at: ~N[2025-01-15 11:00:00]
}

Business Rules

  • Cannot connect with yourself
  • Cannot connect if blocked (either direction)
  • If A requests B while B has pending request to A → auto-accept both
  • Only one active connection per user pair

Summary

Functions

Returns whether this connection is accepted.

Changeset for creating a new connection request.

Returns whether this connection is pending.

Returns whether this connection is rejected.

Changeset for updating connection status (accept/reject).

Returns the list of valid statuses.

Types

status()

@type status() :: String.t()

t()

@type t() :: %PhoenixKit.Modules.Connections.Connection{
  __meta__: term(),
  id: UUIDv7.t() | nil,
  inserted_at: NaiveDateTime.t() | nil,
  recipient: PhoenixKit.Users.Auth.User.t() | Ecto.Association.NotLoaded.t(),
  recipient_id: integer(),
  recipient_uuid: term(),
  requested_at: NaiveDateTime.t(),
  requester: PhoenixKit.Users.Auth.User.t() | Ecto.Association.NotLoaded.t(),
  requester_id: integer(),
  requester_uuid: term(),
  responded_at: NaiveDateTime.t() | nil,
  status: status(),
  updated_at: NaiveDateTime.t() | nil
}

Functions

accepted?(arg1)

Returns whether this connection is accepted.

changeset(connection, attrs)

Changeset for creating a new connection request.

Required Fields

  • requester_id - The user sending the request
  • recipient_id - The user receiving the request

Validation Rules

  • Both user IDs are required
  • Cannot request connection with yourself
  • Status must be valid

pending?(arg1)

Returns whether this connection is pending.

rejected?(arg1)

Returns whether this connection is rejected.

status_changeset(connection, attrs)

Changeset for updating connection status (accept/reject).

statuses()

Returns the list of valid statuses.