From d2dfd5a1d59877ab979b075bd8abe2d56dd5256c Mon Sep 17 00:00:00 2001 From: Reed <3893871+dharit-tan@users.noreply.github.com> Date: Wed, 26 Feb 2025 21:36:44 -0500 Subject: [PATCH] [PAY-3972] First weekly comment challenge web UI (#11478) --- packages/common/src/models/AudioRewards.ts | 4 +++- packages/common/src/utils/challenges.ts | 10 +++++++++- .../src/challenges/challenges.dev.json | 2 +- .../src/challenges/challenges.stage.json | 2 +- .../src/tasks/entity_manager/entities/comment.py | 16 +++++++++------- packages/mobile/src/utils/challenges.tsx | 6 ++++++ .../ChallengeRewards/hooks/useRewardIds.ts | 3 ++- .../FirstWeeklyCommentChallengeModalContent.tsx | 16 ++++++++++++++++ .../challengeContentRegistry.ts | 3 +++ packages/web/src/pages/rewards-page/config.tsx | 3 ++- 10 files changed, 52 insertions(+), 13 deletions(-) create mode 100644 packages/web/src/pages/rewards-page/components/modals/ChallengeRewardsModal/FirstWeeklyCommentChallengeModalContent.tsx diff --git a/packages/common/src/models/AudioRewards.ts b/packages/common/src/models/AudioRewards.ts index cff68e6d231..36ea004e7fb 100644 --- a/packages/common/src/models/AudioRewards.ts +++ b/packages/common/src/models/AudioRewards.ts @@ -54,7 +54,8 @@ export enum ChallengeName { FirstPlaylist = 'fp', ListenStreak = 'l', ListenStreakEndless = 'e', - OneShot = 'o' + OneShot = 'o', + FirstWeeklyComment = 'c' } export type ChallengeRewardID = @@ -87,6 +88,7 @@ export type ChallengeRewardID = | ChallengeName.ListenStreak | ChallengeName.ListenStreakEndless | ChallengeName.OneShot + | ChallengeName.FirstWeeklyComment export enum FailureReason { // The attestation requires the user to fill out a captcha diff --git a/packages/common/src/utils/challenges.ts b/packages/common/src/utils/challenges.ts index 28a58ca13ef..ced1c0455e7 100644 --- a/packages/common/src/utils/challenges.ts +++ b/packages/common/src/utils/challenges.ts @@ -274,7 +274,7 @@ export const challengeRewardsConfig: Record< panelButtonText: 'See More', id: 'trending-underground' }, - o: { + [ChallengeName.OneShot]: { shortTitle: 'Airdrop 2: Artists', title: 'Airdrop 2: Artist Appreciation', description: () => @@ -287,6 +287,14 @@ export const challengeRewardsConfig: Record< id: ChallengeName.OneShot, remainingLabel: 'Ineligible', progressLabel: 'Ready to Claim' + }, + [ChallengeName.FirstWeeklyComment]: { + shortTitle: 'first comment of the week', + title: 'First comment of the week', + description: () => 'Your first comment every week will earn $AUDIO.', + fullDescription: () => 'Your first comment every week will earn $AUDIO.', + panelButtonText: 'Comment on a Track', + id: ChallengeName.FirstWeeklyComment } } diff --git a/packages/discovery-provider/src/challenges/challenges.dev.json b/packages/discovery-provider/src/challenges/challenges.dev.json index fe2639f3ebe..baaa0fe61ed 100644 --- a/packages/discovery-provider/src/challenges/challenges.dev.json +++ b/packages/discovery-provider/src/challenges/challenges.dev.json @@ -158,6 +158,6 @@ "step_count": 2147483647, "starting_block": 0, "weekly_pool": 2147483647, - "cooldown_days": 0 + "cooldown_days": 7 } ] diff --git a/packages/discovery-provider/src/challenges/challenges.stage.json b/packages/discovery-provider/src/challenges/challenges.stage.json index 1f433977ba6..baf2f562dbf 100644 --- a/packages/discovery-provider/src/challenges/challenges.stage.json +++ b/packages/discovery-provider/src/challenges/challenges.stage.json @@ -158,6 +158,6 @@ "step_count": 2147483647, "starting_block": 0, "weekly_pool": 2147483647, - "cooldown_days": 0 + "cooldown_days": 7 } ] diff --git a/packages/discovery-provider/src/tasks/entity_manager/entities/comment.py b/packages/discovery-provider/src/tasks/entity_manager/entities/comment.py index 1e962144e88..452760fe046 100644 --- a/packages/discovery-provider/src/tasks/entity_manager/entities/comment.py +++ b/packages/discovery-provider/src/tasks/entity_manager/entities/comment.py @@ -173,13 +173,15 @@ def create_comment(params: ManageEntityParameters): ) params.add_record(comment_id, comment_record, EntityType.COMMENT) - challenge_bus.dispatch( - ChallengeEvent.first_weekly_comment, - params.block_number, - params.block_datetime, - user_id, - {"comment_id": comment_id}, - ) + + with challenge_bus.use_scoped_dispatch_queue(): + challenge_bus.dispatch( + ChallengeEvent.first_weekly_comment, + params.block_number, + params.block_datetime, + user_id, + {"created_at": params.block_datetime.timestamp()}, + ) if ( not is_reply diff --git a/packages/mobile/src/utils/challenges.tsx b/packages/mobile/src/utils/challenges.tsx index ff1e4514667..da3520334aa 100644 --- a/packages/mobile/src/utils/challenges.tsx +++ b/packages/mobile/src/utils/challenges.tsx @@ -299,6 +299,12 @@ const mobileChallengeConfig: Record = buttonInfo: { iconRight: IconCheck } + }, + [ChallengeName.FirstWeeklyComment]: { + icon: undefined, + buttonInfo: { + iconRight: IconCheck + } } } diff --git a/packages/web/src/pages/rewards-page/components/ChallengeRewards/hooks/useRewardIds.ts b/packages/web/src/pages/rewards-page/components/ChallengeRewards/hooks/useRewardIds.ts index 7aeea592c4c..86dd04e40d0 100644 --- a/packages/web/src/pages/rewards-page/components/ChallengeRewards/hooks/useRewardIds.ts +++ b/packages/web/src/pages/rewards-page/components/ChallengeRewards/hooks/useRewardIds.ts @@ -24,7 +24,8 @@ const validRewardIds: Set = new Set([ ChallengeName.TrackUpload, ChallengeName.ListenStreak, ChallengeName.OneShot, - ChallengeName.ListenStreakEndless + ChallengeName.ListenStreakEndless, + ChallengeName.FirstWeeklyComment ]) /** Pulls rewards from remoteconfig */ diff --git a/packages/web/src/pages/rewards-page/components/modals/ChallengeRewardsModal/FirstWeeklyCommentChallengeModalContent.tsx b/packages/web/src/pages/rewards-page/components/modals/ChallengeRewardsModal/FirstWeeklyCommentChallengeModalContent.tsx new file mode 100644 index 00000000000..f92e554dbed --- /dev/null +++ b/packages/web/src/pages/rewards-page/components/modals/ChallengeRewardsModal/FirstWeeklyCommentChallengeModalContent.tsx @@ -0,0 +1,16 @@ +import { DefaultChallengeContent } from './DefaultChallengeContent' +import { type DefaultChallengeProps } from './types' + +export const FirstWeeklyCommentChallengeModalContent = ( + props: DefaultChallengeProps +) => { + const { challenge } = props + const modifiedChallenge = challenge + ? { + ...challenge, + totalAmount: challenge?.amount ?? 0 + } + : undefined + + return +} diff --git a/packages/web/src/pages/rewards-page/components/modals/ChallengeRewardsModal/challengeContentRegistry.ts b/packages/web/src/pages/rewards-page/components/modals/ChallengeRewardsModal/challengeContentRegistry.ts index 0c71790ff70..fef9c723f19 100644 --- a/packages/web/src/pages/rewards-page/components/modals/ChallengeRewardsModal/challengeContentRegistry.ts +++ b/packages/web/src/pages/rewards-page/components/modals/ChallengeRewardsModal/challengeContentRegistry.ts @@ -2,6 +2,7 @@ import { ChallengeName } from '@audius/common/models' import { AudioMatchingRewardsModalContent } from './AudioMatchingRewardsModalContent' import { DefaultChallengeContent } from './DefaultChallengeContent' +import { FirstWeeklyCommentChallengeModalContent } from './FirstWeeklyCommentChallengeModalContent' import { ListenStreakChallengeModalContent } from './ListenStreakChallengeModalContent' import { OneShotChallengeModalContent } from './OneShotChallengeModalContent' import { ReferralsChallengeModalContent } from './ReferralsChallengeModalContent' @@ -19,6 +20,8 @@ export const challengeContentRegistry: ChallengeContentMap = { ListenStreakChallengeModalContent as ChallengeContentComponent, [ChallengeName.OneShot]: OneShotChallengeModalContent as ChallengeContentComponent, + [ChallengeName.FirstWeeklyComment]: + FirstWeeklyCommentChallengeModalContent as ChallengeContentComponent, [ChallengeName.Referrals]: ReferralsChallengeModalContent as ChallengeContentComponent, [ChallengeName.ReferralsVerified]: diff --git a/packages/web/src/pages/rewards-page/config.tsx b/packages/web/src/pages/rewards-page/config.tsx index c55f7a83111..2eca23d35b5 100644 --- a/packages/web/src/pages/rewards-page/config.tsx +++ b/packages/web/src/pages/rewards-page/config.tsx @@ -215,7 +215,8 @@ const webChallengesConfig: Record = { 'verified-upload': {}, 'trending-underground': {}, tut: {}, - [ChallengeName.OneShot]: {} + [ChallengeName.OneShot]: {}, + [ChallengeName.FirstWeeklyComment]: {} } export const getChallengeConfig = (id: ChallengeRewardID) => ({