|
1 | 1 | import { adminProcedure, createTRPCRouter } from '@/lib/trpc/init'; |
2 | 2 | import { db } from '@/lib/drizzle'; |
3 | | -import { |
4 | | - cloud_agent_code_reviews, |
5 | | - kilocode_users, |
6 | | - microdollar_usage, |
7 | | - microdollar_usage_metadata, |
8 | | - organizations, |
9 | | -} from '@kilocode/db/schema'; |
| 3 | +import { cloud_agent_code_reviews, kilocode_users, organizations } from '@kilocode/db/schema'; |
10 | 4 | import * as z from 'zod'; |
11 | 5 | import { sql, and, gte, lt, eq, isNotNull, isNull, desc, ilike, or, type SQL } from 'drizzle-orm'; |
12 | | -import { |
13 | | - REVIEW_PROMO_MODEL, |
14 | | - REVIEW_PROMO_START, |
15 | | - REVIEW_PROMO_END, |
16 | | - isActiveReviewPromo, |
17 | | -} from '@/lib/code-reviews/core/constants'; |
18 | 6 |
|
19 | 7 | /** |
20 | 8 | * SQL condition that identifies billing/credits errors (402 Payment Required). |
@@ -639,67 +627,4 @@ export const adminCodeReviewsRouter = createTRPCRouter({ |
639 | 627 |
|
640 | 628 | return result; |
641 | 629 | }), |
642 | | - |
643 | | - getReviewPromotionStats: adminProcedure.query(async () => { |
644 | | - // Aggregates: total requests, unique users, unique orgs |
645 | | - const aggregates = await db |
646 | | - .select({ |
647 | | - total_requests: sql<number>`COUNT(*)`, |
648 | | - unique_users: sql<number>`COUNT(DISTINCT ${microdollar_usage.kilo_user_id})`, |
649 | | - unique_orgs: sql<number>`COUNT(DISTINCT ${microdollar_usage.organization_id})`, |
650 | | - }) |
651 | | - .from(microdollar_usage) |
652 | | - .innerJoin( |
653 | | - microdollar_usage_metadata, |
654 | | - eq(microdollar_usage.id, microdollar_usage_metadata.id) |
655 | | - ) |
656 | | - .where( |
657 | | - and( |
658 | | - eq(microdollar_usage.requested_model, REVIEW_PROMO_MODEL), |
659 | | - eq(microdollar_usage.cost, 0), |
660 | | - sql`(${microdollar_usage_metadata.is_user_byok} IS NULL OR ${microdollar_usage_metadata.is_user_byok} = false)`, |
661 | | - gte(microdollar_usage.created_at, REVIEW_PROMO_START), |
662 | | - lt(microdollar_usage.created_at, REVIEW_PROMO_END) |
663 | | - ) |
664 | | - ); |
665 | | - |
666 | | - // Daily breakdown |
667 | | - const daily = await db |
668 | | - .select({ |
669 | | - day: sql<string>`DATE_TRUNC('day', ${microdollar_usage.created_at})::date::text`, |
670 | | - total: sql<number>`COUNT(*)`, |
671 | | - unique_users: sql<number>`COUNT(DISTINCT ${microdollar_usage.kilo_user_id})`, |
672 | | - }) |
673 | | - .from(microdollar_usage) |
674 | | - .innerJoin( |
675 | | - microdollar_usage_metadata, |
676 | | - eq(microdollar_usage.id, microdollar_usage_metadata.id) |
677 | | - ) |
678 | | - .where( |
679 | | - and( |
680 | | - eq(microdollar_usage.requested_model, REVIEW_PROMO_MODEL), |
681 | | - eq(microdollar_usage.cost, 0), |
682 | | - sql`(${microdollar_usage_metadata.is_user_byok} IS NULL OR ${microdollar_usage_metadata.is_user_byok} = false)`, |
683 | | - gte(microdollar_usage.created_at, REVIEW_PROMO_START), |
684 | | - lt(microdollar_usage.created_at, REVIEW_PROMO_END) |
685 | | - ) |
686 | | - ) |
687 | | - .groupBy(sql`DATE_TRUNC('day', ${microdollar_usage.created_at})`) |
688 | | - .orderBy(sql`DATE_TRUNC('day', ${microdollar_usage.created_at})`); |
689 | | - |
690 | | - const agg = aggregates[0]; |
691 | | - return { |
692 | | - promoActive: isActiveReviewPromo('reviewer', REVIEW_PROMO_MODEL), |
693 | | - promoStart: REVIEW_PROMO_START, |
694 | | - promoEnd: REVIEW_PROMO_END, |
695 | | - totalRequests: Number(agg.total_requests) || 0, |
696 | | - uniqueUsers: Number(agg.unique_users) || 0, |
697 | | - uniqueOrgs: Number(agg.unique_orgs) || 0, |
698 | | - daily: daily.map(row => ({ |
699 | | - day: row.day, |
700 | | - total: Number(row.total) || 0, |
701 | | - uniqueUsers: Number(row.unique_users) || 0, |
702 | | - })), |
703 | | - }; |
704 | | - }), |
705 | 630 | }); |
0 commit comments