diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..958202a --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,19 @@ +name: Deploy to Cloudflare + +on: + push: + branches: [main] + +jobs: + deploy: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '20' + - run: npm install -g wrangler + - run: wrangler deploy + env: + CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} + CLOUDFLARE_ACCOUNT_ID: c29d5b5c11b67dc349843b8731e93b8f diff --git a/worker.js b/worker.js index 76e3770..ad3dfa2 100644 --- a/worker.js +++ b/worker.js @@ -20,24 +20,27 @@ export default { if (!secrets[competitor] || auth !== `Bearer ${secrets[competitor]}`) { return new Response('Unauthorized', { status: 401 }); } - const comps = JSON.parse(await env.MILLY_METRICS.get('competitors') || '{}'); - if (comps[competitor]) comps[competitor].revenue = parseFloat(revenue) || 0; - await env.MILLY_METRICS.put('competitors', JSON.stringify(comps)); + const revenues = JSON.parse(await env.MILLY_METRICS.get('revenues') || '{}'); + revenues[competitor] = parseFloat(revenue) || 0; + await env.MILLY_METRICS.put('revenues', JSON.stringify(revenues)); return new Response('Updated'); } - const [compsRaw, metricsRaw, baselineRaw] = await Promise.all([ - env.MILLY_METRICS.get('competitors'), + const [revenuesRaw, metricsRaw] = await Promise.all([ + env.MILLY_METRICS.get('revenues'), env.MILLY_METRICS.get('metrics'), - env.MILLY_METRICS.get('baseline'), ]); - const competitors = compsRaw ? JSON.parse(compsRaw) : defaultCompetitors(); + // Static config always comes from code — KV only stores revenue numbers + const competitors = defaultCompetitors(); + const revenues = revenuesRaw ? JSON.parse(revenuesRaw) : {}; const metrics = metricsRaw ? JSON.parse(metricsRaw) : {}; - // Omar's revenue = live Stripe (minus baseline) - if (competitors.omar) { - competitors.omar.revenue = metrics.total_revenue || 0; + // Omar's revenue = live Stripe + competitors.omar.revenue = metrics.total_revenue || 0; + // Others = self-reported via /update API + for (const id of ['rhys', 'pussy', 'patty']) { + if (revenues[id] != null) competitors[id].revenue = revenues[id]; } return new Response(render(competitors), {