feat: add unsubscribe to API methods

This commit is contained in:
mrjvs
2026-08-12 21:07:49 +02:00
parent be092ca6b5
commit 061b4ccbbc
5 changed files with 48 additions and 1 deletions

View File

@@ -0,0 +1,33 @@
import { usePapr } from '~~/server/utils/papr';
export default defineEventHandler(async (event): Promise<void> => {
const auth = enforceLoggedIn(event);
const papr = await usePapr(event);
const stripe = useStripe(event);
if (!stripe || !papr) {
throw createApiError('INTEGRATION_DISABLED');
}
if (!auth.stripeSubscriptionId) {
return; // No subscription, do nothing
}
await stripe.subscriptions.cancel(auth.stripeSubscriptionId);
let newAccessLevel = 0;
if (auth.accessLevel >= 2) {
newAccessLevel = auth.accessLevel; // Staff shouldn't be downgraded on unsubscribe
}
await papr.Pnid.updateOne({ pid: auth.pid }, {
$unset: {
'connections.stripe.subscription_id': 1,
'connections.stripe.price_id': 1,
'connections.stripe.tier_name': 1
},
$set: {
'connections.stripe.tier_level': 0,
'access_level': newAccessLevel
}
});
});

View File

@@ -12,6 +12,13 @@ export default defineEventHandler(async (event): Promise<GetApiAuthMe> => {
accessLevel: data.accessLevel,
serverAccessLevel: data.serverAccessLevel as any,
discordId: data.connections?.discord?.id ?? null,
stripeTier: data.connections?.stripe?.subscriptionId
? {
subscriptionId: data.connections.stripe.subscriptionId,
priceId: data.connections.stripe.priceId ?? '',
tierName: data.connections.stripe.tierName ?? ''
}
: null,
mii: data.mii
? {
imageUrl: `${config.public.cdnBaseUrl}/mii/${data.pid}/normal_face.png`,