fix: new migration; fix broken showcase stats

This commit is contained in:
zk
2026-05-17 20:26:30 +00:00
parent 6b85f158be
commit d93e54ce4a
2 changed files with 41 additions and 3 deletions
+3 -3
View File
@@ -69,11 +69,11 @@ jobs:
VITE_RECAPTCHA_KEY: "6LcsYbIpAAAAAEJffjIXmbQcxj_SBZG7BnSPjF4L"
VITE_SERVER_URL: "https://v3-boku.tachi.ac"
VITE_DISCORD: "https://discord.gg/E4n8ZZF5ES"
VITE_CDN_URL: "https://cdn-v3-boku.tachi.ac"
VITE_CDN_URL: "https://cdn-boku.tachi.ac"
TACHI_NAME: "Bokutachi"
BUILD_OUT_DIR: /tmp/boku
- name: Build Kamaitachi (v3)
- name: Build Kamaitachi
run: bun run --filter tachi-client build
env:
VITE_MANDATE_LOGIN: true
@@ -83,7 +83,7 @@ jobs:
VITE_MIN_CLIENT_ID: "A0DBDBB063CD800530EF01C6488B282137E0191E"
VITE_DISCORD: "https://discord.gg/NNgGJbpQUj"
VITE_TCHIC_MODE: "kamai"
VITE_CDN_URL: "https://cdn-v3-kamai.tachi.ac"
VITE_CDN_URL: "https://cdn-kamai.tachi.ac"
VITE_GIT_REPO: "GitHub:zkldi/Tachi"
VITE_RECAPTCHA_KEY: "6LcsYbIpAAAAAEJffjIXmbQcxj_SBZG7BnSPjF4L"
TACHI_NAME: "Kamaitachi"
@@ -0,0 +1,38 @@
-- Remove showcase entries that reference deleted charts or folders (slug + game).
-- `game_profile.showcase` is a JSONB array; chart entries use mode "chart" + chartID;
-- folder entries use mode "folder" + slug, scoped to game_profile.game.
UPDATE game_profile AS gp
SET showcase = cleaned.new_showcase
FROM (
SELECT
gp_inner.user_id,
gp_inner.game,
COALESCE(
(
SELECT jsonb_agg(t.elem ORDER BY t.ordinality)
FROM jsonb_array_elements(gp_inner.showcase) WITH ORDINALITY AS t(elem, ordinality)
WHERE CASE t.elem->>'mode'
WHEN 'chart' THEN EXISTS (
SELECT 1
FROM chart AS c
WHERE c.id = t.elem->>'chartID'
)
WHEN 'folder' THEN EXISTS (
SELECT 1
FROM folder AS f
WHERE f.game = gp_inner.game
AND f.slug = t.elem->>'slug'
)
ELSE TRUE
END
),
'[]'::jsonb
) AS new_showcase
FROM game_profile AS gp_inner
WHERE jsonb_typeof(gp_inner.showcase) = 'array'
AND jsonb_array_length(gp_inner.showcase) > 0
) AS cleaned
WHERE gp.user_id = cleaned.user_id
AND gp.game = cleaned.game
AND gp.showcase IS DISTINCT FROM cleaned.new_showcase;