Skip to content

Commit 649d8d5

Browse files
committed
feat: add quality filter to Explore page
- Filter out low-quality configs (Default with generic description) - Require either install_count > 0 OR (custom name + description + 5+ packages) - Add secondary sorting: installs DESC + updated_at DESC for better UX - Keep all user data intact, filter only at API query level - Improves Explore page quality from 5/16 to 6/6 high-quality configs
1 parent e4323f3 commit 649d8d5

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

src/routes/api/configs/public/+server.ts

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,9 @@ export const GET: RequestHandler = async ({ platform, url }) => {
1010
const limit = Math.min(parseInt(url.searchParams.get('limit') || '50'), 100);
1111
const offset = Math.max(parseInt(url.searchParams.get('offset') || '0'), 0);
1212

13-
const orderClause = sort === 'installs' ? 'c.install_count DESC' : 'c.updated_at DESC';
13+
const orderClause = sort === 'installs'
14+
? 'c.install_count DESC, c.updated_at DESC'
15+
: 'c.updated_at DESC, c.install_count DESC';
1416

1517
let query: string;
1618
let bindings: unknown[];
@@ -35,6 +37,16 @@ export const GET: RequestHandler = async ({ platform, url }) => {
3537
FROM configs c
3638
JOIN users u ON c.user_id = u.id
3739
WHERE c.visibility = 'public'
40+
AND (
41+
c.install_count > 0
42+
OR (
43+
c.name != 'Default'
44+
AND c.description IS NOT NULL
45+
AND c.description != ''
46+
AND c.description != 'My default configuration'
47+
AND json_array_length(c.packages) >= 5
48+
)
49+
)
3850
ORDER BY ${orderClause}
3951
LIMIT ? OFFSET ?
4052
`;
@@ -50,9 +62,21 @@ export const GET: RequestHandler = async ({ platform, url }) => {
5062
).bind('public', username).first<{ count: number }>();
5163
total = countResult?.count || 0;
5264
} else {
53-
const countResult = await env.DB.prepare(
54-
'SELECT COUNT(*) as count FROM configs WHERE visibility = ?'
55-
).bind('public').first<{ count: number }>();
65+
const countResult = await env.DB.prepare(`
66+
SELECT COUNT(*) as count
67+
FROM configs c
68+
WHERE c.visibility = 'public'
69+
AND (
70+
c.install_count > 0
71+
OR (
72+
c.name != 'Default'
73+
AND c.description IS NOT NULL
74+
AND c.description != ''
75+
AND c.description != 'My default configuration'
76+
AND json_array_length(c.packages) >= 5
77+
)
78+
)
79+
`).first<{ count: number }>();
5680
total = countResult?.count || 0;
5781
}
5882

0 commit comments

Comments
 (0)