read :get_with_media do
get? true
multitenancy :bypass
description "Gets a single media category with paginated media"
argument :media_limit, :integer do
allow_nil? true
default 20
constraints min: 1, max: 100
end
argument :media_offset, :integer do
allow_nil? true
default 0
constraints min: 0
end
argument :site_id, :uuid do
allow_nil? true
description "Optional site_id to filter by (only for master users)"
end
prepare fn query, context ->
tenant = context.tenant
site_id_arg = Ash.Query.get_argument(query, :site_id)
media_limit = Ash.Query.get_argument(query, :media_limit)
media_offset = Ash.Query.get_argument(query, :media_offset)
filtered_query =
cond do
not is_nil(tenant) ->
Ash.Query.filter(query, site_id == ^tenant)
not is_nil(site_id_arg) ->
Ash.Query.filter(query, site_id == ^site_id_arg)
true ->
query
end
paginated_media =
MishkaCms.Runtime.Media
|> Ash.Query.for_read(:read)
|> Ash.Query.limit(media_limit)
|> Ash.Query.offset(media_offset)
|> Ash.Query.sort(inserted_at: :desc)
filtered_query
|> Ash.Query.load(media: paginated_media)
end
end
read :get_with_media do
get? true
multitenancy :bypass
description "Gets a single media category with paginated media"
argument :media_limit, :integer do
allow_nil? true
default 20
constraints min: 1, max: 100
end
argument :media_offset, :integer do
allow_nil? true
default 0
constraints min: 0
end
argument :site_id, :uuid do
allow_nil? true
description "Optional site_id to filter by (only for master users)"
end
prepare fn query, context ->
tenant = context.tenant
site_id_arg = Ash.Query.get_argument(query, :site_id)
media_limit = Ash.Query.get_argument(query, :media_limit)
media_offset = Ash.Query.get_argument(query, :media_offset)
filtered_query =
cond do
not is_nil(tenant) ->
Ash.Query.filter(query, site_id == ^tenant)
not is_nil(site_id_arg) ->
Ash.Query.filter(query, site_id == ^site_id_arg)
true ->
query
end
paginated_media =
MishkaCms.Runtime.Media
|> Ash.Query.for_read(:read)
|> Ash.Query.limit(media_limit)
|> Ash.Query.offset(media_offset)
|> Ash.Query.sort(inserted_at: :desc)
filtered_query
|> Ash.Query.load(media: paginated_media)
end
end