frontend/src/routes/profile/+page.server.ts

133 lines
3.4 KiB
TypeScript

import { redirect, error } from "@sveltejs/kit";
export const load = async ({ locals }) => {
const { pb, user } = locals;
if (!pb.authStore.isValid) {
redirect(303, "/login");
}
const getSubscriptionData = async () => {
const output =
(
await pb.collection("payments").getFullList({
filter: `user="${user.id}" `,
sort: "-created",
})
)?.at(0)?.data?.data?.attributes ?? {};
//console.log(output)
return output;
};
return {
getSubscriptionData: await getSubscriptionData(),
};
};
export const actions = {
cancelSubscription: async ({ request, locals }) => {
const formData = await request?.formData();
const apiKey = import.meta.env.VITE_LEMON_SQUEEZY_API_KEY;
const subscriptionId = formData?.get("subscriptionId");
try {
const url = `https://api.lemonsqueezy.com/v1/subscriptions/${subscriptionId}`;
const headers = {
Accept: "application/vnd.api+json",
"Content-Type": "application/vnd.api+json",
Authorization: `Bearer ${apiKey}`,
};
const response = await fetch(url, {
method: "DELETE",
headers: headers,
});
} catch (err) {
console.log("Error: ", err);
error(err.status, err.message);
}
redirect(302, "/profile");
},
reactivateSubscription: async ({ request, locals }) => {
const formData = await request?.formData();
const apiKey = import.meta.env.VITE_LEMON_SQUEEZY_API_KEY;
const subscriptionId = formData?.get("subscriptionId");
try {
const url = `https://api.lemonsqueezy.com/v1/subscriptions/${subscriptionId}`;
const headers = {
Accept: "application/vnd.api+json",
"Content-Type": "application/vnd.api+json",
Authorization: `Bearer ${apiKey}`,
};
const payload = {
data: {
type: "subscriptions",
id: `${subscriptionId}`,
attributes: {
cancelled: false,
},
},
};
const response = await fetch(url, {
method: "PATCH",
headers: headers,
body: JSON.stringify(payload),
});
} catch (err) {
console.log("Error: ", err);
error(err.status, err.message);
}
redirect(302, "/profile");
},
changeSubscription: async ({ request, locals }) => {
const formData = await request?.formData();
const apiKey = import.meta.env.VITE_LEMON_SQUEEZY_API_KEY;
const subscriptionId = formData?.get("subscriptionId");
try {
const url = `https://api.lemonsqueezy.com/v1/subscriptions/${subscriptionId}`;
const headers = {
Accept: "application/vnd.api+json",
"Content-Type": "application/vnd.api+json",
Authorization: `Bearer ${apiKey}`,
};
// Create the data payload
const payload = {
data: {
type: "subscriptions",
id: subscriptionId,
attributes: {
variant_id: import.meta.env.VITE_LEMON_SQUEEZY_ANNUAL_VARIANT_ID, // Change from monthly to annually plan
},
},
};
const response = await fetch(url, {
method: "PATCH",
headers: headers,
body: JSON.stringify(payload),
});
console.log(await response.json());
} catch (err) {
console.log("Error: ", err);
error(err.status, err.message);
}
redirect(302, "/profile");
},
};