Epic: #1229 · Spec: §3.3, §6.3 · Type: CODE · Estimate: 0.3 day · Depends on: T2.4 + T2.4a
Scope
POST /api/airdrop/verify-fc
Body: { message, signature, username }
Action:
- Verifies SIWE → recovers address
- Calls
verifyFc(username, PLOTLINK_FC_FID) from lib/airdrop/activation-verify.ts
- Partial-failure semantics (RE1 Critical 3):
user_not_found → return 404, NO DB write
not_following → return 422, NO DB write (do NOT persist partial FC identity)
neynar_error → return 502, NO DB write
ok: true → commit pl_activations.{fid, fc_handle, fc_verified_at} atomically
- UNIQUE INDEX on
fid catches conflicts → return 409 conflict
Acceptance
Dependencies
T2.4 (verifyFc helper), T2.4a (siwe-verify)
Epic: #1229 · Spec: §3.3, §6.3 · Type: CODE · Estimate: 0.3 day · Depends on: T2.4 + T2.4a
Scope
POST /api/airdrop/verify-fcBody:
{ message, signature, username }Action:
verifyFc(username, PLOTLINK_FC_FID)fromlib/airdrop/activation-verify.tsuser_not_found→ return 404, NO DB writenot_following→ return 422, NO DB write (do NOT persist partial FC identity)neynar_error→ return 502, NO DB writeok: true→ commitpl_activations.{fid, fc_handle, fc_verified_at}atomicallyfidcatches conflicts → return 409conflictAcceptance
Dependencies
T2.4 (
verifyFchelper), T2.4a (siwe-verify)