Skip to content

Commit

Permalink
Merge branch 'dev' into staging
Browse files Browse the repository at this point in the history
  • Loading branch information
harisato committed Mar 20, 2024
2 parents 04a7396 + aa257ce commit 1f208ad
Show file tree
Hide file tree
Showing 7 changed files with 101 additions and 6 deletions.
24 changes: 24 additions & 0 deletions hasura/metadata/query_collections.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1087,6 +1087,25 @@
}
}
}
- name: Admin - Search users
query: |
query search_users ($text: String = "%%", $offset: Int = 0, $limit: Int = 100) {
authorizer_users(order_by: {created_at:desc}, offset: $offset, limit: $limit, where: {_or:[{email:{_like:$text}},{nickname:{_like:$text}}]}) {
id
nickname
email
created_at
updated_at
authorizer_users_user_wallet {
address
}
}
authorizer_users_aggregate(where: {_or:[{email:{_like:$text}},{nickname:{_like:$text}}]}) {
aggregate {
count
}
}
}
- name: Admin - Get All Users
query: |
query GetAllUsers ($limit: Int = 50, $offset: Int = 0) {
Expand All @@ -1100,4 +1119,9 @@
address
}
}
authorizer_users_aggregate {
aggregate {
count
}
}
}
9 changes: 9 additions & 0 deletions hasura/metadata/rest_endpoints.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,15 @@
- GET
name: Admin - Get All Users
url: admin/users
- comment: ""
definition:
query:
collection_name: allowed-queries
query_name: Admin - Search users
methods:
- GET
name: Admin - Search users
url: admin/users/search
- comment: ""
definition:
query:
Expand Down
1 change: 1 addition & 0 deletions src/modules/quest/interface/ireward-info.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,6 @@ export interface IRewardInfo {
requestId: number,
userId: string,
questId?: number
userCampaignId?: number
campaignId?: number
}
40 changes: 38 additions & 2 deletions src/modules/quest/quest.graphql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,42 @@ export class QuestGraphql {
private graphqlSvc: GraphqlService
) { }

async getQuestDetailWithUserCampaign(variables: any) {
const result = await this.graphqlSvc.query(
this.configSvc.get<string>('graphql.endpoint'),
'',
`query quests($id: Int!, $user_id: bpchar!) {
quests(where: {id: {_eq: $id}, status: {_eq: "Published"}}) {
id
name
status
type
repeat
requirement
reward
campaign_id
quests_campaign {
campaign_user(where: {user_id: {_eq: $user_id}}) {
id
}
}
created_at
repeat_quests(order_by: {created_at: desc}, limit: 1) {
id
created_at
}
quest_reward_claimed
}
}
`,
'quests',
variables
);

return result.data.quests[0];
}

