Skip to content

Commit

Permalink
Make boostings of a project zero when get cancelled
Browse files Browse the repository at this point in the history
  • Loading branch information
mohammadranjbarz committed Nov 21, 2022
1 parent 1d757c6 commit b1686ef
Show file tree
Hide file tree
Showing 5 changed files with 94 additions and 7 deletions.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,7 @@
"test:powerSnapshotService": "NODE_ENV=test mocha -t 30000 --exit -r ts-node/register ./test/pre-test-scripts.ts ./src/services/powerSnapshotServices.test.ts",
"test:transactionsService": "NODE_ENV=test mocha -t 30000 --exit -r ts-node/register ./test/pre-test-scripts.ts ./src/services/transactionService.test.ts",
"test:projectUpdatesService": "NODE_ENV=test mocha -t 30000 --exit -r ts-node/register ./test/pre-test-scripts.ts ./src/services/projectUpdatesService.test.ts",
"test:powerBoostingService": "NODE_ENV=test mocha -t 30000 --exit -r ts-node/register ./test/pre-test-scripts.ts ./src/services/powerBoostingService.test.ts",
"test:blockByDateService": "NODE_ENV=test mocha -t 30000 --exit -r ts-node/register ./src/services/blockByDateService.test.ts",
"test:categoryResolver": "NODE_ENV=test mocha -t 30000 --exit -r ts-node/register ./test/pre-test-scripts.ts ./src/resolvers/categoryResolver.test.ts",
"test:givpower": "NODE_ENV=test mocha -b -t 30000 --exit -r ts-node/register ./test/pre-test-scripts.ts ./src/repositories/powerBoostingRepository.test.ts ./src/repositories/userPowerRepository.test.ts ./src/repositories/powerRoundRepository.test.ts ./src/repositories/userProjectPowerViewRepository.test.ts ./src/repositories/projectPowerViewRepository.test.ts ./src/resolvers/powerBoostingResolver.test.ts ./src/resolvers/userProjectPowerResolver.test.ts ./src/adapters/givpowerSubgraph/givPowerSubgraphAdapter.test.ts ./src/repositories/projectRepository.test.ts ./src/resolvers/projectResolver.test.ts ./src/repositories/dbCronRepository.test.ts",
Expand Down
21 changes: 14 additions & 7 deletions src/repositories/powerBoostingRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,8 +64,8 @@ export const findUsersWhoBoostedProject = async (
};

export const findPowerBoostings = async (params: {
take: number;
skip: number;
take?: number;
skip?: number;
orderBy: {
field: 'createdAt' | 'updatedAt' | 'percentage';
direction: 'ASC' | 'DESC';
Expand All @@ -86,11 +86,18 @@ export const findPowerBoostings = async (params: {
if (params.projectId) {
query.andWhere(`"projectId" =${params.projectId}`);
}
return query
.orderBy(`powerBoosting.${params.orderBy.field}`, params.orderBy.direction)
.take(params.take)
.skip(params.skip)
.getManyAndCount();
query.orderBy(
`powerBoosting.${params.orderBy.field}`,
params.orderBy.direction,
);

if (params.take) {
query.take(params.take);
}
if (params.skip) {
query.skip(params.skip);
}
return query.getManyAndCount();
};

export const findPowerBoostingsCountByUserId = async (
Expand Down
4 changes: 4 additions & 0 deletions src/server/adminBro.ts
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,7 @@ import {
refreshProjectFuturePowerView,
refreshProjectPowerView,
} from '../repositories/projectPowerViewRepository';
import { changeUserBoostingsAfterProjectCancelled } from '../services/powerBoostingService';

// use redis for session data instead of in-memory storage
// tslint:disable-next-line:no-var-requires
Expand Down Expand Up @@ -2355,6 +2356,9 @@ export const updateStatusOfProjects = async (
await getNotificationAdapter().projectCancelled({
project: projectWithAdmin,
});
await changeUserBoostingsAfterProjectCancelled({
projectId: project.id,
});
} else if (status === ProjStatus.active) {
await getNotificationAdapter().projectReactivated({
project: projectWithAdmin,
Expand Down
54 changes: 54 additions & 0 deletions src/services/powerBoostingService.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import {
createProjectData,
generateRandomEtheriumAddress,
saveProjectDirectlyToDb,
saveUserDirectlyToDb,
sleep,
} from '../../test/testUtils';
import {
findUserPowerBoosting,
setMultipleBoosting,
} from '../repositories/powerBoostingRepository';
import { assert } from 'chai';
import { changeUserBoostingsAfterProjectCancelled } from './powerBoostingService';

describe(
'changeUserBoostingsAfterProjectCancelled',
changeUserBoostingsAfterProjectCancelledTestCases,
);

function changeUserBoostingsAfterProjectCancelledTestCases() {
it('should change user percentage to zero when project cancelled', async () => {
const user1 = await saveUserDirectlyToDb(generateRandomEtheriumAddress());
const user2 = await saveUserDirectlyToDb(generateRandomEtheriumAddress());
const firstProject = await saveProjectDirectlyToDb(createProjectData());
const projectThatWouldGetCancelled = await saveProjectDirectlyToDb(
createProjectData(),
);
await setMultipleBoosting({
userId: user1.id,
projectIds: [firstProject.id, projectThatWouldGetCancelled.id],
percentages: [80, 20],
});
await setMultipleBoosting({
userId: user2.id,
projectIds: [firstProject.id, projectThatWouldGetCancelled.id],
percentages: [70, 30],
});
await changeUserBoostingsAfterProjectCancelled({
projectId: projectThatWouldGetCancelled.id,
});

// Changing percentages is async we sleep some milli seconds to make sure all updates has been done
await sleep(100);
const firstUserBoostings = await findUserPowerBoosting(user1.id);
const secondUserBoostings = await findUserPowerBoosting(user2.id);

assert.equal(firstUserBoostings.length, 1);
assert.equal(secondUserBoostings.length, 1);
assert.equal(firstUserBoostings[0].percentage, 100);
assert.equal(firstUserBoostings[0].projectId, firstProject.id);
assert.equal(secondUserBoostings[0].percentage, 100);
assert.equal(secondUserBoostings[0].projectId, firstProject.id);
});
}
21 changes: 21 additions & 0 deletions src/services/powerBoostingService.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import {
findPowerBoostings,
setSingleBoosting,
} from '../repositories/powerBoostingRepository';

export const changeUserBoostingsAfterProjectCancelled = async (params: {
projectId: number;
}) => {
const { projectId } = params;
const [powerBoostings] = await findPowerBoostings({
orderBy: { direction: 'DESC', field: 'createdAt' },
projectId,
});
powerBoostings.forEach(powerBoosting =>
setSingleBoosting({
userId: powerBoosting.userId,
projectId,
percentage: 0,
}),
);
};

0 comments on commit b1686ef

Please sign in to comment.