Skip to content

Commit

Permalink
Merge main to release (#117)
Browse files Browse the repository at this point in the history
* Add Jest testing (#63)

* Initial boilerplate setup

* Add ArticleFactory, TestingDBConnection, FactoryUtils, placeholder article test file

* Add test cases on getAllArticles

* Create PublicationFactory, add tests for getAllArticles, getArticlesByPublicationID(s), getArticlesByPublicationSlug(s)

* Add hooks

* Update README

* Add pr changes

* Add pr changes

* Add tests for incrementShoutouts, searchArticle, getArticlesAfterDate

* Add publication tests and refactor factory files

* Remove test db open message

* Update src/tests/article.test.ts

Co-authored-by: Archit Mehta <[email protected]>

* Update src/tests/data/ArticleFactory.ts

Co-authored-by: Archit Mehta <[email protected]>

* Refactor code

* Refactor byDate

Co-authored-by: Kidus Zegeye <[email protected]>
Co-authored-by: Archit Mehta <[email protected]>

* Add Docstrings to Test Factory Functions (#64)

* Initial boilerplate setup

* Add ArticleFactory, TestingDBConnection, FactoryUtils, placeholder article test file

* Add test cases on getAllArticles

* Create PublicationFactory, add tests for getAllArticles, getArticlesByPublicationID(s), getArticlesByPublicationSlug(s)

* Add hooks

* Update README

* Add pr changes

* Add pr changes

* Add tests for incrementShoutouts, searchArticle, getArticlesAfterDate

* Add publication tests and refactor factory files

* Remove test db open message

* Update src/tests/article.test.ts

Co-authored-by: Archit Mehta <[email protected]>

* Update src/tests/data/ArticleFactory.ts

Co-authored-by: Archit Mehta <[email protected]>

* Refactor code

* Refactor byDate

* Add docstrings

Co-authored-by: Kidus Zegeye <[email protected]>
Co-authored-by: Archit Mehta <[email protected]>

* Update README.md

* Implement community board models (#65)

* Implemented community board models

- implemented Flyer and Organization models for community board feature
- modified User model
- updated typescript version to 4.0.5 to resolve es lint issue

* Revert package.json changes

- reverted package.json changes that are addressed in a different pr

* Add magazines to weekly debrief (#66)

* Implemented community board models

- implemented Flyer and Organization models for community board feature
- modified User model
- updated typescript version to 4.0.5 to resolve es lint issue

* Implemented weekly debrief magazines

- added magazines to weekly debrief feature
- updated user and weekly debrief models to allow tracking of read magazines
- updated logic in user and weekly debrief controllers to enable reading of magazines

* Revert package.json changes

- reverted package.json changes back to the original file
- added additional rules to eslintrc to suppress es lint warnings

* Create jest testing for magazines

- added jest test cases for magazines

* Implement jest testing for User

- implemented unit testing for UserRepo
- indirectly test Weekly Debrief with User unit tests

* Update gitignore

- updated gitignore file to include secrets folder

* Implement reshuffle articles (#68)

* Add Docstrings to Test Factory Functions (#64)

* Initial boilerplate setup

* Add ArticleFactory, TestingDBConnection, FactoryUtils, placeholder article test file

* Add test cases on getAllArticles

* Create PublicationFactory, add tests for getAllArticles, getArticlesByPublicationID(s), getArticlesByPublicationSlug(s)

* Add hooks

* Update README

* Add pr changes

* Add pr changes

* Add tests for incrementShoutouts, searchArticle, getArticlesAfterDate

* Add publication tests and refactor factory files

* Remove test db open message

* Update src/tests/article.test.ts

Co-authored-by: Archit Mehta <[email protected]>

* Update src/tests/data/ArticleFactory.ts

Co-authored-by: Archit Mehta <[email protected]>

* Refactor code

* Refactor byDate

* Add docstrings

Co-authored-by: Kidus Zegeye <[email protected]>
Co-authored-by: Archit Mehta <[email protected]>

Implement shuffle article function

try to implement reshuffling with aggregate

* Implement reshuffling of articles

* Revert package.json, update eslint and update .gitignore to match main branch

---------

Co-authored-by: Kidus Zegeye <[email protected]>

* Implement magazine search (#69)

* Implement magazine search

- implemented searching for magazines

* update magazinerepo

* Add unit test for magazine search

- created unit test for MagazineRepo.searchMagazine

* Convert result of shuffling resolver to ArticleModel (#71)

* Add 3 new publications (Cornell Daily Sun, Collective X, and Cornell Healthcare Review) to publications.js (#70)

* Resolve merge conflicts in publications.json (keep release version) (#76)

* Kidus/filter articles (#48)

* Add covid filter to all article query functions

* Add filtering capability

* Fix getArticleById filter

* Create filter migration script

* Finish migration script

* Add toggle for filtering enforcement

* Implement PR changes

Co-authored-by: Kidus Zegeye <[email protected]>

* Fix BRSN's url

* Migrate bookmark resolver and update User Repo & Entity

* Resolve remaining merge conflicts

* Implement chronological sorting

* Update prod deployment script

* Remove unused MagazineURL index from Magazine DB

* Add no rules to publications.json

* Remove trailing comma

---------

Co-authored-by: Kidus Zegeye <[email protected]>
Co-authored-by: Kidus Zegeye <[email protected]>
Co-authored-by: Archit404Error <[email protected]>

* Revert "Resolve merge conflicts in publications.json (keep release version) (#76)" (#77)

This reverts commit eccf00c.

* fix merge conflicts (#78)

* Kidus/filter articles (#48)

* Add covid filter to all article query functions

* Add filtering capability

* Fix getArticleById filter

* Create filter migration script

* Finish migration script

* Add toggle for filtering enforcement

* Implement PR changes

Co-authored-by: Kidus Zegeye <[email protected]>

* Fix BRSN's url

* Migrate bookmark resolver and update User Repo & Entity

* Resolve remaining merge conflicts

* Implement chronological sorting

* Update prod deployment script

* Remove unused MagazineURL index from Magazine DB

* Add no rules to publications.json

* Remove trailing comma

---------

Co-authored-by: Kidus Zegeye <[email protected]>
Co-authored-by: Kidus Zegeye <[email protected]>
Co-authored-by: Archit404Error <[email protected]>

* Implement community board [1/7] (#81)

* Begin implementing FlyerRepo

- implemented basic FlyerRepo functions
- updated Flyer model to support uploading in app instead of through a google form

* Implement flyers for community board

- alphabetized imports and fields
- finished implementing flyers for community board

* Address pr review comments

- addressed pr review comments
- removed redundant filtering in FlyerRepo
- added checks for null return values in FlyerRepo
- alphabetized imports and exports

* Add imageURL field to Magazine entity. (#73)

* Add no rules to volume-backend's publications.json (#82)

* Implement community board (flyer tests) [2/7] (#84)

* Begin implementing FlyerRepo

- implemented basic FlyerRepo functions
- updated Flyer model to support uploading in app instead of through a google form

* Implement flyers for community board

- alphabetized imports and fields
- finished implementing flyers for community board

* Implement jest testing for flyers

- created jest unit testing for FlyerRepo
- created FlyerFactory to help with jest testing

* Remove isFiltered field from Flyer entity

- removed redundant isFiltered field from Flyer entity (already checked in microservice)
- updated FlyerRepo and jest testing to reflect changes

* Alphabetize imports and exports

- alphabetized imports and exports in FlyerRepo, flyer.test, and FlyerFactory

* Revert merge conflict changes

- reverted merge conflict changes (accept incoming when actually wanted to keep current)

* Address review comments

- alphabetize imports
- add unit test cases for FlyerRepo including searching for 0 flyers and maximum limit in response
- added unit test case for FlyerRepo.getTrendingFlyers

* Address review comments (Shungo)

- added spaces between test cases

* Implement community board organizations (#85)

- resolve merge conflicts in Flyer.ts and FlyerFactory.ts
- update Organization model
- implement logic in OrganizationRepo
- implement queries and mutations in OrganizationResolver

* Implement community board (organization tests) [4/7] (#86)

* Implement community board organizations

- resolve merge conflicts in Flyer.ts and FlyerFactory.ts
- update Organization model
- implement logic in OrganizationRepo
- implement queries and mutations in OrganizationResolver

* Implement jest testing for organizations

- implemented jest testing for community board organizations
- created organizations.json with 3 onboarded organizations
- added FlyerResolver and OrganizationResolver to app.ts

* Implement community board (user queries/mutations) [5/7] (#87)

* Kidus/filter articles (#48)

* Add covid filter to all article query functions

* Add filtering capability

* Fix getArticleById filter

* Create filter migration script

* Finish migration script

* Add toggle for filtering enforcement

* Implement PR changes

Co-authored-by: Kidus Zegeye <[email protected]>

* Fix BRSN's url

* Migrate bookmark resolver and update User Repo & Entity

* Resolve remaining merge conflicts

* Implement chronological sorting

* Update prod deployment script

* Remove unused MagazineURL index from Magazine DB

* Add no rules to publications.json

* Remove trailing comma

* Begin implementing FlyerRepo

- implemented basic FlyerRepo functions
- updated Flyer model to support uploading in app instead of through a google form

* Implement basic community board features

- finished implementing basic organization and flyer repos/resolvers
- created jest testing for organization and flyer repos

* Remove unnecessary OrganizationRepo function

- removed content types route from organization repo and organization resolver

* Implement user routes for community board

- implemented user routes for community board to allow following orgs and reading flyers
- added jest unit test cases for new UserRepo functions

* Implement mutations for following and unfollowing organizations

- added resolvers to UserResolver for following and unfollowing organizations
- updated documentation in UserRepo
- added import of FlyerRepo in app.ts

* Address pr review comments

- fix spelling

* Address pr review comments

- made style consistent in UserRepo by checking for if(user) in appendReadFlyer, appendReadArticle, and appendReadMagazine

---------

Co-authored-by: Kidus Zegeye <[email protected]>
Co-authored-by: Kidus Zegeye <[email protected]>
Co-authored-by: Archit404Error <[email protected]>

* Onboard organizations (#90)

- add organizations from volume-microservice onto organizations.json

* Implement community board (categories and org lists) [6/7] (#89)

* Implement community board organizations

- resolve merge conflicts in Flyer.ts and FlyerFactory.ts
- update Organization model
- implement logic in OrganizationRepo
- implement queries and mutations in OrganizationResolver

* Implement jest testing for organizations

- implemented jest testing for community board organizations
- created organizations.json with 3 onboarded organizations
- added FlyerResolver and OrganizationResolver to app.ts

* initial commit

* Implement organizations as list for flyer model

- updated flyer model to allow a list of organizations and organizationSlugs to be associated with each flyer
- updated flyer and organization queries accordingly
- added unit jest test cases and update old ones accordingly

* Address pr review comments

- removed redundant resolvers
- updated getOrganizationByCategory test

* Address pr review comments (kate)

- updated docs in OrganizationResolver

* Implement cboard start and end dates (#93)

* Implement end dates

- implemented start and end dates
- changed shoutouts to times clicked
- updated testing and documentation to reflect changes

* Address pr review comments

- removed async from getFlyersBeforeDate and getFlyersAfterDate
- updated documentation in FactoryUtils

* add incrementTimesClicked to resolver

* update organization shoutouts query (#94)

* Implement end dates

- implemented start and end dates
- changed shoutouts to times clicked
- updated testing and documentation to reflect changes

* Address pr review comments

- removed async from getFlyersBeforeDate and getFlyersAfterDate
- updated documentation in FactoryUtils

* add incrementTimesClicked to resolver

* Update organization clicks

- changed shoutouts query to clicks in OrganizationResolver

* Implement trending flyers logic (#95)

- updated trending flyers logic
- updated FlyerRepo
- updated documentation in FlyerResolver

* Fixed notification issue (#97)

* Flyer Notifications + Org/Flyer Model Changes (#99)

* Fixed notification issue

* Added flyer notification

* Added flyer notification

* Updated Organization and Flyer models

* Updated test cases

* Inline notification calls

* Improve Search Algorithm (#101)

* Update README.md start instructions

* Update search function for articles

* Remove console log

* Update articles search to use text search instead of regex

* Update search for Flyers and Magazines

* Update documentation, remove unused Fuse package

* Fix README.md start docs

* Filter out past flyers during flyers search

* Fix formatting, improve concision

* Remove start.md

* Changed indexing method to being declared on the models

* Update README.md

Co-authored-by: Archit Mehta <[email protected]>

---------

Co-authored-by: Archit Mehta <[email protected]>

* getFlyersByCategorySlug Query (#100)

* Fixed notification issue

* Added flyer notification

* Added flyer notification

* Updated Organization and Flyer models

* Updated test cases

* Added getFlyersByCategorySlug query

* Update query description

* Inline notification calls

* Update flyer.test.ts

* Update flyer.test.ts

* Merge `vin/create-flyer` to `main` (#104)

* Fixed notification issue

* Added flyer notification

* Added flyer notification

* Updated Organization and Flyer models

* Updated test cases

* Added getFlyersByCategorySlug query

* Update query description

* Inline notification calls

* Add createFlyer mutation

* `deleteFlyer` mutation (#103)

* Add deleteFlyer mutation

* Address PR comments

* Update utils.ts

* Update FlyerRepo.ts

* Trendiness Update and Migration Script for New Flyers Model (#106)

* Add migration script to update data based on new Flyers schema

* Update Flyer trendiness

* Fix comments

* Clean up syntax for get trending flyers

* Remove unnecessary createSpecificsByIndex function

* Zach/trendiness and migration hot fix (#107)

* Add migration script to update data based on new Flyers schema

* Update Flyer trendiness

* Fix comments

* Clean up syntax for get trending flyers

* Remove unnecessary createSpecificsByIndex function

* Fix TypeScript compilation error

* Micro PR for Flyers categorySlug migration (#108)

* Add migration script to update data based on new Flyers schema

* Update Flyer trendiness

* Fix comments

* Clean up syntax for get trending flyers

* Remove unnecessary createSpecificsByIndex function

* Fix TypeScript compilation error

* Update migration script to account for category slug

* Fix formatting for flyers test

* Create `editFlyer` mutation (#105)

* Add `editFlyer`

* Address PR comments

* `checkAccessCode` query for Organization authentication (#109)

* Added Organization authentication

* Updated Authorization

* Implemented  getAllFlyerCategories and tests (#110)

* Implemented  getAllFlyerCategories and tests

* update jest

* update jest

* implemented suggestions from zach, vin, and archit

* got rid of ESLint comment

* fixed names for tests

* Added loops to test cases

* Fixed test case to create flyers with the same category

* Changed 'push' to 'concat'

---------

Co-authored-by: Cindy <[email protected]>

* Changing specifications for getFlyersBeforeDate and getFlyersAfterDate (#112)

* Cindy/flyer categories (#113)

* Implemented  getAllFlyerCategories and tests

* update jest

* update jest

* implemented suggestions from zach, vin, and archit

* got rid of ESLint comment

* fixed names for tests

* Added loops to test cases

* Fixed test case to create flyers with the same category

* Changed 'push' to 'concat'

* Updated `getAllFlyerCategories`

---------

Co-authored-by: Cindy <[email protected]>
Co-authored-by: Vin Bui <[email protected]>

* Increased HTTP request size (#114)

* Added limit to JSON request body

* Update package-lock.json

* Add error message (#116)

* Added limit to JSON request body

* Update package-lock.json

* Added error message

---------

Co-authored-by: Kidus Zegeye <[email protected]>
Co-authored-by: Kidus Zegeye <[email protected]>
Co-authored-by: Archit Mehta <[email protected]>
Co-authored-by: Shungo Najima <[email protected]>
Co-authored-by: Isaac Han <[email protected]>
Co-authored-by: Sasha Loayza <[email protected]>
Co-authored-by: Zachary Seidner <[email protected]>
Co-authored-by: cindy-x-liang <[email protected]>
Co-authored-by: Cindy <[email protected]>
Co-authored-by: Aayush <[email protected]>
  • Loading branch information
11 people authored Oct 9, 2023
1 parent 21ec329 commit 2751a25
Show file tree
Hide file tree
Showing 8 changed files with 1,642 additions and 1,454 deletions.
6 changes: 6 additions & 0 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"editor.codeActionsOnSave": {
"source.fixAll.eslint": true
},
"eslint.validate": ["javascript"]
}
3,023 changes: 1,578 additions & 1,445 deletions package-lock.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@
"@types/express": "^4.17.8",
"@types/mongoose": "^5.7.36",
"@types/node": "^14.11.4",
"eslint": "^7.12.1",
"eslint": "^7.32.0",
"eslint-config-airbnb-typescript-prettier": "^3.1.0",
"husky": "^4.3.0",
"nodemon": "^2.0.4",
Expand Down
2 changes: 1 addition & 1 deletion src/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ const main = async () => {
const app = Express();

app.use(Express.urlencoded({ extended: false }));
app.use(Express.json());
app.use(Express.json({ limit: '50mb' }));

const server = new ApolloServer({
schema,
Expand Down
2 changes: 1 addition & 1 deletion src/middlewares/FlyerMiddleware.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ const FlyerUploadErrorInterceptor: MiddlewareFn<Context> = async ({ args, contex
// If null, move on
return await next();
} catch (err) {
throw new Error('An error occured while uploading the flyer image.');
throw new Error(err as string);
}
};

Expand Down
10 changes: 10 additions & 0 deletions src/repos/FlyerRepo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,15 @@ const getFlyersByCategorySlug = async (
});
};

/**
* Looks for unique category slugs for all the Flyers
*
* @returns a list of Strings with all the category names.
*/
const getAllFlyerCategories = (): Promise<string[]> => {
return FlyerModel.find().distinct('categorySlug').exec();
};

const getFlyerByID = async (id: string): Promise<Flyer> => {
return FlyerModel.findById(new ObjectId(id)).then((flyer) => {
if (!isFlyerFiltered(flyer)) {
Expand Down Expand Up @@ -312,6 +321,7 @@ export default {
deleteFlyer,
editFlyer,
getAllFlyers,
getAllFlyerCategories,
getFlyerByID,
getFlyersAfterDate,
getFlyersBeforeDate,
Expand Down
16 changes: 12 additions & 4 deletions src/resolvers/FlyerResolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -98,8 +98,8 @@ class FlyerResolver {

@Query((_returns) => [Flyer], {
nullable: false,
description: `Returns a list of <Flyers> <since> a given date, limited by <limit>.
<since> is formatted as an compliant RFC 2822 timestamp. Valid examples include: "2019-01-31", "Aug 9, 1995", "Wed, 09 Aug 1995 00:00:00", etc. Default <limit> is ${DEFAULT_LIMIT}`,
description: `Returns a list of <Flyers> <since> a given date, limited by <limit>.
<since> must be in UTC ISO8601 format (e.g. YYYY-mm-ddTHH:MM:ssZ). Default <limit> is ${DEFAULT_LIMIT}`,
})
async getFlyersAfterDate(
@Arg('since') since: string,
Expand All @@ -110,8 +110,8 @@ class FlyerResolver {

@Query((_returns) => [Flyer], {
nullable: false,
description: `Returns a list of <Flyers> <before> a given date, limited by <limit>.
<before> is formatted as an compliant RFC 2822 timestamp. Valid examples include: "2019-01-31", "Aug 9, 1995", "Wed, 09 Aug 1995 00:00:00", etc. Default <limit> is ${DEFAULT_LIMIT}`,
description: `Returns a list of <Flyers> <before> a given date, limited by <limit>.
<before> must be in UTC ISO8601 format (e.g. YYYY-mm-ddTHH:MM:ssZ). Default <limit> is ${DEFAULT_LIMIT}`,
})
async getFlyersBeforeDate(
@Arg('before') before: string,
Expand Down Expand Up @@ -151,6 +151,14 @@ class FlyerResolver {
return FlyerRepo.getFlyersByCategorySlug(categorySlug, limit, offset);
}

@Query((_return) => [String], {
nullable: false,
description: `Returns a list of <Strings> representing all of the categories of the different flyers in this database`,
})
async getAllFlyerCategories() {
return FlyerRepo.getAllFlyerCategories();
}

@FieldResolver((_returns) => Number, { description: 'The trendiness score of a <Flyer>' })
async trendiness(@Root() flyer: Flyer): Promise<number> {
const presentDate = new Date().getTime();
Expand Down
35 changes: 33 additions & 2 deletions src/tests/flyer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { dbConnection, disconnectDB } from './data/TestingDBConnection';
import { DEFAULT_LIMIT } from '../common/constants';
import FactoryUtils from './data/FactoryUtils';
import FlyerFactory from './data/FlyerFactory';
import { FlyerModel } from '../entities/Flyer';
import { Flyer, FlyerModel } from '../entities/Flyer';
import FlyerRepo from '../repos/FlyerRepo';
import OrganizationFactory from './data/OrganizationFactory';
import OrganizationRepo from '../repos/OrganizationRepo';
Expand Down Expand Up @@ -236,7 +236,6 @@ describe('getTrending tests', () => {
});
});


describe('getFlyersByCategorySlug tests', () => {
test('query flyer with invalid slug', async () => {
const flyers = await FlyerFactory.create(2);
Expand Down Expand Up @@ -317,3 +316,35 @@ describe('editFlyer tests', () => {
expect(editFlyerResponse).toBeNull();
});
});

describe('getAllFlyerCategories tests', () => {
test('Ensure only unique CategorySlugs across flyers in collection are returned', async () => {
const flyerSlugs = ['Academic', 'Dance', 'Dance'];
let generatedFlyers: Flyer[] = [];
for (const slug of flyerSlugs) {
generatedFlyers = generatedFlyers.concat(
await FlyerFactory.createSpecific(1, { categorySlug: slug }),
);
}

await FlyerModel.insertMany(generatedFlyers);

const getFlyersResponse = await FlyerRepo.getAllFlyerCategories();
expect(getFlyersResponse.sort()).toEqual(['Academic', 'Dance']);
});

test('When every flyer has a unique CategorySlug, ensure that all unique CategorySlugs are returned', async () => {
const flyerSlugs = ['Academic', 'Dance', 'Social'];
let generatedFlyers: Flyer[] = [];
for (const slug of flyerSlugs) {
generatedFlyers = generatedFlyers.concat(
await FlyerFactory.createSpecific(1, { categorySlug: slug }),
);
}

await FlyerModel.insertMany(generatedFlyers);

const getFlyersResponse = await FlyerRepo.getAllFlyerCategories();
expect(getFlyersResponse.sort()).toEqual(flyerSlugs.sort());
});
});

0 comments on commit 2751a25

Please sign in to comment.