Initial miaojingAI project with image resolution guard

This commit is contained in:
FengLee
2026-05-09 11:32:34 +08:00
commit d499020d4e
264 changed files with 54160 additions and 0 deletions

57
verify_recovered_data.js Normal file
View File

@@ -0,0 +1,57 @@
const { Pool } = require('pg');
require('dotenv').config({ path: '.env.local' });
const SYSTEM_USER_ID = '00000000-0000-0000-0000-000000000000';
(async () => {
const pool = new Pool({ connectionString: process.env.LOCAL_DB_URL });
const client = await pool.connect();
try {
const summary = await client.query(`
SELECT
(SELECT COUNT(*)::int FROM profiles) AS profiles,
(SELECT COUNT(*)::int FROM auth.users) AS auth_users,
(SELECT COUNT(*)::int FROM auth.users WHERE password_hash IS NULL OR password_hash = '') AS auth_without_password_hash,
(SELECT COUNT(*)::int FROM works) AS works_total,
(SELECT COUNT(*)::int FROM works WHERE status = 'completed' AND is_public = true) AS public_works,
(SELECT COUNT(*)::int FROM works w LEFT JOIN profiles p ON p.id = w.user_id WHERE w.status = 'completed' AND w.is_public = true AND p.id IS NULL) AS public_missing_profile,
(SELECT COUNT(*)::int FROM works WHERE status = 'completed' AND is_public = true AND user_id = $1) AS public_system_user
`, [SYSTEM_USER_ID]);
const byUser = await client.query(`
SELECT
COALESCE(p.email, '[missing-profile]') AS email,
COALESCE(p.nickname, '') AS nickname,
w.user_id,
COUNT(*)::int AS works,
COUNT(*) FILTER (WHERE w.is_public = true AND w.status = 'completed')::int AS public_works,
COUNT(*) FILTER (WHERE w.is_public = false AND w.status = 'completed')::int AS history_works
FROM works w
LEFT JOIN profiles p ON p.id = w.user_id
WHERE w.status = 'completed'
GROUP BY w.user_id, p.email, p.nickname
ORDER BY works DESC
`);
const noHashUsers = await client.query(`
SELECT p.email, p.nickname, p.role, p.created_at
FROM auth.users u
JOIN profiles p ON p.id = u.id
WHERE u.password_hash IS NULL OR u.password_hash = ''
ORDER BY p.created_at DESC
LIMIT 20
`);
console.log(JSON.stringify({
summary: summary.rows[0],
byUser: byUser.rows,
noHashUsers: noHashUsers.rows,
}, null, 2));
} finally {
client.release();
await pool.end();
}
})().catch(error => {
console.error(error);
process.exit(1);
});