31 lines
1.0 KiB
Elixir

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