Quick Start Guide

View Source

Get started with Flowfull Elixir client in 5 minutes!

Installation

Add to your mix.exs:

def deps do
  [
    {:flowfull, "~> 0.1.0"}
  ]
end

Run:

mix deps.get

Basic Usage

1. Create a Client

client = Flowfull.new("https://api.example.com")

2. Make HTTP Requests

# GET request
{:ok, response} = Flowfull.get(client, "/users")

# POST request
{:ok, response} = Flowfull.post(client, "/users", %{
  name: "John Doe",
  email: "john@example.com"
})

# PUT request
{:ok, response} = Flowfull.put(client, "/users/123", %{
  name: "Jane Doe"
})

# DELETE request
{:ok, response} = Flowfull.delete(client, "/users/123")

3. Use Query Builder

alias Flowfull.Operators

{:ok, users} = 
  Flowfull.query(client, "/users")
  |> Flowfull.Query.where("age", Operators.gte(18))
  |> Flowfull.Query.where("status", Operators.eq("active"))
  |> Flowfull.Query.sort("created_at", :desc)
  |> Flowfull.Query.page(1)
  |> Flowfull.Query.limit(10)
  |> Flowfull.Query.execute()

4. Authentication

# Login
{:ok, result} = Flowfull.Auth.login(client, %{
  email: "user@example.com",
  password: "password123"
})

# Session is automatically stored
# Now you can make authenticated requests

# Get current user
{:ok, user} = Flowfull.Auth.me(client)

# Logout
{:ok, _} = Flowfull.Auth.logout(client)

5. Advanced Configuration

# With custom options
client = Flowfull.new("https://api.example.com",
  timeout: 60_000,
  headers: %{"X-API-Key" => "your-api-key"},
  retry_attempts: 5,
  retry_exponential: true,
  storage: Flowfull.Storage.File.new(".sessions")
)

# With session ID
client = Flowfull.new("https://api.example.com",
  session_id: "your-session-id"
)

# With session function
client = Flowfull.new("https://api.example.com",
  get_session_id: fn -> 
    {:ok, System.get_env("SESSION_ID")}
  end
)

Phoenix Integration

WebSocket Authentication

defmodule MyAppWeb.UserSocket do
  use Phoenix.Socket

  def connect(%{"session_id" => session_id}, socket, _connect_info) do
    client = Flowfull.new("https://api.example.com")

    case Flowfull.Phoenix.validate_socket_session(client, session_id) do
      {:ok, user} ->
        {:ok, assign(socket, :user, user)}

      {:error, _} ->
        :error
    end
  end
end

LiveView Authentication

defmodule MyAppWeb.DashboardLive do
  use MyAppWeb, :live_view

  def mount(_params, %{"session_id" => session_id}, socket) do
    client = Flowfull.new("https://api.example.com")

    case Flowfull.Phoenix.validate_liveview_session(client, session_id) do
      {:ok, user} ->
        {:ok, assign(socket, :current_user, user)}

      {:error, _} ->
        {:ok, redirect(socket, to: "/login")}
    end
  end
end

Complete Example

defmodule MyApp.FlowfullExample do
  alias Flowfull.Operators

  def run do
    # Create client
    client = Flowfull.new("https://api.example.com")

    # Login
    {:ok, result} = Flowfull.Auth.login(client, %{
      email: "user@example.com",
      password: "password123"
    })

    IO.puts("Logged in as: #{result.user["name"]}")

    # Query users
    {:ok, response} = 
      Flowfull.query(client, "/users")
      |> Flowfull.Query.where("age", Operators.gte(18))
      |> Flowfull.Query.where("status", Operators.eq("active"))
      |> Flowfull.Query.sort("created_at", :desc)
      |> Flowfull.Query.limit(10)
      |> Flowfull.Query.execute()

    IO.inspect(response.data, label: "Users")

    # Logout
    {:ok, _} = Flowfull.Auth.logout(client)
    IO.puts("Logged out successfully")
  end
end

Next Steps

Need Help?