From 743b2255b08978f5c8bfe360e1bc05ec12711d22 Mon Sep 17 00:00:00 2001 From: Ramin Date: Wed, 15 May 2024 13:57:43 +0330 Subject: [PATCH 01/11] improve projectBySlug query --- src/resolvers/projectResolver.ts | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/resolvers/projectResolver.ts b/src/resolvers/projectResolver.ts index fe4ff09c7..032949ca3 100644 --- a/src/resolvers/projectResolver.ts +++ b/src/resolvers/projectResolver.ts @@ -7,6 +7,7 @@ import { ArgsType, Ctx, Field, + Info, InputType, Int, Mutation, @@ -855,7 +856,14 @@ export class ProjectResolver { @Arg('connectedWalletUserId', _type => Int, { nullable: true }) connectedWalletUserId: number, @Ctx() { req: { user } }: ApolloContext, + @Info() info: any, ) { + const requestedFields = info.fieldNodes.flatMap(node => + node.selectionSet.selections.map(selection => selection.name.value), + ); + console.log('-------------------------'); + console.log(requestedFields); + console.log('-------------------------'); const viewerUserId = connectedWalletUserId || user?.userId; let isOwnerOfProject = false; From e86fc4657d0f157a1789e0d8a2f9d3561f6ee54c Mon Sep 17 00:00:00 2001 From: Ramin Date: Thu, 16 May 2024 18:16:25 +0330 Subject: [PATCH 02/11] add graphql-fields --- package-lock.json | 6 ++++++ package.json | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index fbbf77f0a..61f70ac59 100644 --- a/package-lock.json +++ b/package-lock.json @@ -47,6 +47,7 @@ "form-data": "^3.0.1", "google-spreadsheet": "^3.2.0", "graphql": "16.8.1", + "graphql-fields": "^2.0.3", "graphql-tag": "^2.12.6", "graphql-upload": "15.0.2", "handlebars": "4.7.7", @@ -11943,6 +11944,11 @@ "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" } }, + "node_modules/graphql-fields": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/graphql-fields/-/graphql-fields-2.0.3.tgz", + "integrity": "sha512-x3VE5lUcR4XCOxPIqaO4CE+bTK8u6gVouOdpQX9+EKHr+scqtK5Pp/l8nIGqIpN1TUlkKE6jDCCycm/WtLRAwA==" + }, "node_modules/graphql-query-complexity": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/graphql-query-complexity/-/graphql-query-complexity-0.12.0.tgz", diff --git a/package.json b/package.json index c16a0ecf5..a2ff486df 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "form-data": "^3.0.1", "google-spreadsheet": "^3.2.0", "graphql": "16.8.1", + "graphql-fields": "^2.0.3", "graphql-tag": "^2.12.6", "graphql-upload": "15.0.2", "handlebars": "4.7.7", @@ -85,13 +86,13 @@ "@types/dotenv": "^8.2.0", "@types/express": "^4.17.21", "@types/graphql-upload": "15.0.2", + "@types/html-to-text": "^9.0.0", "@types/jsonwebtoken": "^8.5.0", "@types/lodash": "^4.14.197", "@types/marked": "^4.0.8", "@types/mocha": "^8.2.1", "@types/node": "^14.14.31", "@types/node-cron": "^3.0.0", - "@types/html-to-text": "^9.0.0", "@typescript-eslint/eslint-plugin": "^7.2.0", "@typescript-eslint/parser": "^7.2.0", "chai": "^4.3.0", @@ -202,6 +203,7 @@ "test:bootstrap": "NODE_ENV=test mocha ./test/pre-test-scripts.ts ./src/server/bootstrap.test.ts", "test:utils": "NODE_ENV=test mocha ./src/utils/utils.test.ts", "start": "NODE_ENV=development ts-node-dev --project ./tsconfig.json --respawn ./src/index.ts", + "start:test": "NODE_ENV=development ts-node-dev --project ./tsconfig.json --respawn ./test.ts", "serve": "pm2 startOrRestart ecosystem.config.js --node-args='--max-old-space-size=8192'", "db:migrate:run:test": "NODE_ENV=test npx typeorm-ts-node-commonjs migration:run -d ./src/ormconfig.ts", "db:migrate:revert:test": "NODE_ENV=test npx typeorm-ts-node-commonjs migration:revert -d ./src/ormconfig.ts", From 05a6f07808b7214ddeaa87448a039e32097b03d1 Mon Sep 17 00:00:00 2001 From: Ramin Date: Thu, 16 May 2024 18:22:09 +0330 Subject: [PATCH 03/11] add getVerificationFormStatusByProjectId --- src/repositories/projectVerificationRepository.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/repositories/projectVerificationRepository.ts b/src/repositories/projectVerificationRepository.ts index febc002f2..c3299900f 100644 --- a/src/repositories/projectVerificationRepository.ts +++ b/src/repositories/projectVerificationRepository.ts @@ -328,6 +328,17 @@ export const updateManagingFundsOfProjectVerification = async (params: { return projectVerificationForm?.save(); }; +export const getVerificationFormStatusByProjectId = async ( + projectId: number, +): Promise => { + return ProjectVerificationForm.createQueryBuilder('project_verification_form') + .select(['project_verification_form.status']) + .where(`project_verification_form.projectId=:projectId`, { + projectId, + }) + .getOne(); +}; + export const getVerificationFormByProjectId = async ( projectId: number, ): Promise => { From 6404b3371cf37f2021f020a5373cec2cc98f1852 Mon Sep 17 00:00:00 2001 From: Ramin Date: Thu, 16 May 2024 18:22:34 +0330 Subject: [PATCH 04/11] refactor projectBySlug --- src/resolvers/projectResolver.ts | 172 ++++++++++++++++++++----------- 1 file changed, 112 insertions(+), 60 deletions(-) diff --git a/src/resolvers/projectResolver.ts b/src/resolvers/projectResolver.ts index 032949ca3..0cb10693b 100644 --- a/src/resolvers/projectResolver.ts +++ b/src/resolvers/projectResolver.ts @@ -1,5 +1,5 @@ import { Max, Min } from 'class-validator'; -import { Brackets, Repository } from 'typeorm'; +import { Brackets, getMetadataArgsStorage, Repository } from 'typeorm'; import { Service } from 'typedi'; import { Arg, @@ -16,6 +16,7 @@ import { registerEnumType, Resolver, } from 'type-graphql'; +import graphqlFields from 'graphql-fields'; import { SelectQueryBuilder } from 'typeorm/query-builder/SelectQueryBuilder'; import { ObjectLiteral } from 'typeorm/common/ObjectLiteral'; import { Reaction } from '../entities/reaction'; @@ -78,7 +79,7 @@ import { FilterProjectQueryInputParams, filterProjectsQuery, findProjectById, - findProjectBySlugWithoutAnyJoin, + findProjectIdBySlug, totalProjectsPerDate, totalProjectsPerDateByMonthAndYear, userIsOwnerOfProject, @@ -86,7 +87,7 @@ import { import { sortTokensByOrderAndAlphabets } from '../utils/tokenUtils'; import { getNotificationAdapter } from '../adapters/adaptersFactory'; import { NETWORK_IDS } from '../provider'; -import { getVerificationFormByProjectId } from '../repositories/projectVerificationRepository'; +import { getVerificationFormStatusByProjectId } from '../repositories/projectVerificationRepository'; import { resourcePerDateReportValidator, validateWithJoiSchema, @@ -850,6 +851,13 @@ export class ProjectResolver { return project; } + // Helper method to get the fields of the Project entity + private getEntityFields(entity: typeof Project): string[] { + const metadata = getMetadataArgsStorage(); + const columns = metadata.columns.filter(col => col.target === entity); + return columns.map(col => col.propertyName); + } + @Query(_returns => ProjectBySlugResponse) async projectBySlug( @Arg('slug') slug: string, @@ -858,50 +866,83 @@ export class ProjectResolver { @Ctx() { req: { user } }: ApolloContext, @Info() info: any, ) { - const requestedFields = info.fieldNodes.flatMap(node => - node.selectionSet.selections.map(selection => selection.name.value), - ); - console.log('-------------------------'); - console.log(requestedFields); - console.log('-------------------------'); - const viewerUserId = connectedWalletUserId || user?.userId; - let isOwnerOfProject = false; - - // ensure it's the owner - if (viewerUserId) { - isOwnerOfProject = await userIsOwnerOfProject(viewerUserId, slug); - } - - const minimalProject = await findProjectBySlugWithoutAnyJoin(slug); + const minimalProject = await findProjectIdBySlug(slug); if (!minimalProject) { throw new Error(i18n.__(translationErrorMessagesKeys.PROJECT_NOT_FOUND)); } - const campaignSlugs = (await getAllProjectsRelatedToActiveCampaigns())[ - minimalProject.id - ]; + + // Extract requested fields + const fields = graphqlFields(info); + const projectFields = this.getEntityFields(Project); + + // Filter requested fields to only include those in the Project entity + const selectedFields = Object.keys(fields).filter(field => + projectFields.includes(field), + ); + + // Dynamically build the select fields + const selectFields = selectedFields.map(field => `project.${field}`); let query = this.projectRepository .createQueryBuilder('project') + .select(selectFields) .where(`project.id = :id`, { id: minimalProject.id, }) - .leftJoinAndSelect('project.status', 'status') - .leftJoinAndSelect( - 'project.categories', - 'categories', - 'categories.isActive = :isActive', - { isActive: true }, - ) - .leftJoinAndSelect('categories.mainCategory', 'mainCategory') - .leftJoinAndSelect('project.organization', 'organization') - .leftJoinAndSelect('project.addresses', 'addresses') - .leftJoinAndSelect('project.socialMedia', 'socialMedia') - .leftJoinAndSelect('project.anchorContracts', 'anchor_contract_address') - .leftJoinAndSelect('project.projectPower', 'projectPower') - .leftJoinAndSelect('project.projectInstantPower', 'projectInstantPower') - .leftJoinAndSelect('project.qfRounds', 'qfRounds') - .leftJoinAndSelect('project.projectFuturePower', 'projectFuturePower') - .leftJoinAndMapMany( + .leftJoinAndSelect('project.status', 'status'); + + if (fields.categories) { + query = query + .leftJoinAndSelect( + 'project.categories', + 'categories', + 'categories.isActive = :isActive', + { isActive: true }, + ) + .leftJoinAndSelect('categories.mainCategory', 'mainCategory') + .orderBy({ + 'mainCategory.title': 'ASC', + 'categories.name': 'ASC', + }); + } + if (fields.organization) { + query = query.leftJoinAndSelect('project.organization', 'organization'); + } + if (fields.addresses) { + query = query.leftJoinAndSelect('project.addresses', 'addresses'); + } + if (fields.socialMedia) { + query = query.leftJoinAndSelect('project.socialMedia', 'socialMedia'); + } + if (fields.anchorContracts) { + query = query.leftJoinAndSelect( + 'project.anchorContracts', + 'anchor_contract_address', + ); + } + if (fields.projectPower) { + query = query.leftJoinAndSelect('project.projectPower', 'projectPower'); + } + if (fields.projectInstantPower) { + query = query.leftJoinAndSelect( + 'project.projectInstantPower', + 'projectInstantPower', + ); + } + if (fields.qfRounds) { + query = query.leftJoinAndSelect('project.qfRounds', 'qfRounds'); + } + if (fields.projectFuturePower) { + query = query.leftJoinAndSelect( + 'project.projectFuturePower', + 'projectFuturePower', + ); + } + if (fields.campaigns) { + const campaignSlugs = (await getAllProjectsRelatedToActiveCampaigns())[ + minimalProject.id + ]; + query = query.leftJoinAndMapMany( 'project.campaigns', Campaign, 'campaigns', @@ -910,38 +951,49 @@ export class ProjectResolver { slug, campaignSlugs, }, - ) - .leftJoin('project.adminUser', 'user') - .addSelect(publicSelectionFields); // aliased selection - - query = ProjectResolver.addUserReaction(query, connectedWalletUserId, user); - - if (isOwnerOfProject) { - query = ProjectResolver.addProjectVerificationForm( + ); + } + if (fields.adminUser) { + const adminUserFields = Object.keys(fields.adminUser).map( + field => `user.${field}`, + ); + const filterByPublicFields = publicSelectionFields.filter(field => + adminUserFields.includes(field), + ); + query = query + .leftJoin('project.adminUser', 'user') + .addSelect(filterByPublicFields); // aliased selection + } + if (fields.reaction) { + query = ProjectResolver.addUserReaction( query, connectedWalletUserId, user, ); } - query = query.orderBy({ - 'mainCategory.title': 'ASC', - 'categories.name': 'ASC', - }); - const project = await query.getOne(); canUserVisitProject(project, user?.userId); - const verificationForm = - project?.projectVerificationForm || - (await getVerificationFormByProjectId(project?.id as number)); - if (verificationForm) { - (project as Project).verificationFormStatus = verificationForm?.status; - } + if (fields.verificationFormStatus) { + const viewerUserId = connectedWalletUserId || user?.userId; + const isOwnerOfProject = await userIsOwnerOfProject(viewerUserId, slug); + if (isOwnerOfProject) { + const verificationForm = await getVerificationFormStatusByProjectId( + project?.id as number, + ); + if (verificationForm) { + (project as Project).verificationFormStatus = + verificationForm?.status; + } + } + } + if (fields.givbackFactor) { + const { givbackFactor } = await calculateGivbackFactor(project!.id); + return { ...project, givbackFactor }; + } // We know that we have the project because if we reach this line means minimalProject is not null - const { givbackFactor } = await calculateGivbackFactor(project!.id); - - return { ...project, givbackFactor }; + return project; } @Mutation(_returns => Project) From 20252d485c3e9bf42e48b9a3fe5140b105eef56f Mon Sep 17 00:00:00 2001 From: Ramin Date: Thu, 16 May 2024 18:23:06 +0330 Subject: [PATCH 05/11] add findProjectIdBySlug --- src/repositories/projectRepository.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/repositories/projectRepository.ts b/src/repositories/projectRepository.ts index 8fee33896..4a669bbe0 100644 --- a/src/repositories/projectRepository.ts +++ b/src/repositories/projectRepository.ts @@ -324,6 +324,16 @@ export const findProjectBySlug = (slug: string): Promise => { ); }; +export const findProjectIdBySlug = (slug: string): Promise => { + // check current slug and previous slugs + return Project.createQueryBuilder('project') + .select('project.id') + .where(`:slug = ANY(project."slugHistory") or project.slug = :slug`, { + slug, + }) + .getOne(); +}; + export const findProjectBySlugWithoutAnyJoin = ( slug: string, ): Promise => { From 419df85a79038c56e8cba3c64221c9d4dff045dc Mon Sep 17 00:00:00 2001 From: Ramin Date: Thu, 16 May 2024 19:15:49 +0330 Subject: [PATCH 06/11] fix projectBySlug tests with new changes --- src/resolvers/projectResolver.test.ts | 42 ++++------------------- test/graphqlQueries.ts | 48 +-------------------------- 2 files changed, 7 insertions(+), 83 deletions(-) diff --git a/src/resolvers/projectResolver.test.ts b/src/resolvers/projectResolver.test.ts index 15e0ea811..d782550f6 100644 --- a/src/resolvers/projectResolver.test.ts +++ b/src/resolvers/projectResolver.test.ts @@ -4287,7 +4287,7 @@ function getProjectUpdatesTestCases() { } function projectBySlugTestCases() { - it('should return projects with indicated slug and verification form if owner', async () => { + it('should return projects with indicated slug and verification form status if owner', async () => { const project1 = await saveProjectDirectlyToDb({ ...createProjectData(), title: String(new Date().getTime()), @@ -4326,46 +4326,16 @@ function projectBySlugTestCases() { const project = result.data.data.projectBySlug; assert.equal(Number(project.id), project1.id); - assert.isOk(project.projectVerificationForm); - assert.equal(project.projectVerificationForm.id, verificationForm.id); + assert.isOk(project.verificationFormStatus); + assert.equal( + project.project.verificationFormStatus, + verificationForm.status, + ); assert.isOk(project.adminUser.walletAddress); assert.isOk(project.adminUser.firstName); assert.isNotOk(project.adminUser.email); assert.isOk(project.categories[0].mainCategory.title); }); - it('should return verificationFormStatus if its not owner', async () => { - const project1 = await saveProjectDirectlyToDb({ - ...createProjectData(), - title: String(new Date().getTime()), - slug: String(new Date().getTime()), - }); - - const user = - (await User.findOne({ - where: { - id: project1.adminUserId, - }, - })) || undefined; - - const verificationForm = await ProjectVerificationForm.create({ - project: project1, - user, - status: PROJECT_VERIFICATION_STATUSES.DRAFT, - }).save(); - - const result = await axios.post(graphqlUrl, { - query: fetchProjectBySlugQuery, - variables: { - slug: project1.slug, - connectedWalletUserId: user!.id, - }, - }); - - const project = result.data.data.projectBySlug; - assert.equal(Number(project.id), project1.id); - assert.isNotOk(project.projectVerificationForm); - assert.equal(project.verificationFormStatus, verificationForm.status); - }); it('should return projects with indicated slug', async () => { const walletAddress = generateRandomEtheriumAddress(); diff --git a/test/graphqlQueries.ts b/test/graphqlQueries.ts index 89666f380..094a908d3 100644 --- a/test/graphqlQueries.ts +++ b/test/graphqlQueries.ts @@ -1087,53 +1087,6 @@ export const fetchProjectBySlugQuery = ` name isActive } - projectVerificationForm { - status - id - isTermAndConditionsAccepted - emailConfirmationTokenExpiredAt - email - emailConfirmationToken - emailConfirmationSent - emailConfirmationSentAt - emailConfirmedAt - emailConfirmed - projectRegistry { - organizationDescription - isNonProfitOrganization - organizationCountry - organizationWebsite - attachments - organizationName - } - personalInfo { - email - walletAddress - fullName - } - projectContacts { - name - url - } - milestones { - mission - foundationDate - achievedMilestones - achievedMilestonesProofs - problem - plans - impact - } - managingFunds { - description - relatedAddresses { - address - networkId - chainType - title - } - } - } status { id symbol @@ -1167,6 +1120,7 @@ export const fetchProjectBySlugQuery = ` email firstName walletAddress + email } totalReactions totalDonations From 0721ffa58d07b94b54e1e3ad27de5dad7154ca7b Mon Sep 17 00:00:00 2001 From: Ramin Date: Thu, 16 May 2024 20:19:37 +0330 Subject: [PATCH 07/11] fix projectBySlug tests with new changes --- src/resolvers/projectResolver.test.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/resolvers/projectResolver.test.ts b/src/resolvers/projectResolver.test.ts index d782550f6..141f723ff 100644 --- a/src/resolvers/projectResolver.test.ts +++ b/src/resolvers/projectResolver.test.ts @@ -4327,10 +4327,7 @@ function projectBySlugTestCases() { const project = result.data.data.projectBySlug; assert.equal(Number(project.id), project1.id); assert.isOk(project.verificationFormStatus); - assert.equal( - project.project.verificationFormStatus, - verificationForm.status, - ); + assert.equal(project.verificationFormStatus, verificationForm.status); assert.isOk(project.adminUser.walletAddress); assert.isOk(project.adminUser.firstName); assert.isNotOk(project.adminUser.email); From 736306f00ae754d893b49f8f302e15333209d54b Mon Sep 17 00:00:00 2001 From: Ramin Date: Thu, 16 May 2024 20:35:10 +0330 Subject: [PATCH 08/11] fix projectBySlug tests with new changes --- src/resolvers/projectResolver.test.ts | 39 ++++++++++++++++++++------- 1 file changed, 29 insertions(+), 10 deletions(-) diff --git a/src/resolvers/projectResolver.test.ts b/src/resolvers/projectResolver.test.ts index 141f723ff..614a29392 100644 --- a/src/resolvers/projectResolver.test.ts +++ b/src/resolvers/projectResolver.test.ts @@ -4336,22 +4336,41 @@ function projectBySlugTestCases() { it('should return projects with indicated slug', async () => { const walletAddress = generateRandomEtheriumAddress(); - const project1 = await saveProjectDirectlyToDb({ - ...createProjectData(), - title: String(new Date().getTime()), - slug: String(new Date().getTime()), - walletAddress, - }); - + const accessToken = await generateTestAccessToken(SEED_DATA.FIRST_USER.id); + const sampleProject1 = { + title: 'title1', + adminUserId: SEED_DATA.FIRST_USER.id, + addresses: [ + { + address: walletAddress, + networkId: NETWORK_IDS.XDAI, + chainType: ChainType.EVM, + }, + ], + }; + const res1 = await axios.post( + graphqlUrl, + { + query: createProjectQuery, + variables: { + project: sampleProject1, + }, + }, + { + headers: { + Authorization: `Bearer ${accessToken}`, + }, + }, + ); + const _project = res1.data.data.createProject; const result = await axios.post(graphqlUrl, { query: fetchProjectBySlugQuery, variables: { - slug: project1.slug, + slug: _project.slug, }, }); - const project = result.data.data.projectBySlug; - assert.equal(Number(project.id), project1.id); + assert.equal(Number(project.id), Number(_project.id)); assert.isOk(project.adminUser.walletAddress); assert.isOk(project.givbackFactor); assert.isNull(project.projectVerificationForm); From 2164efd29fe046a5df8ddde3a1cf40b91728288f Mon Sep 17 00:00:00 2001 From: Ramin Date: Fri, 17 May 2024 19:42:21 +0330 Subject: [PATCH 09/11] remove projectVerificationForm assert --- src/resolvers/projectResolver.test.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/resolvers/projectResolver.test.ts b/src/resolvers/projectResolver.test.ts index 614a29392..3c2ecbceb 100644 --- a/src/resolvers/projectResolver.test.ts +++ b/src/resolvers/projectResolver.test.ts @@ -4373,7 +4373,6 @@ function projectBySlugTestCases() { assert.equal(Number(project.id), Number(_project.id)); assert.isOk(project.adminUser.walletAddress); assert.isOk(project.givbackFactor); - assert.isNull(project.projectVerificationForm); assert.isOk(project.adminUser.firstName); assert.isNotOk(project.adminUser.email); assert.isNotEmpty(project.addresses); From c031670db38b90e61d8dd87da5ab57c3d9cba8c9 Mon Sep 17 00:00:00 2001 From: Ramin Date: Fri, 17 May 2024 20:06:59 +0330 Subject: [PATCH 10/11] add logs --- src/resolvers/projectResolver.test.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/resolvers/projectResolver.test.ts b/src/resolvers/projectResolver.test.ts index 3c2ecbceb..45d21c635 100644 --- a/src/resolvers/projectResolver.test.ts +++ b/src/resolvers/projectResolver.test.ts @@ -4362,6 +4362,12 @@ function projectBySlugTestCases() { }, }, ); + // eslint-disable-next-line no-console + console.log('----------------------------'); + // eslint-disable-next-line no-console + console.log(res1.data, res1.data.error, res1.data.errors); + // eslint-disable-next-line no-console + console.log('----------------------------'); const _project = res1.data.data.createProject; const result = await axios.post(graphqlUrl, { query: fetchProjectBySlugQuery, From 33091be358845da3ba75abaaf31b17fed07ffa49 Mon Sep 17 00:00:00 2001 From: Ramin Date: Fri, 17 May 2024 20:48:02 +0330 Subject: [PATCH 11/11] fix title in should return projects with indicated slug test --- src/resolvers/projectResolver.test.ts | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/resolvers/projectResolver.test.ts b/src/resolvers/projectResolver.test.ts index 45d21c635..5d82a7df0 100644 --- a/src/resolvers/projectResolver.test.ts +++ b/src/resolvers/projectResolver.test.ts @@ -4338,7 +4338,7 @@ function projectBySlugTestCases() { const walletAddress = generateRandomEtheriumAddress(); const accessToken = await generateTestAccessToken(SEED_DATA.FIRST_USER.id); const sampleProject1 = { - title: 'title1', + title: walletAddress, adminUserId: SEED_DATA.FIRST_USER.id, addresses: [ { @@ -4362,12 +4362,6 @@ function projectBySlugTestCases() { }, }, ); - // eslint-disable-next-line no-console - console.log('----------------------------'); - // eslint-disable-next-line no-console - console.log(res1.data, res1.data.error, res1.data.errors); - // eslint-disable-next-line no-console - console.log('----------------------------'); const _project = res1.data.data.createProject; const result = await axios.post(graphqlUrl, { query: fetchProjectBySlugQuery,