diff --git a/docker-compose.yml b/docker-compose.yml index c011f316..8b700134 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -48,6 +48,7 @@ services: - ./packages/discord-bot:/usr/src/app/packages/discord-bot - ./package.json:/usr/src/app/package.json - ./tsconfig.base.json:/usr/src/app/tsconfig.base.json + - ./schema.graphql:/usr/src/app/schema.graphql - ./yarn.lock:/usr/src/app/yarn.lock environment: PORT: 4000 diff --git a/hasura/metadata/actions.graphql b/hasura/metadata/actions.graphql index 9c1e9afd..1e5c412d 100644 --- a/hasura/metadata/actions.graphql +++ b/hasura/metadata/actions.graphql @@ -44,6 +44,7 @@ input CreateQuestInput { external_link : String repetition : QuestRepetition_ActionEnum cooldown : Int + skills_id : [uuid]! } input CreateQuestCompletionInput { @@ -77,5 +78,6 @@ type CreateQuestCompletionOutput { type UpdateQuestCompletionOutput { success : Boolean! error : String + quest_completion_id : uuid } diff --git a/hasura/metadata/actions.yaml b/hasura/metadata/actions.yaml index 366c6a20..989cfd9d 100644 --- a/hasura/metadata/actions.yaml +++ b/hasura/metadata/actions.yaml @@ -55,6 +55,30 @@ custom_types: objects: - name: UpdateBoxProfileResponse - name: CreateQuestOutput + relationships: + - remote_table: + schema: public + name: quest + name: quest + type: object + field_mapping: + quest_id: id - name: CreateQuestCompletionOutput + relationships: + - remote_table: + schema: public + name: quest_completion + name: quest_completion + type: object + field_mapping: + quest_completion_id: id - name: UpdateQuestCompletionOutput + relationships: + - remote_table: + schema: public + name: quest_completion + name: quest_completion + type: object + field_mapping: + quest_completion_id: id scalars: [] diff --git a/hasura/metadata/tables.yaml b/hasura/metadata/tables.yaml index 2ad82a76..4b180dd3 100644 --- a/hasura/metadata/tables.yaml +++ b/hasura/metadata/tables.yaml @@ -475,6 +475,7 @@ - guild_id - id filter: {} + allow_aggregations: true - role: public permission: columns: @@ -489,6 +490,7 @@ - status - repetition filter: {} + allow_aggregations: true update_permissions: - role: player permission: @@ -496,13 +498,22 @@ - cooldown - description - external_link + - guild_id - repetition - status - title filter: created_by_player_id: _eq: X-Hasura-User-Id - check: null + check: + _or: + - repetition: + _ne: RECURRING + - _and: + - repetition: + _eq: RECURRING + - cooldown: + _is_null: false - table: schema: public name: quest_completion @@ -520,12 +531,13 @@ - role: player permission: columns: - - submitted_at + - completed_by_player_id + - id + - quest_id - status - submission_link - submission_text - - completed_by_player_id - - quest_id + - submitted_at filter: {} - role: public permission: diff --git a/packages/backend/src/handlers/actions/quests/createQuest/createQuest.ts b/packages/backend/src/handlers/actions/quests/createQuest/createQuest.ts index 6063671f..240834fb 100644 --- a/packages/backend/src/handlers/actions/quests/createQuest/createQuest.ts +++ b/packages/backend/src/handlers/actions/quests/createQuest/createQuest.ts @@ -35,10 +35,15 @@ export async function createQuest( throw new Error('Player not allowed to create quests'); } + const { skills_id: skillsId, ...questValues } = quest; + const questInput: Quest_Insert_Input = { - ...quest, + ...questValues, repetition: questRepetition, created_by_player_id: playerId, + quest_skills: { + data: skillsId.map(s => ({ skill_id: s })), + }, }; const data = await client.CreateQuest({ objects: questInput }); diff --git a/packages/backend/src/handlers/actions/quests/createQuest/permissions.ts b/packages/backend/src/handlers/actions/quests/createQuest/permissions.ts index b26faea1..09342cd0 100644 --- a/packages/backend/src/handlers/actions/quests/createQuest/permissions.ts +++ b/packages/backend/src/handlers/actions/quests/createQuest/permissions.ts @@ -17,7 +17,10 @@ export async function isAllowedToCreateQuest( const pSEEDBalance = await pSEEDContract.balanceOf(playerAddress); const pSEEDDecimals = await pSEEDContract.decimals(); const minimumPooledSeedBalance = new BN(100); - const pSEEDBalanceInDecimal = amountToDecimal(pSEEDBalance, pSEEDDecimals); + const pSEEDBalanceInDecimal = amountToDecimal( + pSEEDBalance.toString(), + pSEEDDecimals, + ); const allowed = new BN(pSEEDBalanceInDecimal).gt(minimumPooledSeedBalance); diff --git a/packages/backend/src/handlers/actions/quests/updateCompletion/updateCompletion.ts b/packages/backend/src/handlers/actions/quests/updateCompletion/updateCompletion.ts index b91e888d..35af1bb4 100644 --- a/packages/backend/src/handlers/actions/quests/updateCompletion/updateCompletion.ts +++ b/packages/backend/src/handlers/actions/quests/updateCompletion/updateCompletion.ts @@ -59,9 +59,9 @@ export async function updateCompletion( }); } - return { success: true, + quest_completion_id: questCompletion.id, }; } diff --git a/schema.graphql b/schema.graphql index 4886cca7..98e3c241 100644 --- a/schema.graphql +++ b/schema.graphql @@ -211,6 +211,7 @@ input CreateQuestCompletionInput { type CreateQuestCompletionOutput { error: String + quest_completion: quest_completion quest_completion_id: uuid success: Boolean! } @@ -221,11 +222,13 @@ input CreateQuestInput { external_link: String guild_id: uuid! repetition: QuestRepetition_ActionEnum + skills_id: [uuid]! title: String! } type CreateQuestOutput { error: String + quest: quest quest_id: uuid success: Boolean! } @@ -8159,6 +8162,8 @@ input UpdateQuestCompletionInput { type UpdateQuestCompletionOutput { error: String + quest_completion: quest_completion + quest_completion_id: uuid success: Boolean! }