defmodule MessageServer.RemoteHandler do require Logger @spec handle_remote_message(map()) :: :ok | {:error, String.t()} def handle_remote_message(%{from: from, to: to, message: message}) do with {:ok, to_server} <- extract_server_id(to), :ok <- validate_recipient_ownership(to_server) do MessageServer.Storage.append_message(to, from, message) end end @spec extract_server_id(String.t()) :: {:ok, String.t()} | {:error, String.t()} defp extract_server_id(user_id) do case String.split(user_id, "-", parts: 2) do [server_id, _user_part] -> {:ok, server_id} _ -> {:error, "Invalid user ID format: #{user_id}"} end end @spec validate_recipient_ownership(String.t()) :: :ok | {:error, String.t()} defp validate_recipient_ownership(recipient_server) do local_server = MessageServer.ServerRegistry.get_server_id() if recipient_server == local_server do :ok else {:error, "Cannot deliver messages to users from other servers"} end end end