Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Other types of campaigns to projectBySlug webservice #1136

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions config/example.env
Original file line number Diff line number Diff line change
Expand Up @@ -202,3 +202,9 @@ POWER_BALANCE_AGGREGATOR_ADAPTER=powerBalanceAggregator
NUMBER_OF_BALANCE_AGGREGATOR_BATCH=20

QF_ROUND_ESTIMATED_MATCHING_CACHE_DURATION=60000

# OPTIONAL - default: Every 10 minutes
PROJECT_CAMPAIGNS_CACHE_DURATION=600000

# OPTIONAL - default: */10 * * * * * ( Every 10 minutes)
PROJECT_CAMPAIGNS_CRONJOB_EXPRESSION=*/10 * * * * *
6 changes: 6 additions & 0 deletions config/test.env
Original file line number Diff line number Diff line change
Expand Up @@ -175,3 +175,9 @@ NUMBER_OF_BALANCE_AGGREGATOR_BATCH=7

# ! millisecond cache, if we increase cache in test ENV we might get some errors in tests
QF_ROUND_ESTIMATED_MATCHING_CACHE_DURATION=1
# ! millisecond cache, if we increase cache in test ENV we might get some errors in tests
PROJECT_CAMPAIGNS_CACHE_DURATION=1


# OPTIONAL - default: */10 * * * * * ( Every 10 minutes)
PROJECT_CAMPAIGNS_CRONJOB_EXPRESSION=*/10 * * * * *
17 changes: 17 additions & 0 deletions src/entities/campaign.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,26 @@ export enum CampaignFilterField {
}

export enum CampaignType {
// https://github.com/Giveth/impact-graph/blob/staging/docs/campaignsInstruction.md

// In these type of projects we pick some projects to show them in campaign,
// for instance for Turkey earthquake we pick some projects.
// so we just need to add slug of those projects in Related Projects Slugs and in
// what order we add them they will be shown in frontend
ManuallySelected = 'ManuallySelected',

// Sometimes in a campaign we just want to show projects in an specified order,
// for instance we can create a campaign like ** Check projects that received most likes** so for
// this campaign you set SortField as campaign type and then you can use one of below sorting fields
SortField = 'SortField',

// Sometimes we need to filter some projects in a campaign,
// for instance Let's verified projects that accept funds on Gnosis chain,
// for this we can Add verified and acceptFundOnGnosis filters
FilterFields = 'FilterFields',

// Some campaigns don't include any project in them and they are just some banner
// like Feeling $nice? campaign in below image
WithoutProjects = 'WithoutProjects',
}

Expand Down
47 changes: 36 additions & 11 deletions src/repositories/projectRepository.test.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import {
findProjectById,
findProjectBySlug,
findProjectBySlugWithoutAnyJoin,
findProjectByWalletAddress,
findProjectsByIdArray,
findProjectsBySlugArray,
Expand Down Expand Up @@ -56,6 +57,20 @@ describe(
updateDescriptionSummaryTestCases,
);

describe('verifyProject test cases', verifyProjectTestCases);
describe('verifyMultipleProjects test cases', verifyMultipleProjectsTestCases);
describe('findProjectById test cases', findProjectByIdTestCases);
describe('findProjectsByIdArray test cases', findProjectsByIdArrayTestCases);
describe('findProjectBySlug test cases', findProjectBySlugTestCases);
describe(
'findProjectBySlugWithoutAnyJoin test cases',
findProjectBySlugWithoutAnyJoinTestCases,
);
describe(
'findProjectsBySlugArray test cases',
findProjectsBySlugArrayTestCases,
);

function projectsWithoutUpdateAfterTimeFrameTestCases() {
it('should return projects created a long time ago', async () => {
const superExpiredProject = await saveProjectDirectlyToDb({
Expand Down Expand Up @@ -96,22 +111,13 @@ function projectsWithoutUpdateAfterTimeFrameTestCases() {
});
}

describe('verifyProject test cases', verifyProjectTestCases);
describe('verifyMultipleProjects test cases', verifyMultipleProjectsTestCases);
describe('findProjectById test cases', findProjectByIdTestCases);
describe('findProjectsByIdArray test cases', findProjectsByIdArrayTestCases);
describe('findProjectBySlug test cases', findProjectBySlugTestCases);
describe(
'findProjectsBySlugArray test cases',
findProjectsBySlugArrayTestCases,
);

function findProjectBySlugTestCases() {
it('Should find project by id', async () => {
it('Should find project by slug', async () => {
const project = await saveProjectDirectlyToDb(createProjectData());
const foundProject = await findProjectBySlug(project.slug as string);
assert.isOk(foundProject);
assert.equal(foundProject?.id, project.id);
assert.isOk(foundProject?.adminUser);
});

it('should not find project when project doesnt exists', async () => {
Expand All @@ -120,6 +126,25 @@ function findProjectBySlugTestCases() {
});
}

function findProjectBySlugWithoutAnyJoinTestCases() {
it('Should find project by slug', async () => {
const project = await saveProjectDirectlyToDb(createProjectData());
const foundProject = await findProjectBySlugWithoutAnyJoin(
project.slug as string,
);
assert.isOk(foundProject);
assert.equal(foundProject?.id, project.id);
assert.isNotOk(foundProject?.adminUser);
});

it('should not find project when project doesnt exists', async () => {
const foundProject = await findProjectBySlugWithoutAnyJoin(
new Date().toString(),
);
assert.isNull(foundProject);
});
}

function findProjectsBySlugArrayTestCases() {
it('Should find project multi projects by slug', async () => {
const project1 = await saveProjectDirectlyToDb(createProjectData());
Expand Down
11 changes: 11 additions & 0 deletions src/repositories/projectRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -211,6 +211,17 @@ export const findProjectBySlug = (slug: string): Promise<Project | null> => {
);
};

export const findProjectBySlugWithoutAnyJoin = (
slug: string,
): Promise<Project | null> => {
// check current slug and previous slugs
return Project.createQueryBuilder('project')
.where(`:slug = ANY(project."slugHistory") or project.slug = :slug`, {
slug,
})
.getOne();
};

export const verifyMultipleProjects = async (params: {
verified: boolean;
projectsIds: string[] | number[];
Expand Down
Loading
Loading