From 0737e3f88cb4f058df8cc3cb4a2b8cb86d3a7b36 Mon Sep 17 00:00:00 2001 From: ali Date: Thu, 28 Nov 2024 04:25:58 +0330 Subject: [PATCH] add gitcoin passport scorer check to cap calculation flow --- config/example.env | 1 + src/constants/gitcoin.ts | 2 ++ src/entities/user.ts | 13 ++++++++++++- src/resolvers/qAccResolver.ts | 5 ++++- src/services/qAccService.ts | 16 +++++++++++----- src/services/userService.ts | 14 +++++++------- 6 files changed, 37 insertions(+), 14 deletions(-) diff --git a/config/example.env b/config/example.env index bab348d2b..aa9ca0efa 100644 --- a/config/example.env +++ b/config/example.env @@ -308,6 +308,7 @@ MONGO_DB_REPORT_DB_NAME= # Gitcoin score GITCOIN_PASSPORT_MIN_VALID_ANALYSIS_SCORE= +GITCOIN_PASSPORT_MIN_VALID_SCORER_SCORE= # 1 day GITCOIN_PASSPORT_EXPIRATION_PERIOD_MS=86400000 MAX_CONTRIBUTION_WITH_GITCOIN_PASSPORT_ONLY_USD= diff --git a/src/constants/gitcoin.ts b/src/constants/gitcoin.ts index 31df962ee..dff805189 100644 --- a/src/constants/gitcoin.ts +++ b/src/constants/gitcoin.ts @@ -4,6 +4,8 @@ export const GITCOIN_PASSPORT_EXPIRATION_PERIOD_MS = (+config.get('GITCOIN_PASSPORT_EXPIRATION_PERIOD_MS') as number) || 86400000; // 1 day export const GITCOIN_PASSPORT_MIN_VALID_ANALYSIS_SCORE = (+config.get('GITCOIN_PASSPORT_MIN_VALID_ANALYSIS_SCORE') as number) || 50; +export const GITCOIN_PASSPORT_MIN_VALID_SCORER_SCORE = + (+config.get('GITCOIN_PASSPORT_MIN_VALID_SCORER_SCORE') as number) || 15; export const MAX_CONTRIBUTION_WITH_GITCOIN_PASSPORT_ONLY_USD = (+config.get('MAX_CONTRIBUTION_WITH_GITCOIN_PASSPORT_ONLY_USD') as number) || 1000; diff --git a/src/entities/user.ts b/src/entities/user.ts index a2cb5f073..d13083560 100644 --- a/src/entities/user.ts +++ b/src/entities/user.ts @@ -19,7 +19,10 @@ import { ProjectVerificationForm } from './projectVerificationForm'; import { ReferredEvent } from './referredEvent'; import { NOTIFICATIONS_EVENT_NAMES } from '../analytics/analytics'; import { PrivadoAdapter } from '../adapters/privado/privadoAdapter'; -import { GITCOIN_PASSPORT_MIN_VALID_ANALYSIS_SCORE } from '../constants/gitcoin'; +import { + GITCOIN_PASSPORT_MIN_VALID_ANALYSIS_SCORE, + GITCOIN_PASSPORT_MIN_VALID_SCORER_SCORE, +} from '../constants/gitcoin'; export const publicSelectionFields = [ 'user.id', @@ -245,6 +248,14 @@ export class User extends BaseEntity { ); } + @Field(_type => Boolean, { nullable: true }) + get hasEnoughGitcoinPassportScore(): boolean { + return !!( + this.passportScore && + this.passportScore >= GITCOIN_PASSPORT_MIN_VALID_SCORER_SCORE + ); + } + @Field(_type => Int, { nullable: true }) async donationsCount() { return await Donation.createQueryBuilder('donation') diff --git a/src/resolvers/qAccResolver.ts b/src/resolvers/qAccResolver.ts index 8411af51a..6ffabf1d4 100644 --- a/src/resolvers/qAccResolver.ts +++ b/src/resolvers/qAccResolver.ts @@ -103,7 +103,10 @@ export class QAccResolver { response.zkId = { unusedCap: qAccCap, }; - } else if (dbUser.hasEnoughGitcoinAnalysisScore) { + } else if ( + dbUser.hasEnoughGitcoinAnalysisScore || + dbUser.hasEnoughGitcoinPassportScore + ) { const cap = await qAccService.getUserRemainedCapBasedOnGitcoinScore({ projectId, user: dbUser, diff --git a/src/services/qAccService.ts b/src/services/qAccService.ts index e24b3d208..96910126f 100644 --- a/src/services/qAccService.ts +++ b/src/services/qAccService.ts @@ -8,10 +8,11 @@ import { findActiveEarlyAccessRound } from '../repositories/earlyAccessRoundRepo import { updateOrCreateProjectRoundRecord } from '../repositories/projectRoundRecordRepository'; import { updateOrCreateProjectUserRecord } from '../repositories/projectUserRecordRepository'; import { findActiveQfRound } from '../repositories/qfRoundRepository'; -import { updateUserGitcoinAnalysisScore } from './userService'; +import { updateUserGitcoinScores } from './userService'; import { GITCOIN_PASSPORT_EXPIRATION_PERIOD_MS, GITCOIN_PASSPORT_MIN_VALID_ANALYSIS_SCORE, + GITCOIN_PASSPORT_MIN_VALID_SCORER_SCORE, MAX_CONTRIBUTION_WITH_GITCOIN_PASSPORT_ONLY_USD, } from '../constants/gitcoin'; @@ -210,16 +211,21 @@ const getUserRemainedCapBasedOnGitcoinScore = async ({ user: User; }): Promise => { if ( - !user.analysisScore || + user.passportScore === null || + user.analysisScore === null || !user.passportScoreUpdateTimestamp || user.passportScoreUpdateTimestamp.getTime() < Date.now() - GITCOIN_PASSPORT_EXPIRATION_PERIOD_MS ) { - await updateUserGitcoinAnalysisScore(user); + await updateUserGitcoinScores(user); } - if (!user.hasEnoughGitcoinAnalysisScore) { + if ( + !user.hasEnoughGitcoinAnalysisScore && + !user.hasEnoughGitcoinPassportScore + ) { throw new Error( - `analysis score is less than ${GITCOIN_PASSPORT_MIN_VALID_ANALYSIS_SCORE}`, + `analysis score is less than ${GITCOIN_PASSPORT_MIN_VALID_ANALYSIS_SCORE} + and passport score is less than ${GITCOIN_PASSPORT_MIN_VALID_SCORER_SCORE}`, ); } const userRecord = await getUserProjectRecord({ diff --git a/src/services/userService.ts b/src/services/userService.ts index b4994def1..e652debae 100644 --- a/src/services/userService.ts +++ b/src/services/userService.ts @@ -86,13 +86,13 @@ export const fetchAdminAndValidatePassword = async (params: { } }; -export const updateUserGitcoinAnalysisScore = async (user: User) => { - // const passportScore = await getGitcoinAdapter().getWalletAddressScore( - // user.walletAddress as string, - // ); - // if (passportScore && passportScore?.score) { - // user.passportScore = Number(passportScore.score); - // } +export const updateUserGitcoinScores = async (user: User) => { + const passportScore = await getGitcoinAdapter().getWalletAddressScore( + user.walletAddress as string, + ); + if (passportScore && passportScore?.score) { + user.passportScore = Number(passportScore.score); + } user.analysisScore = await getGitcoinAdapter().getUserAnalysisScore( user.walletAddress as string, );