diff --git a/app/api/card/route.jsx b/app/api/card/route.jsx index d6497fa..97a815c 100644 --- a/app/api/card/route.jsx +++ b/app/api/card/route.jsx @@ -4,6 +4,7 @@ import { promises as fs } from 'fs'; import path from 'path'; import { classifyAgent, getPowerTier } from '../../../lib/agent-class.js'; import { scoreAll } from '../../../lib/scoring.js'; +import { addDeveloperRanks } from '../../../lib/ranking.js'; export const runtime = 'nodejs'; @@ -12,19 +13,15 @@ const COSMOS_KEY = process.env.COSMOS_KEY; const DATABASE = process.env.COSMOS_DATABASE || 'devglobe'; const CONTAINER = process.env.COSMOS_CONTAINER || 'developers'; -async function getDeveloper(login) { +async function getRankedDevelopers() { if (COSMOS_ENDPOINT && COSMOS_KEY) { try { const client = new CosmosClient({ endpoint: COSMOS_ENDPOINT, key: COSMOS_KEY }); const container = client.database(DATABASE).container(CONTAINER); const { resources } = await container.items.query({ - query: 'SELECT * FROM c WHERE c.login = @login', - parameters: [{ name: '@login', value: login }], + query: 'SELECT c.id, c.login, c.name, c.avatarUrl, c.location, c.followers, c.totalStars, c.totalForks, c.totalWatchers, c.totalCommits, c.topLanguage, c.soReputation, c.soAnswers, c.soAcceptRate, c.soBadges, c.claimed FROM c', }).fetchAll(); - if (resources.length > 0) { - const scored = scoreAll(resources); - return scored[0]; - } + if (resources.length > 0) return addDeveloperRanks(scoreAll(resources)); } catch (err) { console.error('Card: Cosmos error', err.message); } @@ -33,8 +30,12 @@ async function getDeveloper(login) { const filePath = path.join(process.cwd(), 'data', 'developers-sample.json'); const raw = await fs.readFile(filePath, 'utf-8'); const data = JSON.parse(raw); - const scored = scoreAll(data); - return scored.find(d => d.login === login) || null; + return addDeveloperRanks(scoreAll(data)); +} + +async function getDeveloper(login) { + const developers = await getRankedDevelopers(); + return developers.find(d => d.login.toLowerCase() === login.toLowerCase()) || null; } function formatNum(n) { @@ -66,12 +67,32 @@ export async function GET(request) { width: '1200', height: '630', display: 'flex', - background: 'linear-gradient(135deg, #0a0e17 0%, #111827 40%, #0f172a 100%)', + background: 'linear-gradient(135deg, #080b10 0%, #111820 52%, #15120f 100%)', fontFamily: 'Inter, sans-serif', position: 'relative', overflow: 'hidden', }} > + {/* Top identity bar */} +