diff --git a/.github/scripts/daily-digest.sh b/.github/scripts/daily-digest.sh index 759ce8bb..17c9b08a 100755 --- a/.github/scripts/daily-digest.sh +++ b/.github/scripts/daily-digest.sh @@ -81,7 +81,8 @@ if [ -n "${ASSETS_DATABASE_URL_RO:-}" ] && [ -n "${OPERATION_DATABASE_URL_RO:-}" if [ "$admin_count" -gt 0 ]; then # 2) verified counts per admin from assets DB # yesterday 윈도우 = [어제 00:00 KST, 오늘 00:00 KST). last_7d 윈도우 = 7일 rolling. - admin_ids_array=$(echo "$admins_json" | jq -r '[.[].id] | join("\",\"")') + # PostgreSQL ARRAY 안의 string literal 은 single quote — double quote 는 identifier 해석. + admin_ids_array=$(echo "$admins_json" | jq -r "[.[].id] | join(\"','\")") counts_json=$(PGCONNECT_TIMEOUT=10 psql "$ASSETS_DATABASE_URL_RO" -t -A -F$'\t' -c \ "SELECT verified_by::text, COUNT(*) FILTER ( @@ -90,13 +91,15 @@ if [ -n "${ASSETS_DATABASE_URL_RO:-}" ] && [ -n "${OPERATION_DATABASE_URL_RO:-}" ) AS yesterday, COUNT(*) FILTER (WHERE verified_at >= now() - interval '7 days') AS last_7d FROM public.raw_posts - WHERE verified_by = ANY(ARRAY[\"$admin_ids_array\"]::uuid[]) + WHERE verified_by = ANY(ARRAY['$admin_ids_array']::uuid[]) AND verified_at IS NOT NULL AND verified_at >= now() - interval '7 days' GROUP BY verified_by" \ 2>/dev/null \ | jq -R -s 'split("\n") | map(select(length > 0) | split("\t") | {admin_id:.[0], yesterday:(.[1] | tonumber), last_7d:(.[2] | tonumber)})' \ || echo "[]") + # SQL 실패 또는 빈 결과 시 fallback + if [ -z "$counts_json" ]; then counts_json="[]"; fi # 3) zip — admin + counts (fall-through to 0 if no row) VERIFY_STATS_JSON=$(jq -n \