# `PhoenixKit.Modules.Connections.Connection`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.62/lib/modules/connections/connection.ex#L1)

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_uuid` - UUID of the user who initiated the connection request
- `recipient_uuid` - UUID of the 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{
      uuid: "018e3c4a-9f6b-7890-abcd-ef1234567890",
      requester_uuid: "019abc12-3456-7890-abcd-ef1234567890",
      recipient_uuid: "019abc12-9876-5432-abcd-ef1234567890",
      status: "pending",
      requested_at: ~N[2025-01-15 10:30:00],
      responded_at: nil
    }

    # Accepted connection
    %Connection{
      uuid: "018e3c4a-9f6b-7890-abcd-ef1234567890",
      requester_uuid: "019abc12-3456-7890-abcd-ef1234567890",
      recipient_uuid: "019abc12-9876-5432-abcd-ef1234567890",
      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

# `status`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.62/lib/modules/connections/connection.ex#L60)

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

# `t`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.62/lib/modules/connections/connection.ex#L62)

```elixir
@type t() :: %PhoenixKit.Modules.Connections.Connection{
  __meta__: term(),
  inserted_at: DateTime.t() | nil,
  recipient: PhoenixKit.Users.Auth.User.t() | Ecto.Association.NotLoaded.t(),
  recipient_uuid: UUIDv7.t(),
  requested_at: DateTime.t(),
  requester: PhoenixKit.Users.Auth.User.t() | Ecto.Association.NotLoaded.t(),
  requester_uuid: UUIDv7.t(),
  responded_at: DateTime.t() | nil,
  status: status(),
  updated_at: DateTime.t() | nil,
  uuid: UUIDv7.t() | nil
}
```

# `accepted?`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.62/lib/modules/connections/connection.ex#L186)

Returns whether this connection is accepted.

# `changeset`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.62/lib/modules/connections/connection.ex#L112)

Changeset for creating a new connection request.

## Required Fields

- `requester_uuid` - UUID of the user sending the request
- `recipient_uuid` - UUID of the user receiving the request

## Validation Rules

- Both user UUIDs are required
- Cannot request connection with yourself
- Status must be valid

# `pending?`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.62/lib/modules/connections/connection.ex#L180)

Returns whether this connection is pending.

# `rejected?`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.62/lib/modules/connections/connection.ex#L192)

Returns whether this connection is rejected.

# `status_changeset`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.62/lib/modules/connections/connection.ex#L132)

Changeset for updating connection status (accept/reject).

# `statuses`
[🔗](https://github.com/BeamLabEU/phoenix_kit/blob/v1.7.62/lib/modules/connections/connection.ex#L96)

Returns the list of valid statuses.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
