diff --git a/backend/src/graphql/queries/Group.ts b/backend/src/graphql/queries/Group.ts index ee01a9177..b6009ddc1 100644 --- a/backend/src/graphql/queries/Group.ts +++ b/backend/src/graphql/queries/Group.ts @@ -31,6 +31,10 @@ export const Group = gql` nameEN } myRole + inviteCodes { + code + redeemedByCount + } } } ` diff --git a/backend/src/graphql/resolvers/inviteCodes.spec.ts b/backend/src/graphql/resolvers/inviteCodes.spec.ts index 94829553c..d38788087 100644 --- a/backend/src/graphql/resolvers/inviteCodes.spec.ts +++ b/backend/src/graphql/resolvers/inviteCodes.spec.ts @@ -1027,12 +1027,12 @@ describe('redeemInviteCode', () => { data: { currentUser: { following: [], - inviteCodes: expect.arrayContaining([ + inviteCodes: [ { code: 'CODE33', redeemedByCount: 0, }, - ]), + ], }, }, errors: undefined, @@ -1061,20 +1061,18 @@ describe('redeemInviteCode', () => { errors: undefined, }) authenticatedUser = await invitingUser.toJson() - await expect(query({ query: currentUser })).resolves.toMatchObject({ + await expect(query({ query: Group })).resolves.toMatchObject({ data: { - currentUser: { - inviteCodes: expect.arrayContaining([ - { - code: 'GRPPBL', - redeemedByCount: 1, - }, - { - code: 'GRPHDN', - redeemedByCount: 0, - }, - ]), - }, + Group: expect.arrayContaining([ + expect.objectContaining({ + inviteCodes: expect.arrayContaining([ + { + code: 'GRPPBL', + redeemedByCount: 1, + }, + ]), + }), + ]), }, errors: undefined, }) @@ -1111,20 +1109,18 @@ describe('redeemInviteCode', () => { }, errors: undefined, }) - await expect(query({ query: currentUser })).resolves.toMatchObject({ + await expect(query({ query: Group })).resolves.toMatchObject({ data: { - currentUser: { - inviteCodes: expect.arrayContaining([ - { - code: 'GRPPBL', - redeemedByCount: 0, - }, - { - code: 'GRPHDN', - redeemedByCount: 1, - }, - ]), - }, + Group: expect.arrayContaining([ + expect.objectContaining({ + inviteCodes: expect.arrayContaining([ + { + code: 'GRPHDN', + redeemedByCount: 1, + }, + ]), + }), + ]), }, errors: undefined, }) @@ -1149,12 +1145,12 @@ describe('redeemInviteCode', () => { data: { currentUser: { following: [], - inviteCodes: expect.arrayContaining([ + inviteCodes: [ { code: 'CODE33', redeemedByCount: 0, }, - ]), + ], }, }, errors: undefined, @@ -1182,21 +1178,18 @@ describe('redeemInviteCode', () => { }, errors: undefined, }) - await expect(query({ query: currentUser })).resolves.toMatchObject({ + await expect(query({ query: Group })).resolves.toMatchObject({ data: { - currentUser: { - following: [], - inviteCodes: expect.arrayContaining([ - { - code: 'GRPPBL', - redeemedByCount: 0, - }, - { - code: 'GRPHDN', - redeemedByCount: 0, - }, - ]), - }, + Group: expect.arrayContaining([ + expect.objectContaining({ + inviteCodes: expect.arrayContaining([ + { + code: 'GRPPBL', + redeemedByCount: 0, + }, + ]), + }), + ]), }, errors: undefined, }) diff --git a/backend/src/graphql/resolvers/inviteCodes.ts b/backend/src/graphql/resolvers/inviteCodes.ts index 5d4638d1d..b17d32dd8 100644 --- a/backend/src/graphql/resolvers/inviteCodes.ts +++ b/backend/src/graphql/resolvers/inviteCodes.ts @@ -151,7 +151,7 @@ export default { await context.database.query({ query: ` MATCH (inviteCode:InviteCode)<-[:GENERATED]-(user:User {id: $user.id}) - WHERE NOT (inviteCode)-[:INVITES_TO]-(:Group) + WHERE NOT (inviteCode)-[:INVITES_TO]->(:Group) AND (inviteCode.expiresAt IS NULL OR inviteCode.expiresAt >= datetime()) RETURN toString(count(inviteCode)) as count `, diff --git a/backend/src/graphql/resolvers/users.ts b/backend/src/graphql/resolvers/users.ts index 294dd771f..ac1964beb 100644 --- a/backend/src/graphql/resolvers/users.ts +++ b/backend/src/graphql/resolvers/users.ts @@ -469,21 +469,17 @@ export default { }, User: { inviteCodes: async (_parent, _args, context: Context, _resolveInfo) => { - const { - user: { id: userId }, - } = context - return ( await context.database.query({ query: ` - MATCH (user:User {id: $userId})-[:GENERATED]->(inviteCodes:InviteCode) + MATCH (user:User {id: $user.id})-[:GENERATED]->(inviteCodes:InviteCode) WHERE NOT (inviteCodes)-[:INVITES_TO]->(:Group) RETURN inviteCodes {.*} ORDER BY inviteCodes.createdAt ASC `, - variables: { userId }, + variables: { user: context.user }, }) - ).records + ).records.map((record) => record.get('inviteCodes')) }, emailNotificationSettings: async (parent, _params, _context, _resolveInfo) => { return [ @@ -686,7 +682,6 @@ export default { shouted: '-[:SHOUTED]->(related:Post)', categories: '-[:CATEGORIZED]->(related:Category)', badgeTrophies: '<-[:REWARDED]-(related:Badge)', - inviteCodes: '-[:GENERATED]->(related:InviteCode)', }, }), },