From 2a472224ee86c6113692ce9d8ca6c36d15d50b62 Mon Sep 17 00:00:00 2001 From: harisato Date: Fri, 11 Oct 2024 11:27:32 +0700 Subject: [PATCH] feat: update flow approve character --- hasura/metadata/query_collections.yaml | 2 +- .../down.sql | 4 ++ .../up.sql | 2 + .../down.sql | 1 + .../up.sql | 1 + .../down.sql | 1 + .../up.sql | 5 ++ .../dto/approve-story-character.dto.ts | 5 +- .../story-event/story-event.controller.ts | 5 +- .../story-event/story-event.graphql.ts | 28 ++++++++ .../story-event/story-event.service.ts | 66 ++++++++++++------- 11 files changed, 90 insertions(+), 30 deletions(-) create mode 100644 hasura/migrations/punkga-pg/1728617687182_alter_table_public_story_character_add_column_story_event_submission/down.sql create mode 100644 hasura/migrations/punkga-pg/1728617687182_alter_table_public_story_character_add_column_story_event_submission/up.sql create mode 100644 hasura/migrations/punkga-pg/1728617695066_alter_table_public_story_character_alter_column_story_event_submission/down.sql create mode 100644 hasura/migrations/punkga-pg/1728617695066_alter_table_public_story_character_alter_column_story_event_submission/up.sql create mode 100644 hasura/migrations/punkga-pg/1728617720571_set_fk_public_story_character_story_event_submission_id/down.sql create mode 100644 hasura/migrations/punkga-pg/1728617720571_set_fk_public_story_character_story_event_submission_id/up.sql diff --git a/hasura/metadata/query_collections.yaml b/hasura/metadata/query_collections.yaml index c9529e3..273adf1 100644 --- a/hasura/metadata/query_collections.yaml +++ b/hasura/metadata/query_collections.yaml @@ -1648,7 +1648,7 @@ id } } - } + } - name: User - Unlike character query: | mutation UserUnLikeCharacter ($story_character_id: Int!) { diff --git a/hasura/migrations/punkga-pg/1728617687182_alter_table_public_story_character_add_column_story_event_submission/down.sql b/hasura/migrations/punkga-pg/1728617687182_alter_table_public_story_character_add_column_story_event_submission/down.sql new file mode 100644 index 0000000..9083b13 --- /dev/null +++ b/hasura/migrations/punkga-pg/1728617687182_alter_table_public_story_character_add_column_story_event_submission/down.sql @@ -0,0 +1,4 @@ +-- Could not auto-generate a down migration. +-- Please write an appropriate down migration for the SQL below: +-- alter table "public"."story_character" add column "story_event_submission" integer +-- null; diff --git a/hasura/migrations/punkga-pg/1728617687182_alter_table_public_story_character_add_column_story_event_submission/up.sql b/hasura/migrations/punkga-pg/1728617687182_alter_table_public_story_character_add_column_story_event_submission/up.sql new file mode 100644 index 0000000..8670a3e --- /dev/null +++ b/hasura/migrations/punkga-pg/1728617687182_alter_table_public_story_character_add_column_story_event_submission/up.sql @@ -0,0 +1,2 @@ +alter table "public"."story_character" add column "story_event_submission" integer + null; diff --git a/hasura/migrations/punkga-pg/1728617695066_alter_table_public_story_character_alter_column_story_event_submission/down.sql b/hasura/migrations/punkga-pg/1728617695066_alter_table_public_story_character_alter_column_story_event_submission/down.sql new file mode 100644 index 0000000..4af3f56 --- /dev/null +++ b/hasura/migrations/punkga-pg/1728617695066_alter_table_public_story_character_alter_column_story_event_submission/down.sql @@ -0,0 +1 @@ +alter table "public"."story_character" rename column "story_event_submission_id" to "story_event_submission"; diff --git a/hasura/migrations/punkga-pg/1728617695066_alter_table_public_story_character_alter_column_story_event_submission/up.sql b/hasura/migrations/punkga-pg/1728617695066_alter_table_public_story_character_alter_column_story_event_submission/up.sql new file mode 100644 index 0000000..f64f1ae --- /dev/null +++ b/hasura/migrations/punkga-pg/1728617695066_alter_table_public_story_character_alter_column_story_event_submission/up.sql @@ -0,0 +1 @@ +alter table "public"."story_character" rename column "story_event_submission" to "story_event_submission_id"; diff --git a/hasura/migrations/punkga-pg/1728617720571_set_fk_public_story_character_story_event_submission_id/down.sql b/hasura/migrations/punkga-pg/1728617720571_set_fk_public_story_character_story_event_submission_id/down.sql new file mode 100644 index 0000000..03a53bb --- /dev/null +++ b/hasura/migrations/punkga-pg/1728617720571_set_fk_public_story_character_story_event_submission_id/down.sql @@ -0,0 +1 @@ +alter table "public"."story_character" drop constraint "story_character_story_event_submission_id_fkey"; diff --git a/hasura/migrations/punkga-pg/1728617720571_set_fk_public_story_character_story_event_submission_id/up.sql b/hasura/migrations/punkga-pg/1728617720571_set_fk_public_story_character_story_event_submission_id/up.sql new file mode 100644 index 0000000..07d0f6f --- /dev/null +++ b/hasura/migrations/punkga-pg/1728617720571_set_fk_public_story_character_story_event_submission_id/up.sql @@ -0,0 +1,5 @@ +alter table "public"."story_character" + add constraint "story_character_story_event_submission_id_fkey" + foreign key ("story_event_submission_id") + references "public"."story_event_submission" + ("id") on update set null on delete set null; diff --git a/src/modules/story-event/dto/approve-story-character.dto.ts b/src/modules/story-event/dto/approve-story-character.dto.ts index 759807b..6411d6c 100644 --- a/src/modules/story-event/dto/approve-story-character.dto.ts +++ b/src/modules/story-event/dto/approve-story-character.dto.ts @@ -2,8 +2,9 @@ import { ApiProperty } from '@nestjs/swagger'; import { StoryCharacterStatus } from '../story-event.enum'; export class UpdateCharacterStatusRequestDto { - @ApiProperty() - ids: number[]; + // @ApiProperty({ type: [Number], example: [1] }) + @ApiProperty({ type: [Number] }) + ids: string; @ApiProperty({ enum: [StoryCharacterStatus.Approved, StoryCharacterStatus.Rejected], diff --git a/src/modules/story-event/story-event.controller.ts b/src/modules/story-event/story-event.controller.ts index 151cf95..7325df3 100644 --- a/src/modules/story-event/story-event.controller.ts +++ b/src/modules/story-event/story-event.controller.ts @@ -58,11 +58,12 @@ export class StoryEventController { @Post('submission/character/approve') @UseGuards(AuthGuard, RolesGuard) @ApiBearerAuth() - @UseInterceptors(AuthUserInterceptor) + @ApiConsumes('multipart/form-data') + @UseInterceptors(AuthUserInterceptor, AnyFilesInterceptor()) @SetRequestTimeout() @Roles(Role.Admin) approveCharacter(@Body() data: UpdateCharacterStatusRequestDto) { - return this.storyEventSvc.approveCharacter(data.ids, data.status); + return this.storyEventSvc.approveCharacter(data); } @Post('submission/manga') diff --git a/src/modules/story-event/story-event.graphql.ts b/src/modules/story-event/story-event.graphql.ts index c9b2a72..5731dd9 100644 --- a/src/modules/story-event/story-event.graphql.ts +++ b/src/modules/story-event/story-event.graphql.ts @@ -395,6 +395,34 @@ export class StoryEventGraphql { ); } + async getCharacters(variables: any) { + const headers = { + 'x-hasura-admin-secret': this.configSvc.get( + 'graphql.adminSecret' + ), + }; + + return this.graphqlSvc.query( + this.configSvc.get('graphql.endpoint'), + '', + `query story_character($ids: [Int!]!) { + story_character(where: {id: {_in: $ids}}) { + id + name + user_id + ipfs_url + story_event_submission_id + authorizer_user { + active_evm_address + } + } + }`, + 'story_character', + variables, + headers + ); + } + async insertUserCollectCharacter(variables: any) { const headers = { 'x-hasura-admin-secret': this.configSvc.get( diff --git a/src/modules/story-event/story-event.service.ts b/src/modules/story-event/story-event.service.ts index 042f718..3583420 100644 --- a/src/modules/story-event/story-event.service.ts +++ b/src/modules/story-event/story-event.service.ts @@ -26,6 +26,7 @@ import { } from './story-event.enum'; import { StoryEventGraphql } from './story-event.graphql'; import { getBytes32FromIpfsHash } from './utils'; +import { UpdateCharacterStatusRequestDto } from './dto/approve-story-character.dto'; @Injectable() export class StoryEventService { @@ -143,33 +144,12 @@ export class StoryEventService { ipfs_url: `${ipfsDisplayUrl}/${metadataCID}`, user_id: userId, status: StoryCharacterStatus.Submitted, + story_event_submission_id: + result.data.insert_story_event_submission_one.id, }, }); if (insertCharacterResult.errors) return insertCharacterResult; - const jobData = { - name, - user_id: userId, - metadata_ipfs: `${ipfsDisplayUrl}/${metadataCID}`, - charater_id: insertCharacterResult.data.insert_story_character_one.id, - submission_id: result.data.insert_story_event_submission_one.id, - user_wallet_address: userWalletAddress, - }; - - // create job - await this.storyEventQueue.add( - 'event', - { - type: SubmissionType.Character, - data: jobData, - }, - { - removeOnComplete: true, - removeOnFail: 10, - attempts: 5, - backoff: 5000, - } - ); return result; @@ -183,11 +163,47 @@ export class StoryEventService { } } - async approveCharacter(ids: number[], status: StoryCharacterStatus) { + async approveCharacter(data: UpdateCharacterStatusRequestDto) { + const { ids, status } = data; + const arrIds = ids.split(',').map((id) => Number(id)); const { token } = ContextProvider.getAuthUser(); + + if (status === StoryCharacterStatus.Approved) { + const queryCharactersResult = await this.storyEventGraphql.getCharacters({ + ids: arrIds, + }); + if (queryCharactersResult.errors) return queryCharactersResult; + const characters = queryCharactersResult.data.story_character; + for (const character of characters) { + const jobData = { + name: character.name, + user_id: character.user_id, + metadata_ipfs: character.ipfs_url, + charater_id: character.id, + submission_id: character.story_event_submission_id, + user_wallet_address: character.authorizer_user.active_evm_address, + }; + + // create job + await this.storyEventQueue.add( + 'event', + { + type: SubmissionType.Character, + data: jobData, + }, + { + removeOnComplete: true, + removeOnFail: 10, + attempts: 5, + backoff: 5000, + } + ); + } + } + return this.storyEventGraphql.updateStoryCharacterStatus( { - ids, + ids: arrIds, status, }, token