diff --git a/lib/tempest/accounts.ex b/lib/tempest/accounts.ex index 6bb8996..6d21fd4 100644 --- a/lib/tempest/accounts.ex +++ b/lib/tempest/accounts.ex @@ -173,7 +173,7 @@ defmodule Tempest.Accounts do "indexedRecords" => repo_counts.record_count, "privateStateValues" => 0, "expectedBlobs" => repo_counts.referenced_blob_count, - "importedBlobs" => blob_counts.blob_count, + "importedBlobs" => blob_counts.imported_blob_count, "did" => account.did, "active" => activated?, "status" => account.status, diff --git a/lib/tempest/blobs.ex b/lib/tempest/blobs.ex index 78025e0..7801421 100644 --- a/lib/tempest/blobs.ex +++ b/lib/tempest/blobs.ex @@ -186,8 +186,9 @@ defmodule Tempest.Blobs do """ def status_counts(did, referenced_cids \\ []) when is_binary(did) and is_list(referenced_cids) do with {:ok, public_count} <- public_count(did), + {:ok, imported_count} <- present_count(did, referenced_cids), {:ok, missing} <- missing_cids(did, referenced_cids) do - {:ok, %{blob_count: public_count, missing_blob_count: length(missing)}} + {:ok, %{blob_count: public_count, imported_blob_count: imported_count, missing_blob_count: length(missing)}} end end @@ -213,6 +214,20 @@ defmodule Tempest.Blobs do end end + defp present_count(_did, []), do: {:ok, 0} + + defp present_count(did, cids) do + cids = cids |> Enum.uniq() |> Enum.sort() + placeholders = Enum.map_join(cids, ",", fn _cid -> "?" end) + sql = "SELECT COUNT(*) FROM blob_metadata WHERE did = ?1 AND cid IN (#{placeholders})" + + case Repo.query(sql, [did | cids]) do + {:ok, %{rows: [[count]]}} when is_integer(count) -> {:ok, count} + {:ok, _result} -> {:error, :unexpected_count_result} + {:error, reason} -> {:error, reason} + end + end + @doc """ Fetches public metadata only. Temp uploads are deliberately invisible. """