// apps/server/src/routers/premium.ts
import { router, subscribedProcedure } from '../lib/trpc';
import { z } from 'zod';
export const premiumRouter = router({
// Get premium content
getContent: subscribedProcedure
.input(z.object({
contentType: z.enum(['article', 'video', 'download']),
}))
.query(async ({ ctx, input }) => {
const content = await prisma.premiumContent.findMany({
where: {
type: input.contentType,
subscriptionTier: {
lte: ctx.subscription.tier,
},
},
});
return content;
}),
// Access premium feature
useFeature: subscribedProcedure
.input(z.object({
featureId: z.string(),
}))
.mutation(async ({ ctx, input }) => {
// Check if feature is available in subscription tier
const feature = await prisma.premiumFeature.findFirst({
where: {
id: input.featureId,
requiredTier: {
lte: ctx.subscription.tier,
},
},
});
if (!feature) {
throw new TRPCError({
code: 'FORBIDDEN',
message: 'Feature not available in your subscription tier',
});
}
// Implement feature logic
return { success: true };
}),
});