Harden milestone sharing and X publishing
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { NextRequest, NextResponse } from 'next/server';
|
||||
import { db } from '@/lib/db';
|
||||
import { getWwwOrigin } from '@/lib/hosts';
|
||||
|
||||
export const dynamic = 'force-dynamic';
|
||||
|
||||
@@ -37,7 +38,8 @@ export async function GET(request: NextRequest) {
|
||||
if (!milestone || !milestone.user || !milestone.qr || milestone.qr.status !== 'ACTIVE') {
|
||||
return NextResponse.json({ milestone: null });
|
||||
}
|
||||
if (dryRun) return NextResponse.json({ milestone: { id: milestone.id, text: milestone.consentText }, dryRun: true });
|
||||
const shareUrl = milestone.shareToken ? `${getWwwOrigin()}/s/m/${milestone.shareToken}` : null;
|
||||
if (dryRun) return NextResponse.json({ milestone: { id: milestone.id, text: milestone.consentText, shareUrl }, dryRun: true });
|
||||
|
||||
const claimed = await db.$transaction(async (tx) => {
|
||||
await tx.$queryRawUnsafe('SELECT pg_advisory_xact_lock(920241)');
|
||||
@@ -47,7 +49,14 @@ export async function GET(request: NextRequest) {
|
||||
return result.count;
|
||||
});
|
||||
if (!claimed) return NextResponse.json({ milestone: null, reason: 'claimed' });
|
||||
return NextResponse.json({ milestone: { id: milestone.id, text: milestone.consentText, card: milestone.cardData } });
|
||||
return NextResponse.json({ milestone: {
|
||||
id: milestone.id,
|
||||
text: milestone.consentText,
|
||||
card: milestone.cardData,
|
||||
shareToken: milestone.shareToken,
|
||||
shareUrl,
|
||||
approvedAt: milestone.brandApprovedAt?.toISOString() || null,
|
||||
} });
|
||||
}
|
||||
|
||||
export async function PATCH(request: NextRequest) {
|
||||
|
||||
Reference in New Issue
Block a user