Move wip chkpt

This commit is contained in:
Manav Rathi
2024-11-06 14:44:12 +05:30
parent 8f3de6b6fb
commit fc8bf78fc3
3 changed files with 61 additions and 75 deletions

View File

@@ -6,7 +6,9 @@ import type {
PlansData,
Subscription,
} from "@/new/photos/services/plan";
import billingService, {
import {
activateSubscription,
cancelSubscription,
getPlansData,
hasAddOnBonus,
isSubscriptionActive,
@@ -807,7 +809,7 @@ function StripeSubscriptionOptions({
const reactivate = async () => {
try {
setLoading(true);
await billingService.activateSubscription();
await activateSubscription();
setDialogMessage({
title: t("success"),
content: t("SUBSCRIPTION_ACTIVATE_SUCCESS"),
@@ -846,7 +848,7 @@ function StripeSubscriptionOptions({
const cancel = async () => {
try {
setLoading(true);
await billingService.cancelSubscription();
await cancelSubscription();
setDialogMessage({
title: t("success"),
content: t("SUBSCRIPTION_CANCEL_SUCCESS"),

View File

@@ -39,6 +39,7 @@ import {
getLocalTrashedFiles,
sortFiles,
} from "@/new/photos/services/files";
import { verifySubscription } from "@/new/photos/services/plan";
import {
filterSearchableFiles,
setSearchCollectionsAndFiles,
@@ -115,7 +116,7 @@ import {
getAllLocalCollections,
} from "services/collectionService";
import { syncFiles } from "services/fileService";
import billingService, { redirectToCustomerPortal } from "services/plan";
import { redirectToCustomerPortal } from "services/plan";
import { preFileInfoSync, sync } from "services/sync";
import { syncTrash } from "services/trashService";
import uploadManager from "services/upload/uploadManager";
@@ -1237,13 +1238,11 @@ export async function checkSubscriptionPurchase(
router: NextRouter,
setLoading: SetLoading,
) {
const { session_id: sessionId, status, reason } = router.query ?? {};
const { session_id: sessionID, status, reason } = router.query ?? {};
if (status == "success") {
if (status == "success" && typeof sessionID == "string") {
try {
const subscription = await billingService.verifySubscription(
sessionId as string,
);
const subscription = await verifySubscription(sessionID);
setDialogMessage(
getSubscriptionPurchaseSuccessMessage(subscription),
);

View File

@@ -14,8 +14,8 @@ import {
} from "@ente/shared/storage/localStorage";
import { getToken } from "@ente/shared/storage/localStorage/helpers";
import isElectron from "is-electron";
import type { BonusData, UserDetails } from "./user";
import { z } from "zod";
import type { BonusData, UserDetails } from "./user";
const PlanPeriod = z.enum(["month", "year"]);
@@ -73,71 +73,6 @@ const PlansData = z.object({
export type PlansData = z.infer<typeof PlansData>;
class billingService {
public async cancelSubscription() {
try {
const response = await HTTPService.post(
await apiURL("/billing/stripe/cancel-subscription"),
null,
null,
{
"X-Auth-Token": getToken(),
},
);
const { subscription } = response.data;
setData(LS_KEYS.SUBSCRIPTION, subscription);
} catch (e) {
log.error("subscription cancel failed", e);
throw e;
}
}
public async activateSubscription() {
try {
const response = await HTTPService.post(
await apiURL("/billing/stripe/activate-subscription"),
null,
null,
{
"X-Auth-Token": getToken(),
},
);
const { subscription } = response.data;
setData(LS_KEYS.SUBSCRIPTION, subscription);
} catch (e) {
log.error("failed to activate subscription", e);
throw e;
}
}
public async verifySubscription(
sessionID: string = null,
): Promise<Subscription> {
try {
const token = getToken();
if (!token) {
return;
}
const response = await HTTPService.post(
await apiURL("/billing/verify-subscription"),
{
paymentProvider: "stripe",
productID: null,
verificationData: sessionID,
},
null,
{
"X-Auth-Token": token,
},
);
const { subscription } = response.data;
setData(LS_KEYS.SUBSCRIPTION, subscription);
return subscription;
} catch (e) {
log.error("Error while verifying subscription", e);
throw e;
}
}
public async leaveFamily() {
if (!getToken()) {
return;
@@ -172,6 +107,56 @@ export const getPlansData = async (): Promise<PlansData> => {
return z.object({ data: PlansData }).parse(await res.json()).data;
};
const SubscriptionResponse = z.object({
data: z.object({
subscription: Subscription,
}),
});
export const verifySubscription = async (
sessionID: string,
): Promise<Subscription> => {
const res = await fetch(await apiURL("/billing/verify-subscription"), {
method: "POST",
headers: await authenticatedRequestHeaders(),
body: JSON.stringify({
paymentProvider: "stripe",
productID: null,
verificationData: sessionID,
}),
});
ensureOk(res);
const { subscription } = SubscriptionResponse.parse(await res.json()).data;
setData(LS_KEYS.SUBSCRIPTION, subscription);
return subscription;
};
export const activateSubscription = async () => {
const res = await fetch(
await apiURL("/billing/stripe/activate-subscription"),
{
method: "POST",
headers: await authenticatedRequestHeaders(),
},
);
ensureOk(res);
const { subscription } = SubscriptionResponse.parse(await res.json()).data;
setData(LS_KEYS.SUBSCRIPTION, subscription);
};
export const cancelSubscription = async () => {
const res = await fetch(
await apiURL("/billing/stripe/cancel-subscription"),
{
method: "POST",
headers: await authenticatedRequestHeaders(),
},
);
ensureOk(res);
const { subscription } = SubscriptionResponse.parse(await res.json()).data;
setData(LS_KEYS.SUBSCRIPTION, subscription);
};
/**
* Start the flow to purchase or update a subscription by redirecting the user
* to the payments app.