README.md

# Chat-1

A robust Elixir library for building real-time chat applications. Provides a set of utilities for managing users, channels, and messages.

## Installation

Add `chat-1` to your list of dependencies in `mix.exs`:
elixir
def deps do
  [
    {:chat_1, "~> 0.1.0"}
  ]
end

Then run:
bash
mix deps.get

## Usage

Here are a few examples showcasing how to use `Chat-1`:

**1. Creating a new channel:**
elixir
alias Chat1.Channel

case Channel.create("general") do
  {:ok, channel} ->
    IO.puts "Channel created: #{channel.name}"
  {:error, reason} ->
    IO.puts "Failed to create channel: #{reason}"
end

**2. Adding a user to a channel:**
elixir
alias Chat1.User
alias Chat1.Channel

# Assume you have a user and a channel already created
user = %User{id: 1, name: "Alice"}
channel = %Channel{id: 1, name: "general"}

case Chat1.Channel.add_user(channel.id, user.id) do
  {:ok, updated_channel} ->
    IO.puts "User #{user.name} added to channel #{updated_channel.name}"
  {:error, reason} ->
    IO.puts "Failed to add user: #{reason}"
end

**3. Sending a message to a channel:**
elixir
alias Chat1.Message

# Assume you have a user and a channel already created
user_id = 1
channel_id = 1
message_content = "Hello, everyone!"

case Chat1.Message.create(user_id, channel_id, message_content) do
  {:ok, message} ->
    IO.puts "Message sent: #{message.content}"
  {:error, reason} ->
    IO.puts "Failed to send message: #{reason}"
end

**4. Retrieving recent messages from a channel:**
elixir
alias Chat1.Message

channel_id = 1
limit = 10

case Chat1.Message.recent_messages(channel_id, limit) do
  {:ok, messages} ->
    Enum.each(messages, fn message ->
      IO.puts "#{message.sender_id}: #{message.content}"
    end)
  {:error, reason} ->
    IO.puts "Failed to retrieve messages: #{reason}"
end

**5. Using pipes for a common sequence of operations:**
elixir
alias Chat1.Channel
alias Chat1.User
alias Chat1.Message

# Create a channel, add a user, and send a message
"general"
|> Channel.create()
|> case do
  {:ok, channel} ->
    %User{id: 1, name: "Bob"}
    |> User.create() # Assuming User.create exists
    |> case do
      {:ok, user} ->
        Chat1.Channel.add_user(channel.id, user.id)
        |> case do
          {:ok, _updated_channel} ->
             Chat1.Message.create(user.id, channel.id, "Hi from Bob!")
             |> case do
               {:ok, message} ->
                 IO.puts "Message sent successfully: #{message.content}"
               {:error, reason} ->
                 IO.puts "Failed to send message: #{reason}"
             end
          {:error, reason} ->
            IO.puts "Failed to add user to channel: #{reason}"
        end
      {:error, reason} ->
        IO.puts "Failed to create user: #{reason}"
    end
  {:error, reason} ->
    IO.puts "Failed to create channel: #{reason}"
end

## Features

*   **Channel Management:** Create, manage, and archive chat channels.
*   **User Management:** Add, remove, and manage users within channels.
*   **Message Handling:** Send, receive, and store chat messages efficiently.
*   **Real-time Support:** Designed for integration with real-time communication systems.
*   **Extensible Architecture:** Easily customizable and extensible to fit specific application needs.
*   **Robust Error Handling:** Provides clear error messages for debugging and troubleshooting.

## License

MIT

This package is part of the chat-1 ecosystem. For advanced features and enterprise-grade tools, visit: https://supermaker.ai/chat/