From 89aebdcda4d769ca61da123b66abb2a5389c130e Mon Sep 17 00:00:00 2001 From: Lihang Ying Date: Fri, 22 Dec 2023 12:10:56 -0800 Subject: [PATCH] Add subscription into Profile page --- api/models/schema/userSchema.js | 2 +- api/server/routes/ask/openAI.js | 2 +- client/src/components/Profile/index.tsx | 25 +++++++++++++++++++++++ client/src/localization/languages/Eng.tsx | 2 ++ client/src/localization/languages/Zh.tsx | 2 ++ packages/data-provider/src/types.ts | 2 +- 6 files changed, 32 insertions(+), 3 deletions(-) diff --git a/api/models/schema/userSchema.js b/api/models/schema/userSchema.js index 9e08a2b3cac..e80f48c47fe 100644 --- a/api/models/schema/userSchema.js +++ b/api/models/schema/userSchema.js @@ -107,7 +107,7 @@ const userSchema = mongoose.Schema( }, proMemberExpiredAt: { type: Date, - default: '', + default: new Date(), }, }, { timestamps: true }, diff --git a/api/server/routes/ask/openAI.js b/api/server/routes/ask/openAI.js index 117e7fc09b7..0eec1496234 100644 --- a/api/server/routes/ask/openAI.js +++ b/api/server/routes/ask/openAI.js @@ -130,7 +130,7 @@ router.post('/', validateEndpoint, buildEndpointOption, setHeaders, async (req, let dailyQuota = quota[endpointOption.modelOptions.model].toFixed(0); if (messagesCount >= dailyQuota) { throw new Error( - `超出了您的使用额度(${endpointOption.modelOptions.model}模型每天${dailyQuota}条消息)。由于需要支付越来越多、每月上万元的API费用,如果您经常使用我们的服务,请通过此网页购买更多额度、支持我们持续提供GPT服务:https://iaitok.com`, + `超出了您的使用额度(${endpointOption.modelOptions.model}模型每天${dailyQuota}条消息)。由于需要支付越来越多、每月上万元的API费用,如果您经常使用我们的服务,请通过此网页购买更多额度、支持我们持续提供GPT服务:https://iaitok.com 目前限时半价优惠每月60元`, ); } } diff --git a/client/src/components/Profile/index.tsx b/client/src/components/Profile/index.tsx index b972f396c02..7d345814f70 100644 --- a/client/src/components/Profile/index.tsx +++ b/client/src/components/Profile/index.tsx @@ -26,6 +26,7 @@ function ProfileContent() { const [isFollower, setIsFollower] = useState(false); const [numOfFollowers, setNumOfFollowers] = useState(0); const [numOfFollowing, setNumOfFollowing] = useState(0); + const [proMemberExpiredAt, setProMemberExpiredAt] = useState(new Date()); const [editMode, setEditMode] = useState(false); const [bio, setBio] = useState(initialBio || ''); // const [profession, setProfession] = useState(initialProfession || ''); @@ -247,6 +248,12 @@ function ProfileContent() { } else { setNumOfFollowing(0); } + + if (getUserByIdQuery.data.proMemberExpiredAt) { + setProMemberExpiredAt(new Date(getUserByIdQuery.data?.proMemberExpiredAt)); + } else { + setProMemberExpiredAt(new Date()); + } } }, [getUserByIdQuery.isSuccess, getUserByIdQuery.data, user]); @@ -445,6 +452,24 @@ function ProfileContent() { )} + {/* Subscription */} + {userId === user?.id ? ( + proMemberExpiredAt && proMemberExpiredAt > new Date() ? ( + // Current user: show subscription +
+
+ {localize('com_ui_pro_member_expired_at')}: {proMemberExpiredAt.getFullYear()}- + {proMemberExpiredAt.getMonth() + 1}-{proMemberExpiredAt.getDate()} +
+
+ ) : ( +
+
{localize('com_ui_free_member')}
+
+ ) + ) : ( +
+ )} {/* User bio */} {userId === user?.id ? ( diff --git a/client/src/localization/languages/Eng.tsx b/client/src/localization/languages/Eng.tsx index d6ee48af7dd..062d0e1affc 100644 --- a/client/src/localization/languages/Eng.tsx +++ b/client/src/localization/languages/Eng.tsx @@ -11,6 +11,8 @@ export default { com_ui_follow: 'Follow', com_ui_followers: 'Followers', com_ui_following: 'Following', + com_ui_pro_member_expired_at: 'Pro Member. Expired On', + com_ui_free_member: 'Free Member', com_ui_about_yourself: 'About Yourself', com_ui_profession: 'Profession', com_ui_share_profile: 'Share Profile', diff --git a/client/src/localization/languages/Zh.tsx b/client/src/localization/languages/Zh.tsx index 1c48dbf43ef..6ad9f191228 100644 --- a/client/src/localization/languages/Zh.tsx +++ b/client/src/localization/languages/Zh.tsx @@ -24,6 +24,8 @@ export default { com_ui_follow: '关注', com_ui_followers: '粉丝', com_ui_following: '关注', + com_ui_pro_member_expired_at: 'Pro用户. 过期日期', + com_ui_free_member: '免费用户', com_ui_about_yourself: '关于自己', com_ui_profession: '职业', com_ui_share_profile: '分享主页', diff --git a/packages/data-provider/src/types.ts b/packages/data-provider/src/types.ts index 4d7c45682d0..ab758459cea 100644 --- a/packages/data-provider/src/types.ts +++ b/packages/data-provider/src/types.ts @@ -68,7 +68,7 @@ export type TUser = { biography: string; followers: object; following: object; - proMemberExpiredAt: string; + proMemberExpiredAt: Date; }; export type TGetConversationsResponse = {