Skip to content

Commit

Permalink
feat(be): update get quest api
Browse files Browse the repository at this point in the history
  • Loading branch information
harisato committed Oct 18, 2023
1 parent 3b456b5 commit c63d875
Show file tree
Hide file tree
Showing 8 changed files with 73 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,13 @@ array_relationships:
table:
name: social_activities
schema: public
- name: levels
using:
foreign_key_constraint_on:
column: user_id
table:
name: user_level
schema: public
select_permissions:
- role: anonymous
permission:
Expand Down
16 changes: 16 additions & 0 deletions hasura/metadata/databases/punkga-pg/tables/public_user_level.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,19 @@
table:
name: user_level
schema: public
select_permissions:
- role: anonymous
permission:
columns:
- user_id
- level
- xp
filter: {}
- role: user
permission:
columns:
- user_id
- level
- xp
filter: {}
allow_aggregations: true
6 changes: 6 additions & 0 deletions src/quest/dto/get-all-campaign-quest.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
import { ApiPropertyOptional } from '@nestjs/swagger';

export class GetAllCampaignQuestRequestDto {
@ApiPropertyOptional()
user_id: string;
}
7 changes: 5 additions & 2 deletions src/quest/quest.controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
Controller,
Get,
Post,
Query,
UploadedFiles,
UseGuards,
UseInterceptors,
Expand All @@ -16,15 +17,17 @@ import { Role } from '../auth/role.enum';
import { RolesGuard } from '../auth/role.guard';
import { UploadNftImageRequestDto } from './dto/upload-nft-image.dto';
import { QuestService } from './quest.service';
import { GetAllCampaignQuestRequestDto } from './dto/get-all-campaign-quest.dto';

@Controller('quest')
@ApiTags('quest')
export class QuestController {
constructor(private readonly questSvc: QuestService) {}

@Get()
getAllCampaignQuest() {
return this.questSvc.getAllCampaignQuest();
getAllCampaignQuest(@Query() query: GetAllCampaignQuestRequestDto) {
const userId = query.user_id;
return this.questSvc.getAllCampaignQuest(userId);
}

@UseGuards(AuthGuard, RolesGuard)
Expand Down
3 changes: 2 additions & 1 deletion src/quest/quest.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,10 @@ import { QuestController } from './quest.controller';
import { JwtModule } from '@nestjs/jwt';
import { QuestGraphql } from './quest.graphql';
import { GraphqlModule } from '../graphql/graphql.module';
import { UserModule } from '../user/user.module';

@Module({
imports: [FilesModule, JwtModule, GraphqlModule],
imports: [FilesModule, JwtModule, GraphqlModule, UserModule],
providers: [QuestService, QuestGraphql],
controllers: [QuestController],
exports: [],
Expand Down
22 changes: 17 additions & 5 deletions src/quest/quest.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,16 @@ import { Injectable, Logger } from '@nestjs/common';

import { FilesService } from '../files/files.service';
import { QuestGraphql } from './quest.graphql';
import { UserGraphql } from '../user/user.graphql';

@Injectable()
export class QuestService {
private readonly logger = new Logger(QuestService.name);

constructor(
private filesService: FilesService,
private questGraphql: QuestGraphql
private questGraphql: QuestGraphql,
private userGraphql: UserGraphql
) {}

async upload(file: Express.Multer.File) {
Expand All @@ -27,9 +29,10 @@ export class QuestService {
}
}

verifyQuestCondition(condition: any, userId?: string) {
if (condition.level && userId) {
verifyQuestCondition(condition: any, currentLevel?: number) {
if (condition.level && currentLevel) {
// check user level
return currentLevel >= condition.level;
}

if (
Expand All @@ -52,15 +55,24 @@ export class QuestService {
const campaigns = await this.questGraphql.getAllCampaignQuest();
if (campaigns.length === 0) return campaigns;

// let result: any;
let currentLevel = 0;
if (userId) {
const user = await this.userGraphql.queryUserLevel({
id: userId,
});

if (user?.levels[0]) {
currentLevel = user.levels[0].level;
}
}

campaigns.forEach((campaign) => {
// let data: any;
// data.id = campaign.id;
campaign.campaign_quests.forEach((quest, index) => {
campaign.campaign_quests[index].unlock = this.verifyQuestCondition(
quest.condition,
userId
currentLevel
);
});
});
Expand Down
19 changes: 19 additions & 0 deletions src/user/user.graphql.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,25 @@ export class UserGraphql {
private graphqlSvc: GraphqlService
) {}

async queryUserLevel(variables) {
const result = await this.graphqlSvc.query(
this.configSvc.get<string>('graphql.endpoint'),
'',
`query authorizer_users($id: bpchar!) {
authorizer_users(where: {id: {_eq: $id}}) {
levels {
xp
level
}
}
}`,
'authorizer_users',
variables
);

return result.data.authorizer_users[0];
}

updateUserProfile(token: string, variables: any) {
return this.graphqlSvc.query(
this.configSvc.get<string>('graphql.endpoint'),
Expand Down
1 change: 1 addition & 0 deletions src/user/user.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,6 @@ import { UserGraphql } from './user.graphql';
imports: [JwtModule, GraphqlModule, FilesModule],
providers: [UserService, UserGraphql],
controllers: [UserController],
exports: [UserGraphql],
})
export class UserModule {}

0 comments on commit c63d875

Please sign in to comment.