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 responseaccepted- Both parties have agreed to connectrejected- Recipient declined the request
Fields
requester_id- User who initiated the connection requestrecipient_id- User who received the requeststatus- Current status of the connectionrequested_at- When the request was sentresponded_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
@type status() :: String.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
Returns whether this connection is accepted.
Changeset for creating a new connection request.
Required Fields
requester_id- The user sending the requestrecipient_id- The user receiving the request
Validation Rules
- Both user IDs are required
- Cannot request connection with yourself
- Status must be valid
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.