add membership features endpoint and use it in mobile

This commit is contained in:
dimitar committed 2026-03-29 19:51:36 +02:00
1 parent 091cb5ba85
commit 50ece15089
4 files changed
+90 -6

No files matched your search

+14 -6
View File
@@ -1,14 +1,18 @@
import { useAuth, useUser } from "@clerk/clerk-expo";
import { useEffect, useState } from "react";
import {
getCurrentMembershipType,
getMembershipFeatures,
getCurrentMembershipFeaturesFromServer,
type MembershipFeatures,
type MembershipType,
} from "../api/membership";
import log from "../utils/logger";
const BASIC_FEATURES = getMembershipFeatures("basic");
const BASIC_FEATURES: MembershipFeatures = {
recommendationsPerMonth: 1,
hydrationTracking: false,
nutritionTracking: false,
advancedStatistics: false,
};
interface UseMembershipResult {
membershipType: MembershipType;
@@ -20,6 +24,7 @@ export function useMembership(): UseMembershipResult {
const { user } = useUser();
const { getToken, isSignedIn } = useAuth();
const [membershipType, setMembershipType] = useState<MembershipType>("basic");
const [features, setFeatures] = useState<MembershipFeatures>(BASIC_FEATURES);
const [loading, setLoading] = useState(true);
useEffect(() => {
@@ -29,6 +34,7 @@ export function useMembership(): UseMembershipResult {
if (!isSignedIn || !user?.id) {
if (isMounted) {
setMembershipType("basic");
setFeatures(BASIC_FEATURES);
setLoading(false);
}
return;
@@ -37,14 +43,16 @@ export function useMembership(): UseMembershipResult {
try {
setLoading(true);
const token = await getToken();
const type = await getCurrentMembershipType(user.id, token);
const result = await getCurrentMembershipFeaturesFromServer(token);
if (isMounted) {
setMembershipType(type);
setMembershipType(result.membershipType);
setFeatures(result.features);
}
} catch (error) {
log.error("Failed to load membership", error, { userId: user.id });
if (isMounted) {
setMembershipType("basic");
setFeatures(BASIC_FEATURES);
}
} finally {
if (isMounted) {
@@ -62,7 +70,7 @@ export function useMembership(): UseMembershipResult {
return {
membershipType,
features: getMembershipFeatures(membershipType) || BASIC_FEATURES,
features,
loading,
};
}