async saveUserCampaignReward(
campaignId: number,
userCampaignId: number,
Expand Down Expand Up @@ -279,8 +315,8 @@ export class QuestGraphql {
const result = await this.graphqlSvc.query(
this.configSvc.get<string>('graphql.endpoint'),
'',
`mutation increaseUserCampaignXp($campaign_id: Int!, $user_id: bpchar!, $reward_xp: Int!) {
update_user_campaign(where: {campaign_id: {_eq: $campaign_id}, user_id: {_eq: $user_id}}, _inc: {total_reward_xp: $reward_xp}) {
`mutation increaseUserCampaignXp($user_campaign_id: Int!, $reward_xp: Int!, $_eq: Int = 10) {
update_user_campaign(where: {id: {_eq: $user_campaign_id}}, _inc: {total_reward_xp: $reward_xp}) {
affected_rows
}
}`,
Expand Down
21 changes: 18 additions & 3 deletions src/modules/quest/quest.processor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { RewardStatus } from '../../common/enum';
import { QuestRewardService } from './reward.service';
import { RedisService } from '../redis/redis.service';
import { IRewardInfo } from './interface/ireward-info';
import { UserRewardInfo } from './user-reward';
import { UserCampaignXp, UserRewardInfo } from './user-reward';
import { LevelingService } from '../leveling/leveling.service';
import { MasterWalletService } from '../user-wallet/master-wallet.service';
import { UserLevelGraphql } from '../user-level/user-level.graphql';
Expand Down Expand Up @@ -57,12 +57,12 @@ export class QuestProcessor {
}
}

async mapUserReward(listRewards: any[]) {
async mapUserReward(listRewards: IRewardInfo[]) {
const rewardMap = new Map<string, UserRewardInfo>();

for (let i = 0; i < listRewards.length; i += 1) {
try {
const { userId, questId, campaignId, requestId } = listRewards[i];
const { userId, questId, campaignId, requestId, userCampaignId } = listRewards[i];
const userReward = rewardMap.get(userId) ?? new UserRewardInfo(userId);

if (campaignId) {
Expand Down Expand Up @@ -106,6 +106,10 @@ export class QuestProcessor {

if (quest.reward?.xp) {
userReward.reward.xp += quest.reward?.xp
userReward.userCampaignXp.push({
userCampaignId,
xp: quest.reward?.xp
})
}

if (quest.reward?.nft && quest.reward?.nft.ipfs !== "") {
Expand Down Expand Up @@ -197,6 +201,9 @@ export class QuestProcessor {
const userCampaignRewardIds = [];
const requestLogIds = [];

// userCampaignIds: used for increase total xp of user in campaign
const userCampaignXpIds: UserCampaignXp[] = [];

for (const [, value] of rewardMap.entries()) {
if (value.userXp > 0) {
promises.push(this.userLevelGraphql.insertUserLevel(
Expand All @@ -208,6 +215,7 @@ export class QuestProcessor {
));
}

userCampaignXpIds.push(...value.userCampaignXp);
userQuestIds.push(...value.userQuestIds);
userCampaignRewardIds.push(...value.userCampaignRewardIds);
requestLogIds.push(...value.requestIds);
Expand All @@ -228,6 +236,13 @@ export class QuestProcessor {
log: txHash,
status: 'SUCCEEDED'
})

await Promise.all(userCampaignXpIds.map((userCampaignXp) =>
this.questGraphql.increaseUserCampaignXp({
user_campaign_id: userCampaignXp.userCampaignId,
reward_xp: userCampaignXp.xp
})
));
}

async updateErrorRequest(rewardMap: Map<string, UserRewardInfo>, errorDetail: string) {
Expand Down
6 changes: 5 additions & 1 deletion src/modules/quest/quest.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -137,10 +137,13 @@ export class QuestService {
throw new BadRequestException('User wallet address not found')
}

const quest = await this.questGraphql.getQuestDetail({
const quest = await this.questGraphql.getQuestDetailWithUserCampaign({
id: questId,
user_id: userId
});

const userCampaignId = quest.quests_campaign.campaign_user[0].id;

const rewardStatus = await this.checkRewardService.getClaimRewardStatus(
quest,
userId
Expand Down Expand Up @@ -170,6 +173,7 @@ export class QuestService {
requestId,
userId,
questId,
userCampaignId
}

this.redisClientService.client.rPush('punkga:reward-users', JSON.stringify(rewardInfo))
Expand Down
6 changes: 6 additions & 0 deletions src/modules/quest/user-reward.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,19 @@ class RewardInfo {
nft: NftInfo[] = []
}

export class UserCampaignXp {
userCampaignId: number
xp: number
}

export class UserRewardInfo {
reward: RewardInfo;
userQuestIds: number[] = []
userCampaignRewardIds: number[] = []
requestIds: number[] = []
userXp = 0;
userLevel = 0;
userCampaignXp: UserCampaignXp[] = []

constructor(public userId: string) {
this.reward = new RewardInfo();
Expand Down

0 comments on commit 1f208ad

Please sign in to comment.