Skip to content

Commit

Permalink
Next Release Aug 2024 (#1755)
Browse files Browse the repository at this point in the history
* update qfRoundResolver.ts with new estimated matching structure

* update qfUtils.ts with new estimated matching structure

* add verified status

* add minimumPassportScore to getProjectQfRoundStats

* add check for begin and end date to getProjectQfRoundStats

* remove refreshProjectEstimatedMatchingView from tests

* fix qfRoundRepository.test.ts tests

* remove qfRound stats from projects when added or removed from QF round

* update added projects only

* update added projects only

* optimize refreshProjectEstimatedMatchingView

* set NODE_ENV for refreshProjectEstimatedMatchingView

* merge getQfRoundUniqueDonors and getQfRoundTotalDonations

* fix adding valueUsd to query

* add userQfRoundModelScore

* remove minimumPassportScore from getProjectQfRoundStats

* remove user join from getProjectQfRoundStats

* remove insertDonationsFromQfRoundHistory from syncDonationStatusWithBlockchainNetwork

* enable replica

* projectVerificationRepository.ts replace .save with update method

* projectVerificationRepository.ts replace .save with update method

* remove unused fields from logs

* remove user from badge warning

* optimize projectsWithoutUpdateAfterTimeFrame

* Zkevm integration (#1635)

* Integrate with zkevm chain

related to #1617 #1615 #1618 #1619 #1614 #1620

* Add coingeckoId for wbtc zkevm token

* Fix lint errors

* Remove duplicate keys in provider.ts

* Fix AAve token on zkevm chain

* fix merge conflicts

* add projectId to projectRepository.ts

* remove unnecessary updatedAt

* fix: get unique_donors based on user wallet address not added to sybil table

* add cache to findActiveQfRound

* Add on conflicrt do nothing for add zkevm tokens

* Fix add polygon zkevm token migration

* remove updateTotalDonationsOfProject from migrations

* replace updateTotalDonationsOfProject with updateProjectStatistics

* replace updateTotalDonationsOfProject with updateProjectStatistics

* remove sumDonationValueUsd from project

* do email verification on project verification form through Ortto

* add solana to available networks for qfround

* remove knownAsSybilAddress from user

* wrong query cache in some functions

* User Story - Rejected project owner reason

* use networkId instead of optimism-only flag (#1653)

* Use networkId instead of optimismOnly flag

* Update graphql queries for tests

* fatal errors (#1640)

* change critical error logs to fatal

* add fatal log for donation verification failure with time threshold

* added on final step for verification project data

* Replace ortto External Embedded Webform for Onboarding guide

* fix: findArchivedQfRounds query

* fix subscribeOnboarding args

* change output to boolean

* WIP: add API key to request & add fetch MBD score record from DB

* fixed last step verification

* fixed typo

* WIP: add field to user that holds user MBD score for an active round

* disable DB Replica on staging

* fetch data uere with the score from MBD & remove non needed query

* Fix some test cases about stable coin donations

* fix: issue with adminJs authentication when user has hash as null

* "Last Update" on project card is not correct

* Fix some test cases about stable coin donations (#1665)

* Fix some test cases about stable coin donations

* Fix few test cases of projectResolver

* Fix few test cases of projectResolver

* Fix test cases of project resolver

* Fix donationResolver test cases

* Bump follow-redirects from 1.15.5 to 1.15.6 (#1414)

Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.15.5 to 1.15.6.
- [Release notes](https://github.com/follow-redirects/follow-redirects/releases)
- [Commits](follow-redirects/follow-redirects@v1.15.5...v1.15.6)

---
updated-dependencies:
- dependency-name: follow-redirects
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mohammadranjbarz <[email protected]>

* Bump @solana/web3.js from 1.87.6 to 1.87.7 (#1492)

Bumps [@solana/web3.js](https://github.com/solana-labs/solana-web3.js) from 1.87.6 to 1.87.7.
- [Release notes](https://github.com/solana-labs/solana-web3.js/releases)
- [Commits](https://github.com/solana-labs/solana-web3.js/commits)

---
updated-dependencies:
- dependency-name: "@solana/web3.js"
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mohammadranjbarz <[email protected]>

* Bump express from 4.18.2 to 4.19.2 (#1430)

Bumps [express](https://github.com/expressjs/express) from 4.18.2 to 4.19.2.
- [Release notes](https://github.com/expressjs/express/releases)
- [Changelog](https://github.com/expressjs/express/blob/master/History.md)
- [Commits](expressjs/express@4.18.2...4.19.2)

---
updated-dependencies:
- dependency-name: express
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mohammadranjbarz <[email protected]>

* Bump braces from 3.0.2 to 3.0.3 (#1629)

Bumps [braces](https://github.com/micromatch/braces) from 3.0.2 to 3.0.3.
- [Changelog](https://github.com/micromatch/braces/blob/master/CHANGELOG.md)
- [Commits](micromatch/braces@3.0.2...3.0.3)

---
updated-dependencies:
- dependency-name: braces
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mohammadranjbarz <[email protected]>

* Bump undici from 5.28.3 to 5.28.4 (#1454)

Bumps [undici](https://github.com/nodejs/undici) from 5.28.3 to 5.28.4.
- [Release notes](https://github.com/nodejs/undici/releases)
- [Commits](nodejs/undici@v5.28.3...v5.28.4)

---
updated-dependencies:
- dependency-name: undici
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: mohammadranjbarz <[email protected]>

* fix types

* Updated project verification form resolver test

fixed previos 3 test with terms and condition update and added one last step test when user complete form and clicked "FINISH" button

* fix extracting last comment

* get donation to giveth with donation box analytics (#1661)

* Add a method for finding relevant donations to the donationRepository.ts

* Add a method for calculating donations metrics to the donationService.ts

* Add a gql resolver for donations metrics to the donationResolver.ts

* Add unit test for gql query resolver

* Fix division by zero issue

* times 100 average percentage to represent percent

* add useDonationBox field to donation and draftDonation

* fill useDonationBox field with correct data in migrations

* Change donationMetrics endpoint based on change in data schema

* remove unused import

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* remove unused import

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* add default value for useDonationBox field

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* add false removed imports

* add default value for useDonationBox field

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* fix tests based on changes

* fix tests

* send useDonationBox as last arg and make it optional

* add relevant donation tx hash to donation creation flow

* calculate related donations based on relevant donation tx hash

* add unit tests

* update unit test

* fix bug

* fix bug in donation repository and tests are pass

* Clear All donations after donation metrics test cases

* Add new function for deleting project from db and use it to don't affect other test cases

* comment new test cases to ensure bug is related to that or not

* Clear donations after tests

* Comments new test cases in donationRepository.test.ts

* uncomment tests and Clean up test effects on DB

* Remove project addresses too

* Add a new method to testUtils.ts for removing project from db by id

* change donation dates to now

* Remove clear donations sections

* Change update count to a bigger number to pass test

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* add test for fetching and refreshing qfroundscore for model

* revert changes on package,json

* revert changes on package,json

* fix migration error

* fix migration error

* fix: turn minimumValidUsdValue to nullable when querying

* remove updatedAt from projects tab

* Remove old donation and add new ones (#1674)

* remove verified from projects tab edit menu

* remove verified from projectVerificationTab edit menu

* fix total donations query

* fix archived_round totals

* fix latestUpdate column if not exists

* fix join for totals

* fix total donations with subquery

* fix add some error handling and remove commented interface

* fix: resolve conflict

* fix: resolve conflict

* fix USD value not showing

* fix: convert timestap retrieved from RPC provider to milisconds

* fix: donation test cases (milliseconds)

* fix: donation test cases (milliseconds)

* Endaoment integration (#1663)

* Remove giving block projects that don't have any donation

related to #1599

* Add needed fields to organization entity for endaoment projects

related to Giveth/Roadmap#111

* Remove giving-blocks stuff and endaoment integration thing

* Add categories to endaoment projects

* Fix test cases

* Fix some test cases about stable coin donations

* Add endaoment categories

* Fix remove giving-blocks projects migration

* Add default image for endaoment projects

* Fix linter

* Fix add useDonationBox to draft_donation migration

* Fix migration of adding useDonationBox to donation

* Fix eslint error

* Fix disabling recurring donations for endaoment projects

* Change givingBlock organization to endaoment in pre-test script

* Remove test case of accepted tokens of giving blocks

* Relate all base, optimism and mainnet tokens to endaoment organization

related to #1626

* Fix migration query syntax

* fix: donation test cases (milliseconds)

* fix: donation test cases (milliseconds)

* Modify ormconfig for running migrations

* Run ts files for migrations

* Make isRecipient of project_addresses of endaoment project true

* Fix type error of one of endaoment projects

* add test case for filling prices

* Modify add endaoment organization migration to pass the tests

* fix: convert minimumUserAnalysisScore to Float on qfRound entity

* fix: revert migration changes

* add log for filling prices

* feat: add github on project socialmedia enum

* Merge master to staging (#1696)

* Release relevant donations (#1687)

* get donation to giveth with donation box analytics (#1661)

* Add a method for finding relevant donations to the donationRepository.ts

* Add a method for calculating donations metrics to the donationService.ts

* Add a gql resolver for donations metrics to the donationResolver.ts

* Add unit test for gql query resolver

* Fix division by zero issue

* times 100 average percentage to represent percent

* add useDonationBox field to donation and draftDonation

* fill useDonationBox field with correct data in migrations

* Change donationMetrics endpoint based on change in data schema

* remove unused import

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* remove unused import

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* add default value for useDonationBox field

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* add false removed imports

* add default value for useDonationBox field

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* fix tests based on changes

* fix tests

* send useDonationBox as last arg and make it optional

* add relevant donation tx hash to donation creation flow

* calculate related donations based on relevant donation tx hash

* add unit tests

* update unit test

* fix bug

* fix bug in donation repository and tests are pass

* Clear All donations after donation metrics test cases

* Add new function for deleting project from db and use it to don't affect other test cases

* comment new test cases to ensure bug is related to that or not

* Clear donations after tests

* Comments new test cases in donationRepository.test.ts

* uncomment tests and Clean up test effects on DB

* Remove project addresses too

* Add a new method to testUtils.ts for removing project from db by id

* change donation dates to now

* Remove clear donations sections

* Change update count to a bigger number to pass test

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Remove old donation and add new ones (#1674)

* Remove unused variable

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* release analytics dashboard dropdown menu related chagnes (#1686)

* use networkId instead of optimism-only flag (#1653)

* Use networkId instead of optimismOnly flag

* Update graphql queries for tests

* Change network id to float in gql schema to fix unit tests

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Add organization filter to projectsTab.ts in admin panel

related to #1599 (comment)

* Fill description summary for endaoment projects

related to #1599 (comment)

* Fix eslint errors

* Replace special characters of slugs of endaoment projects with -

related to Giveth/giveth-dapps-v2#4280 (comment)

* Fix eslint errors

* return hardcoded  as user MBD score

* rename qfRound minimumUserAnalysisScore field

* Resolve conflicts (#1703)

* Release relevant donations (#1687)

* get donation to giveth with donation box analytics (#1661)

* Add a method for finding relevant donations to the donationRepository.ts

* Add a method for calculating donations metrics to the donationService.ts

* Add a gql resolver for donations metrics to the donationResolver.ts

* Add unit test for gql query resolver

* Fix division by zero issue

* times 100 average percentage to represent percent

* add useDonationBox field to donation and draftDonation

* fill useDonationBox field with correct data in migrations

* Change donationMetrics endpoint based on change in data schema

* remove unused import

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* remove unused import

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* add default value for useDonationBox field

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* add false removed imports

* add default value for useDonationBox field

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* fix tests based on changes

* fix tests

* send useDonationBox as last arg and make it optional

* add relevant donation tx hash to donation creation flow

* calculate related donations based on relevant donation tx hash

* add unit tests

* update unit test

* fix bug

* fix bug in donation repository and tests are pass

* Clear All donations after donation metrics test cases

* Add new function for deleting project from db and use it to don't affect other test cases

* comment new test cases to ensure bug is related to that or not

* Clear donations after tests

* Comments new test cases in donationRepository.test.ts

* uncomment tests and Clean up test effects on DB

* Remove project addresses too

* Add a new method to testUtils.ts for removing project from db by id

* change donation dates to now

* Remove clear donations sections

* Change update count to a bigger number to pass test

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Remove old donation and add new ones (#1674)

* Remove unused variable

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* release analytics dashboard dropdown menu related chagnes (#1686)

* use networkId instead of optimism-only flag (#1653)

* Use networkId instead of optimismOnly flag

* Update graphql queries for tests

* Change network id to float in gql schema to fix unit tests

---------

Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>

* Modify endaoment categories and relate them to projects

related to #1664 (comment)

* Add canUseOnFrontend to category so can show a category but don't allow users to select them when create/update projects

related to #1685

* Fix project resolver test case

* feat: add tacking recurring donations queries

* fix: delete unwanted recurring donation test cases

* fix CPU spikes

* add new test case for project update

* fix test case

* Fix add endaoment integration

* Filter isActive and canUseOnFrontend categories in projectResolver

* Filter isActive and canUseOnFrontend categories in projectResolver

* Return canUseOnFrontend in main category list

* optimize projectUpdates query

* Comment migrations related to endaoment (#1706)

* 1.24.0

* Test ci/cd

* Fix build problem

* optimize projectUpdates endpoint

* optimize projectUpdates endpoint - add cache

* add dynamic field selection

* add a default value for etc mordor url (#1709)

* Remove redundant backslash

* fix test cases

* feat: add per token data for recurring donations statistcs (pie chart - dashboard analytics)

* Change commands to run migrations as js (#1714)

* Change commands to run migrations as js

* Remove unnecessary mkdir steps from build command in package.json

* Fix migrations address in ormconfig.ts

* Fix build command (#1715)

* make config directory and the copy the configs

* Add -p option to mkdir command

* Check config directory existing and then copy content to it

* Revert migration changes (#1717)

* Revert "Check config directory existing and then copy content to it"

This reverts commit 1fb9fa2.

* Revert "Fix build command (#1715)"

This reverts commit 4b570a7.

* Revert "Change commands to run migrations as js (#1714)"

This reverts commit 18f3239.

* Optimise relevant donation flow (#1698)

* Add migrations to add donation percentage and fill it

* Add donation percentage and use it in donation metrics calculation

* Fix bug in converting to number

* Fix bug unit test

* Add donation percentage to test data to correctly calculate donation metrics

* remove giveth old project to fix the test

* Apply review changes

* Skip heavy migrations related to relevantDonations on test environment to speedup pipelines

* Fix typo

* change argument name

* Fix tests based on changes

* fix: minimumPassportScore issue when tapping float number on adminJS

* Add index to useDonationBox field (#1723)

* Run migrations as js files (#1718)

* Change commands to run migrations as js

* Remove unnecessary mkdir steps from build command in package.json

* Fix migrations address in ormconfig.ts

* Change build command to work correctly if config folder is not exists

* Revert "Run migrations as js files (#1718)" (#1724)

This reverts commit 015e383.

* Which tokens are used the most on each chain by unique donors

* change getDonationStats to typeorm

* update Bull

* Use raw select query instead of find function from typeorm (#1729)

* gitcoin API update

* gitcoin API update

* gitcoin API update

* Add all network labels in admin panel, project tab

* Fix eslint errors

* added graphql query to fetch recurring donations by date adn project id

* fixed lint

* Add all network labels in admin panel, project tab

* allow to download email addresses

* fix: returning QF tag to the user bookmarked projects

* removed unnecessary ql fields

* added test cases for recurring donations by date resolver

* Make sure all Endaoment projects have been added to our DB (#1751)

* Make sure all Endaoment projects have been added to our DB

related to #1598 (comment)

* Fix eslint errors

* Add appropriate banner images for imported endaoment projects

related to #1600 (comment)

* Add on conflict do nothing for create endaoment organization migration

* Make organizationId serial if it's not already

* Fix eslint errors

* Fix add endaoment organization migration

* Fix eslint errors

* Comment run migrations on production ci

* Fix categories of endaoment projects

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Ramin <[email protected]>
Co-authored-by: Carlos <[email protected]>
Co-authored-by: Meriem-BM <[email protected]>
Co-authored-by: Ali Ebrahimi <[email protected]>
Co-authored-by: kkatusic <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com>
Co-authored-by: CarlosQ96 <[email protected]>
Co-authored-by: Reshzera <[email protected]>
Co-authored-by: ali ebrahimi <[email protected]>
Co-authored-by: Lovel George <[email protected]>
  • Loading branch information
12 people authored Aug 11, 2024
1 parent 88f562f commit 21ed2ae
Show file tree
Hide file tree
Showing 31 changed files with 1,264 additions and 377 deletions.
5 changes: 3 additions & 2 deletions .github/workflows/master-pipeline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,9 @@ jobs:
- name: Run build
run: npm run build

- name: Run migrations
run: npm run db:migrate:run:test
# It keeps failing, comment it to test it's our code problem or the production dump on AWS
# - name: Run migrations
# run: npm run db:migrate:run:test

- name: Run tests
run: npm run test
Expand Down
1 change: 0 additions & 1 deletion config/example.env
Original file line number Diff line number Diff line change
Expand Up @@ -292,7 +292,6 @@ ORTTO_PERSON_API=https://api.ap3api.com/v1/person/merge


RECURRING_DONATION_VERIFICATION_EXPIRATION_HOURS=24
VERIFY_RECURRING_DONATION_CRONJOB_EXPRESSION=0 * * * * *
NUMBER_OF_VERIFY_RECURRING_DONATION_CONCURRENT_JOB=1
ENABLE_DRAFT_RECURRING_DONATION=true
DRAFT_RECURRING_DONATION_MATCH_EXPIRATION_HOURS=24
Expand Down
64 changes: 64 additions & 0 deletions migration/1719740230650-add_endaoment_organization.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
import { ORGANIZATION_LABELS } from '../src/entities/organization';
import { NETWORK_IDS } from '../src/provider';

export class AddEndaomentOrganization1719740230650
implements MigrationInterface
{
public async up(queryRunner: QueryRunner): Promise<void> {
// Ensure the 'id' column is serial if it's not already
await queryRunner.query(`
DO $$
BEGIN
IF EXISTS (
SELECT 1
FROM information_schema.columns
WHERE table_name = 'organization'
AND column_name = 'id'
AND column_default IS NOT NULL
AND column_default LIKE 'nextval%'
) THEN
-- Column is already serial, do nothing
RAISE NOTICE 'Column id is already serial';
ELSE
-- Column is not serial, make it serial
ALTER TABLE "organization" ALTER COLUMN "id" TYPE BIGINT;
ALTER TABLE "organization" ALTER COLUMN "id" SET NOT NULL;
ALTER TABLE "organization" ALTER COLUMN "id" ADD GENERATED BY DEFAULT AS IDENTITY;
END IF;
END $$;
`);

// Insert the organization if it doesn't exist already
await queryRunner.query(`
INSERT INTO "organization" ("name", "disableNotifications", "disableRecurringDonations", "disableUpdateEnforcement", "label", "website", "supportCustomTokens")
SELECT 'Endaoment', true, true, true, '${ORGANIZATION_LABELS.ENDAOMENT}', 'https://endaoment.org', false
WHERE NOT EXISTS (SELECT 1 FROM "organization" WHERE "label" = '${ORGANIZATION_LABELS.ENDAOMENT}');
`);

const endaomentOrganization = (
await queryRunner.query(
`SELECT * FROM "organization" WHERE "label" = '${ORGANIZATION_LABELS.ENDAOMENT}'`,
)
)[0];

const tokens = await queryRunner.query(`
SELECT * FROM "token"
WHERE "networkId" = ${NETWORK_IDS.BASE_MAINNET} OR "networkId" = ${NETWORK_IDS.MAIN_NET} OR "networkId" = ${NETWORK_IDS.OPTIMISTIC};
`);

for (const token of tokens) {
await queryRunner.query(`
INSERT INTO "organization_tokens_token" ("tokenId", "organizationId")
VALUES (${token.id}, ${endaomentOrganization.id})
ON CONFLICT DO NOTHING;
`);
}
}

public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
DELETE FROM "organization" WHERE "label" = '${ORGANIZATION_LABELS.ENDAOMENT}';
`);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,19 +22,19 @@ export class CreateEndaomentsCategories1719808494903
await queryRunner.query(`
INSERT INTO "category" ("name", "value", "source", "mainCategoryId", "isActive")
VALUES
('Endaoment', 'endaoment', '', ${ngoMainCategory[0].id}, true),
('Religious', 'religious', '', ${artCultureMainCategory[0].id}, true),
('Disaster Relief', 'disaster-relief', '', ${ngoMainCategory[0].id}, true),
('Recreation', 'recreation', '', ${healthWellnessMainCategory[0].id}, true),
('Financial Services', 'financial-services', '', ${financeMainCategory[0].id}, true),
('International Aid', 'international-aid', '', ${ngoMainCategory[0].id}, true);
('endaoment', 'Endaoment', '', ${ngoMainCategory[0].id}, true),
('religious', 'Religious', '', ${artCultureMainCategory[0].id}, true),
('disaster-relief', 'Disaster Relief', '', ${ngoMainCategory[0].id}, true),
('recreation', 'Recreation', '', ${healthWellnessMainCategory[0].id}, true),
('financial-services', 'Financial Services', '', ${financeMainCategory[0].id}, true),
('international-aid', 'International Aid', '', ${ngoMainCategory[0].id}, true);
`);
}

public async down(queryRunner: QueryRunner): Promise<void> {
// Delete Sub-Categories
await queryRunner.query(
`DELETE FROM "category" WHERE "value" IN ('endaoment', 'religious', 'disaster-relief', 'recreation', 'financial-services', 'international-aid')`,
`DELETE FROM "category" WHERE "name" IN ('endaoment', 'religious', 'disaster-relief', 'recreation', 'financial-services', 'international-aid')`,
);
}
}
Original file line number Diff line number Diff line change
@@ -1,11 +1,55 @@
import { MigrationInterface, QueryRunner } from 'typeorm';
import { endaomentProjectCategoryMapping } from '../data/endaomentProjectCategoryMapping';
import { endaomentProjects } from '../data/importedEndaomentProjects';
import { NETWORK_IDS } from '../../src/provider';
import { ReviewStatus } from '../../src/entities/project';
import { endaomentProjectCategoryMapping } from './data/endaomentProjectCategoryMapping';
import { endaomentProjects } from './data/importedEndaomentProjects';
import { NETWORK_IDS } from '../src/provider';
import { ReviewStatus } from '../src/entities/project';
import {
creteSlugFromProject,
titleWithoutSpecialCharacters,
} from '../src/utils/utils';

export class AddEndaomentsProjects1719808494904 implements MigrationInterface {
public async up(queryRunner: QueryRunner): Promise<void> {
const imageCategoryMapping = {
'Public Goods': 'community',
'Peace & Justice': 'community',
'Sustainable Cities & Communities': 'nature',
Housing: 'community',
'Social Services': 'community',
'Family & Children': 'community',
'Health Care': 'community',
'Registered Non-profits': 'non-profit',
Research: 'education',
'Mental Health': 'health-wellness',
Animals: 'nature',
Nutrition: 'health-wellness',
Religious: 'community',
Art: 'art-culture',
Food: 'community',
'Disaster Relief': 'non-profit',
'Conservation & Biodiversity': 'nature',
Education: 'education',
'Industry & Innovation': 'economics-infrastructure',
'Financial Services': 'finance',
Schooling: 'education',
Inclusion: 'equality',
Climate: 'nature',
'Water & Sanitation': 'community',
Tech: 'technology',
Employment: 'finance',
Infrastructure: 'economics-infrastructure',
'International Aid': 'non-profit',
Other: '1',
Recreation: 'community',
culture: 'art-culture',
Recycling: 'nature',
Agriculture: 'nature',
Grassroots: 'community',
'BIPOC Communities': 'equality',
Fundraising: 'non-profit',
'Registred Non-profits': 'non-profit',
'Gender Equality': 'equality',
};
// Insert the Endaoment organization if it doesn't exist
await queryRunner.query(`
INSERT INTO "organization" ("name", "disableNotifications", "disableRecurringDonations", "disableUpdateEnforcement", "label", "website", "supportCustomTokens")
Expand Down Expand Up @@ -44,26 +88,43 @@ export class AddEndaomentsProjects1719808494904 implements MigrationInterface {
// Insert projects and their addresses
for (const project of endaomentProjects) {
// Prepare slug and quality score
const slugBase = project.name.replace(/[*+~.,()'"!:@]/g, '');
const slug = slugBase
.toLowerCase()
.replace(/ /g, '-')
.replace('/', '-')
.replace('\\', '-');
const title = titleWithoutSpecialCharacters(project.name);
const slugBase = creteSlugFromProject(title);
// const slug = await getAppropriateSlug(slugBase)
const slug = slugBase;

// Insert the project-category relationship in a single query
const getCategoryNames = (nteeCode: string): string[] => {
const mapping = endaomentProjectCategoryMapping.find(
category => category.nteeCode === nteeCode,
);
return mapping
? [
mapping.category1,
mapping.category2,
mapping.category3 || '',
mapping.category4 || '',
].filter(Boolean)
: [];
};
const categoryNames = getCategoryNames(String(project.nteeCode));

const bannerImage = `/images/defaultProjectImages/${imageCategoryMapping[categoryNames[1]] || '1'}.png`;

// Insert the project
await queryRunner.query(`
INSERT INTO "project" (
"title", "description", "organizationId", "walletAddress", "creationDate", "slug", "image", "slugHistory", "statusId", "totalDonations", "totalReactions", "totalProjectUpdates", "listed", "reviewStatus", "verified", "giveBacks", "isImported", "adminUserId"
"title", "description", "descriptionSummary", "organizationId", "walletAddress", "creationDate", "slug", "image", "slugHistory", "statusId", "totalDonations", "totalReactions", "totalProjectUpdates", "listed", "reviewStatus", "verified", "giveBacks", "isImported", "adminUserId"
)
VALUES (
'${project.name.replace(/'/g, '')}',
'${title}',
'${project.description.replace(/'/g, '')}',
'${project.description.replace(/'/g, '')}',
${endaomentOrgId},
'${project.mainnetAddress || ''}',
NOW(),
'${slug}',
'/images/defaultProjectImages/1.png', -- Default image
'${bannerImage}',
'{}', -- Empty slug history
5, -- statusId 5 is 'Active'
0,
Expand All @@ -76,39 +137,23 @@ export class AddEndaomentsProjects1719808494904 implements MigrationInterface {
true,
${adminUser?.id}
)
ON CONFLICT ("slug") DO NOTHING; -- Handle conflict on unique constraint
`);
// ON CONFLICT ("slug") DO NOTHING; -- Handle conflict on unique constraint

// Get the inserted project's ID
const projectIdResult = await queryRunner.query(`
SELECT "id" FROM "project" WHERE "title" = '${project.name.replace(/'/g, '')}' AND "organizationId" = ${endaomentOrgId};
SELECT "id" FROM "project" WHERE "slug" = '${slug}' AND "organizationId" = ${endaomentOrgId};
`);
const projectId = projectIdResult[0]?.id;
if (!projectId) {
// It means we have project with same slug so the creation has failed
continue;
}

// Insert the project-category relationship in a single query
const getCategoryNames = (nteeCode: string): string[] => {
const mapping = endaomentProjectCategoryMapping.find(
category => category.nteeCode === nteeCode,
);
return mapping
? [
mapping.category1,
mapping.category2,
mapping.category3,
mapping.category4,
].filter(Boolean)
: [];
};
const categoryNames = getCategoryNames(String(project.nteeCode));

for (const categoryName of categoryNames) {
const categoryIdResult = await queryRunner.query(`
SELECT "id" FROM "category" WHERE "name" = '${categoryName.replace(/'/g, "''")}' LIMIT 1;
SELECT "id" FROM "category" WHERE "value" = '${categoryName.replace(/'/g, "''")}' LIMIT 1;
`);
const categoryId = categoryIdResult[0]?.id;

Expand Down Expand Up @@ -153,7 +198,7 @@ export class AddEndaomentsProjects1719808494904 implements MigrationInterface {
await queryRunner.query(`
INSERT INTO "project_update" ("userId", "projectId", "content", "title", "createdAt", "isMain")
VALUES (
(SELECT "id" FROM "user" WHERE "email" = '${adminUser?.email || ''}' LIMIT 1),
${adminUser?.id},
${projectId},
'',
'',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,15 +119,17 @@ export class FillUseDonationBoxAndRelevantTxHashInDonation1720634181001
)
.join(', ');

await queryRunner.query(
`
if (updateQuery.length > 0) {
await queryRunner.query(
`
UPDATE donation AS d
SET "useDonationBox" = u."useDonationBox",
"relevantDonationTxHash" = u."relevantDonationTxHash"
FROM (VALUES ${updateQuery}) AS u(id, "useDonationBox", "relevantDonationTxHash")
WHERE d.id = u.id;
`,
);
);
}
}

public async down(queryRunner: QueryRunner): Promise<void> {
Expand Down
Loading

0 comments on commit 21ed2ae

Please sign in to comment.