Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | export const dynamic = "force-dynamic"; import { NextRequest, NextResponse } from 'next/server'; import { } from "next-auth"; import { prisma } from "@/lib/prisma"; import { withAdmin, withErrorHandling, successResponse, ApiSuccessResponse, ApiErrorResponse } from "@/lib/api"; import { } from "@/lib/api/middleware"; /** * GET /api/admin/referrals/config * Get referral program configuration */ async function handleGet(): Promise<NextResponse<ApiSuccessResponse<unknown> | ApiErrorResponse>> { const program = await prisma.referralProgram.findFirst({ where: { isActive: true } }); if (!program) { // Return default config if no program exists return successResponse({ referrerReward: 10, refereeReward: 10, minPurchaseAmount: 0, expirationDays: 30, maxReferralsPerUser: null }); } // Parse rewards from JSON strings const referrerReward = JSON.parse(program.referrerReward as string); const refereeReward = JSON.parse(program.refereeReward as string); return successResponse({ id: program.id, name: program.name, referrerReward: referrerReward.value || 0, refereeReward: refereeReward.value || 0, minPurchaseAmount: program.minPurchase || 0, expirationDays: 30, // Default, could add to schema maxReferralsPerUser: null, // Could add to schema }); } /** * PUT /api/admin/referrals/config * Update referral program configuration */ async function handlePut(request: NextRequest): Promise<NextResponse<ApiSuccessResponse<unknown> | ApiErrorResponse>> { const body = await request.json(); const { referrerReward, refereeReward, minPurchaseAmount } = body; // Find or create active program let program = await prisma.referralProgram.findFirst({ where: { isActive: true } }); const referrerRewardJson = JSON.stringify({ type: "credit", value: referrerReward || 10 }); const refereeRewardJson = JSON.stringify({ type: "discount", discountType: "fixed", value: refereeReward || 10 }); if (program) { program = await prisma.referralProgram.update({ where: { id: program.id }, data: { referrerReward: referrerRewardJson, refereeReward: refereeRewardJson, minPurchase: minPurchaseAmount || null } }); } else { program = await prisma.referralProgram.create({ data: { name: "Default Referral Program", referrerReward: referrerRewardJson, refereeReward: refereeRewardJson, minPurchase: minPurchaseAmount || null, isActive: true } }); } return successResponse(program); } export const GET = withErrorHandling(withAdmin(handleGet)); export const PUT = withErrorHandling(withAdmin(handlePut)); |