Skip to content

Commit df12300

Browse files
committed
cleanup
1 parent 76671dd commit df12300

2 files changed

Lines changed: 30 additions & 38 deletions

File tree

packages/app/control/src/app/(app)/app/[id]/(overview)/_components/referral-handler.tsx

Lines changed: 9 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -13,54 +13,25 @@ export const ReferralHandler: React.FC<Props> = ({ appId }) => {
1313
const referralCode = searchParams.get('referral_code');
1414
const [processed, setProcessed] = useState(false);
1515

16-
const utils = api.useUtils();
17-
const { mutateAsync: createMembership } =
18-
api.apps.app.memberships.create.useMutation();
19-
const { mutateAsync: updateReferrer } =
20-
api.apps.app.memberships.update.referrer.useMutation();
16+
const { mutateAsync: registerReferral } =
17+
api.apps.app.registerReferral.useMutation();
2118

2219
useEffect(() => {
2320
if (!referralCode || processed) return;
2421

2522
const processReferralCode = async () => {
26-
const referralCodeData = await utils.apps.app.referralCode.get.byCode
27-
.fetch(referralCode)
28-
.catch(() => null);
29-
30-
if (!referralCodeData) {
31-
setProcessed(true);
32-
return;
33-
}
34-
35-
const membership = await utils.apps.app.memberships.get
36-
.fetch({ appId })
37-
.catch(() => null);
38-
39-
// Only update if user has no referrer yet
40-
if (membership?.referrerId === null) {
41-
await updateReferrer({
42-
appId,
43-
referrerId: referralCodeData.id,
44-
}).catch(() => {
45-
// Silently fail - user might already have a referrer from a race condition
46-
});
47-
}
48-
49-
// Create membership if it doesn't exist
50-
if (!membership) {
51-
await createMembership({
52-
appId,
53-
referrerId: referralCodeData.id,
54-
}).catch(() => {
55-
// Silently fail - membership might have been created in the meantime
56-
});
57-
}
23+
await registerReferral({
24+
appId,
25+
code: referralCode,
26+
}).catch(() => {
27+
// Silently fail - referral code may be invalid, expired, or user may already have a referrer
28+
});
5829

5930
setProcessed(true);
6031
};
6132

6233
void processReferralCode();
63-
}, [referralCode, appId, createMembership, updateReferrer, processed, utils]);
34+
}, [referralCode, appId, registerReferral, processed]);
6435

6536
return null;
6637
};

packages/app/control/src/trpc/routers/apps/index.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
createAppMembershipSchema,
2424
updateAppMembershipReferrer,
2525
updateAppMembershipReferrerSchema,
26+
setAppMembershipReferrer,
2627
} from '@/services/db/apps/membership';
2728
import {
2829
listAppsSchema,
@@ -262,6 +263,26 @@ export const appsRouter = createTRPCRouter({
262263
}),
263264
},
264265

266+
registerReferral: protectedProcedure
267+
.input(z.object({ appId: appIdSchema, code: z.string() }))
268+
.mutation(async ({ input, ctx }) => {
269+
const success = await setAppMembershipReferrer(
270+
ctx.session.user.id,
271+
input.appId,
272+
input.code
273+
);
274+
275+
if (!success) {
276+
throw new TRPCError({
277+
code: 'BAD_REQUEST',
278+
message:
279+
'Referral code could not be applied. It may be invalid, expired, or you may already have a referrer for this app.',
280+
});
281+
}
282+
283+
return { success: true };
284+
}),
285+
265286
transactions: {
266287
list: paginatedProcedure
267288
.concat(protectedProcedure)

0 commit comments

Comments
 (0)