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 TS GraphQL support for Google OAuth #122

Merged
merged 4 commits into from
Sep 3, 2021
Merged

Conversation

chenrichard10
Copy link
Contributor

Ticket link

Closes #102

Implementation description

Steps to test

  1. Follow the exact same steps as Integrate Google OAuth into Python backend #112
  2. Un-comment and comment front-end files for REST and GraphQL along with step 1, verifying that functionality works for GraphQL

What should reviewers focus on?

  • Frontend (Login.tsx, AuthAPIClient.tsx .. )
  • Backend (AuthService.tsx. AuthResolvers.tsx, AuthType.tsx...)

Checklist

  • My PR name is descriptive and in imperative tense
  • My commit messages are descriptive and in imperative tense. My commits are atomic and trivial commits are squashed or fixup'd into non-trivial commits
  • I have run the appropriate linter(s)
  • I have requested a review from the PL, as well as other devs who have background knowledge on this PR or who will be building on top of this PR

@github-actions
Copy link

github-actions bot commented Sep 3, 2021

Visit the preview URL for this PR (updated for commit b89c13f):

https://uw-blueprint-starter-code--pr122-richard-graphqloauth-rvjmq83y.web.app

(expires Fri, 10 Sep 2021 15:55:24 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

}
if (!validatePrimitive(req.body.password, "string")) {
return res.status(400).send(getApiValidationError("password", "string"));
if (req.body.id_token) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should be idToken, we only change it to id_token for python in the baseAPIClient interceptor

@@ -21,9 +21,9 @@ const authService: IAuthService = new AuthService(userService, emailService);
/* Returns access token and user info in response body and sets refreshToken as an httpOnly cookie */
authRouter.post("/login", loginRequestValidator, async (req, res) => {
try {
const authDTO = req.body.idToken
const authDTO = req.body.id_token
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change here as well

? // OAuth
await authService.generateTokenOAuth(req.body.idToken)
await authService.generateTokenOAuth(req.body.id_token)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change here as well

alexguo8
alexguo8 previously approved these changes Sep 3, 2021
@sherryhli sherryhli mentioned this pull request Sep 3, 2021
4 tasks
@sherryhli sherryhli changed the title GraphQL OAuth TS Add TS GraphQL support for Google OAuth Sep 3, 2021
@sherryhli sherryhli merged commit 131f8ee into main Sep 3, 2021
@sherryhli sherryhli deleted the richard/GraphQLOAuth branch September 3, 2021 21:04
sherryhli added a commit that referenced this pull request Sep 4, 2021
* Add example context components for frontend state management (#37)

* Add example context components

* Add ts root dir to fix eslint errors

* Fix typo, add return type to reducer

* Add react plugins to eslint

* Update README.md (#46)

* Linting fixes (#42)

* Add ts plugins to eslint, fix eslint errors

* Remove deep copy of form data

* Add more return types, change prettier errors to warn

* Type decoded JWT, move AuthenticatedUser to types file

* Create AuthTypes

* Fix token expiry

Co-authored-by: Sherry Li <[email protected]>

* Refactor auth functions that use localStorage logic into AuthAPIClient (#45)

* duplicate code to authapiclient.ts

* refactor functions with localstorage to AuthAPIClient

* Update with removed REST tags

* update with pr fixes

* Update mongoose version to remove warnings (#47)

* Configure Sequelize migrations (#48)

* Configure Sequelize migrations using umzug

* Add defaultValue and allowNull options to add column example

* Add swagger for typescript backend (#51)

* Add Python REST Validators (#50)

* add initial validate decorator

* update with modified middleware and add decorators to the respective functions

* add decorator and validate method for entity dto

* Update README.md and add nodemailer config path to secret.config (#49)

* Update README.md

* Add nodemailer config path to secret.config

* Add frontend stack to README.md

* Add minor edits to README.md

* Add TypeScript REST API validation (#52)

* Add auth validators

* Add Entity and User Validators

* Refactor validation utils

* Add API error messages

* Swagger For Python (#54)

* Swagger For Python

* Minor fixes

* Include file name in log using wrapper for Winston typescript logger (#55)

Co-authored-by: Bruce He <[email protected]>

* Create Python FileStorageService (#62)

* Add initial file storage service

* Add initial file storage service

* Create and Update

* Add exception handling and more docstrings

* Make expiration time a parameter, clean up code

* Add content type parameter, update interface

Co-authored-by: Richard Chen <[email protected]>

* Create TypeScript FileStorageService (#59)

* add initial files

* Fix firebase bucket init

* add create file implementation

* add interface notes and add checking if file already exists

* Add updateFile and deleteFile implementations

* update create file method

* update create method notes

* Refactor getFile

* remove import in server.ts

* Update error message on failure to get file

Co-authored-by: Sherry Li <[email protected]>

* add contentType param

* fix formatting in storageService.ts

* Make bucketName a param

* Fix bucket name format

Co-authored-by: tamim-khan <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Add testing frameworks (#57)

* Delete repeated requirements

* Add pytest to requirements

* Create python test examples

* Add typescript BE examples

* Create frontend sample tests

* Add test-db to docker-compose

* Update tests for docker containers

* Update psql conn string

* Add mongodb-memory-server dependency libcurl3 to docker container

* Add mongomock and pytest-mock to py requirements

* Create test_user_service

* Add pg user service test

* Configure SQLAlchemy migrations (#58)

* Configure SQLAlchemy migrations

* Fix create_app configs when calling from Flask CLI

* Update README.md (#64)

* Update README.md

* Apply suggestions from code review

Co-authored-by: Sherry Li <[email protected]>

Co-authored-by: Sherry Li <[email protected]>

* Set up frontend deployment and previews with Firebase Hosting and GitHub Actions (#87)

* Set up frontend hosting using Firebase

* Set up GitHub Actions for frontend deploy preview and automated prod deployment

* Set working directory in frontend deployment GitHub Actions

* Add yarn install step to deployment scripts

* Add entryPoint to action-hosting-deploy step

* Use separate backend urls for previews and prod

* Fix several minor issues (#63)

* Set extended option in express.urlencoded in server.ts

* Fix user_id casing in Python openapi.json

* Simplify Python DTO validators

* Add newline in Logout.tsx

* Rename TypeScript storageService to fileStorageService

* Integrate TS FileStorageService into EntityService (#88)

* temp changes

* add initial changes to EntityServiceMg

* Fix update function in entityservice

* Add file crud methods to postgres entity service

* Add file content type validation

* Fix create endpoints

* Add local file storing to graphql resolvers

* Add endpoint for getting file based on fileUUID

* Change storage service to store bucketName instead of the bucket

* Minor fixes

* Fix update functions in entity service

* Minor fixes

* Add content type to entity request DTO and filestorageservice calls

* Fix graphql

* Fix imports

* Refactor create/update to prevent dangling file references

* Address comments

* Wait for file to finish writing before continuing

* Delete file after uploading

* Add awaits to filestorageservice calls

Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Emily Louie <[email protected]>

* Add frontend csv utility (#90)

* Integrate Python FileStorageService into EntityService (#86)

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Fix python file get endpoint file storage service call

* Remove EntityDTO.file_name from Mongo Impl

* Update validator to check for missing body

* fix

* Fix file get endpoint auth, rename entity DTO variable

* Remove EntityDTO.file_name from Postgres Impl

* Update get_file to return object

* Fix bug in mongo service update logic

* Fix Postgres update route and logic

* Fix python postgres pop file and lint code.

* Postgres migration to add entity file name

Co-authored-by: Bruce He <[email protected]>

* Add backend TS csv generation utility (#91)

* initial files

* add a responseutil

* update rest api

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

Co-authored-by: Alex Guo <[email protected]>

* Add download csv functionality from frontend utility (#95)

* initial files

* add a responseutil

* update rest api

* Add download csv functionality from frontend utility

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

* Add backend API integration

Co-authored-by: Emily Louie <[email protected]>

* Refactor route strings into constants (#111)

* Backend CSV generation Python (#108)

* Initial change

Linter and tests

Update default options

csv default settings

Examples and minor format changes

Update docker-compose.yml

Moved tests to unit

* Add minor fixes

Co-authored-by: Sherry Li <[email protected]>

* Create Typescript registration flow with email verification (#104)

* Add endpoints for register user with email verification

* Check email verified on the firebase user instead of the token

* Create Python registration flow with email verification (#105)

* Add endpoints to register user using email verification

* fix import and add validator

* Add validation for RegisterUserDTO

* Fix accessing the email verification from token

* Change the verification email title

* check email verified in firebase user rather than token

* Frontend User Sign-Up (#115)

* Add sign-up page & auth client register functions

* Rebase on main and make minor routing changes

Co-authored-by: Sherry Li <[email protected]>

* Integrate Google OAuth into Python backend (#112)

* Add google oauth signin to firebase rest client

* Add google oauth login and signup functionality

* Add frontend for google oauth signin

* Fix backend

* Add comment for google user id token

* Integrate Google OAuth into TS (#114)

* Add REST Impl

* Fix try catch

Co-authored-by: Alex Guo <[email protected]>

* Fix email_verified syntax in Python auth_service (#123)

* Add TS GraphQL support for Google OAuth (#122)

* GraphQL OAuth

* rename id_token

* Validators

* Update authValidators.ts

* Remove duplicated code

Co-authored-by: Xin Hao Zhang <[email protected]>
Co-authored-by: alexguo8 <[email protected]>
Co-authored-by: Emily Louie <[email protected]>
Co-authored-by: Tamim Khan <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Dinu Wijetunga <[email protected]>
Co-authored-by: Alex Guo <[email protected]>
sherryhli added a commit that referenced this pull request Sep 8, 2021
* Add example context components for frontend state management (#37)

* Add example context components

* Add ts root dir to fix eslint errors

* Fix typo, add return type to reducer

* Add react plugins to eslint

* Update README.md (#46)

* Linting fixes (#42)

* Add ts plugins to eslint, fix eslint errors

* Remove deep copy of form data

* Add more return types, change prettier errors to warn

* Type decoded JWT, move AuthenticatedUser to types file

* Create AuthTypes

* Fix token expiry

Co-authored-by: Sherry Li <[email protected]>

* Refactor auth functions that use localStorage logic into AuthAPIClient (#45)

* duplicate code to authapiclient.ts

* refactor functions with localstorage to AuthAPIClient

* Update with removed REST tags

* update with pr fixes

* Update mongoose version to remove warnings (#47)

* Configure Sequelize migrations (#48)

* Configure Sequelize migrations using umzug

* Add defaultValue and allowNull options to add column example

* Add swagger for typescript backend (#51)

* Add Python REST Validators (#50)

* add initial validate decorator

* update with modified middleware and add decorators to the respective functions

* add decorator and validate method for entity dto

* Update README.md and add nodemailer config path to secret.config (#49)

* Update README.md

* Add nodemailer config path to secret.config

* Add frontend stack to README.md

* Add minor edits to README.md

* Add TypeScript REST API validation (#52)

* Add auth validators

* Add Entity and User Validators

* Refactor validation utils

* Add API error messages

* Swagger For Python (#54)

* Swagger For Python

* Minor fixes

* Include file name in log using wrapper for Winston typescript logger (#55)

Co-authored-by: Bruce He <[email protected]>

* Create Python FileStorageService (#62)

* Add initial file storage service

* Add initial file storage service

* Create and Update

* Add exception handling and more docstrings

* Make expiration time a parameter, clean up code

* Add content type parameter, update interface

Co-authored-by: Richard Chen <[email protected]>

* Create TypeScript FileStorageService (#59)

* add initial files

* Fix firebase bucket init

* add create file implementation

* add interface notes and add checking if file already exists

* Add updateFile and deleteFile implementations

* update create file method

* update create method notes

* Refactor getFile

* remove import in server.ts

* Update error message on failure to get file

Co-authored-by: Sherry Li <[email protected]>

* add contentType param

* fix formatting in storageService.ts

* Make bucketName a param

* Fix bucket name format

Co-authored-by: tamim-khan <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Add testing frameworks (#57)

* Delete repeated requirements

* Add pytest to requirements

* Create python test examples

* Add typescript BE examples

* Create frontend sample tests

* Add test-db to docker-compose

* Update tests for docker containers

* Update psql conn string

* Add mongodb-memory-server dependency libcurl3 to docker container

* Add mongomock and pytest-mock to py requirements

* Create test_user_service

* Add pg user service test

* Configure SQLAlchemy migrations (#58)

* Configure SQLAlchemy migrations

* Fix create_app configs when calling from Flask CLI

* Update README.md (#64)

* Update README.md

* Apply suggestions from code review

Co-authored-by: Sherry Li <[email protected]>

Co-authored-by: Sherry Li <[email protected]>

* Set up frontend deployment and previews with Firebase Hosting and GitHub Actions (#87)

* Set up frontend hosting using Firebase

* Set up GitHub Actions for frontend deploy preview and automated prod deployment

* Set working directory in frontend deployment GitHub Actions

* Add yarn install step to deployment scripts

* Add entryPoint to action-hosting-deploy step

* Use separate backend urls for previews and prod

* Fix several minor issues (#63)

* Set extended option in express.urlencoded in server.ts

* Fix user_id casing in Python openapi.json

* Simplify Python DTO validators

* Add newline in Logout.tsx

* Rename TypeScript storageService to fileStorageService

* Integrate TS FileStorageService into EntityService (#88)

* temp changes

* add initial changes to EntityServiceMg

* Fix update function in entityservice

* Add file crud methods to postgres entity service

* Add file content type validation

* Fix create endpoints

* Add local file storing to graphql resolvers

* Add endpoint for getting file based on fileUUID

* Change storage service to store bucketName instead of the bucket

* Minor fixes

* Fix update functions in entity service

* Minor fixes

* Add content type to entity request DTO and filestorageservice calls

* Fix graphql

* Fix imports

* Refactor create/update to prevent dangling file references

* Address comments

* Wait for file to finish writing before continuing

* Delete file after uploading

* Add awaits to filestorageservice calls

Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Emily Louie <[email protected]>

* Add frontend csv utility (#90)

* Integrate Python FileStorageService into EntityService (#86)

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Fix python file get endpoint file storage service call

* Remove EntityDTO.file_name from Mongo Impl

* Update validator to check for missing body

* fix

* Fix file get endpoint auth, rename entity DTO variable

* Remove EntityDTO.file_name from Postgres Impl

* Update get_file to return object

* Fix bug in mongo service update logic

* Fix Postgres update route and logic

* Fix python postgres pop file and lint code.

* Postgres migration to add entity file name

Co-authored-by: Bruce He <[email protected]>

* Add backend TS csv generation utility (#91)

* initial files

* add a responseutil

* update rest api

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

Co-authored-by: Alex Guo <[email protected]>

* Add download csv functionality from frontend utility (#95)

* initial files

* add a responseutil

* update rest api

* Add download csv functionality from frontend utility

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

* Add backend API integration

Co-authored-by: Emily Louie <[email protected]>

* Refactor route strings into constants (#111)

* Backend CSV generation Python (#108)

* Initial change

Linter and tests

Update default options

csv default settings

Examples and minor format changes

Update docker-compose.yml

Moved tests to unit

* Add minor fixes

Co-authored-by: Sherry Li <[email protected]>

* Create Typescript registration flow with email verification (#104)

* Add endpoints for register user with email verification

* Check email verified on the firebase user instead of the token

* Create Python registration flow with email verification (#105)

* Add endpoints to register user using email verification

* fix import and add validator

* Add validation for RegisterUserDTO

* Fix accessing the email verification from token

* Change the verification email title

* check email verified in firebase user rather than token

* Frontend User Sign-Up (#115)

* Add sign-up page & auth client register functions

* Rebase on main and make minor routing changes

Co-authored-by: Sherry Li <[email protected]>

* Integrate Google OAuth into Python backend (#112)

* Add google oauth signin to firebase rest client

* Add google oauth login and signup functionality

* Add frontend for google oauth signin

* Fix backend

* Add comment for google user id token

* Integrate Google OAuth into TS (#114)

* Add REST Impl

* Fix try catch

Co-authored-by: Alex Guo <[email protected]>

* Fix email_verified syntax in Python auth_service (#123)

* Add TS GraphQL support for Google OAuth (#122)

* GraphQL OAuth

* rename id_token

* Validators

* Update authValidators.ts

* Fix generate_csv_from_list call in entity and user routes (#119)

* Integrate file uploads and downloads into frontend  (#116)

* add initial upload button and onChange function

* Add field to display table

* Fix mutation and add console.logs to debug

* Update graphql queries in create and update

* Add call in EntityAPIClient, graphql in DisplayTableContainer, and setup FileUtil

* Fix display of buttons to only be shown if the fileName is not null

* Add suggested changes to remove circular JSON errors

* Uncomment python part in docker-compose.yml

* Address PR comments and fix Graphql get in DisplayTableContainer

* Fix REST file upload

* Add REST file update to frontend

* Decamelize formData when using Python backend

* Fix fileUrl access in EntityAPIClient.getFile for Python backend

Co-authored-by: Alex Guo <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Delete duplicate DecodedJWT import in BaseAPIClient.ts

* Fix tag spacing in CRUD components

* Fix field_names logic in csv_utils when file_name is optional

Co-authored-by: Xin Hao Zhang <[email protected]>
Co-authored-by: alexguo8 <[email protected]>
Co-authored-by: Emily Louie <[email protected]>
Co-authored-by: Tamim Khan <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Dinu Wijetunga <[email protected]>
Co-authored-by: Alex Guo <[email protected]>
sherryhli added a commit that referenced this pull request Sep 9, 2021
* Add example context components for frontend state management (#37)

* Add example context components

* Add ts root dir to fix eslint errors

* Fix typo, add return type to reducer

* Add react plugins to eslint

* Update README.md (#46)

* Linting fixes (#42)

* Add ts plugins to eslint, fix eslint errors

* Remove deep copy of form data

* Add more return types, change prettier errors to warn

* Type decoded JWT, move AuthenticatedUser to types file

* Create AuthTypes

* Fix token expiry

Co-authored-by: Sherry Li <[email protected]>

* Refactor auth functions that use localStorage logic into AuthAPIClient (#45)

* duplicate code to authapiclient.ts

* refactor functions with localstorage to AuthAPIClient

* Update with removed REST tags

* update with pr fixes

* Update mongoose version to remove warnings (#47)

* Configure Sequelize migrations (#48)

* Configure Sequelize migrations using umzug

* Add defaultValue and allowNull options to add column example

* Add swagger for typescript backend (#51)

* Add Python REST Validators (#50)

* add initial validate decorator

* update with modified middleware and add decorators to the respective functions

* add decorator and validate method for entity dto

* Update README.md and add nodemailer config path to secret.config (#49)

* Update README.md

* Add nodemailer config path to secret.config

* Add frontend stack to README.md

* Add minor edits to README.md

* Add TypeScript REST API validation (#52)

* Add auth validators

* Add Entity and User Validators

* Refactor validation utils

* Add API error messages

* Swagger For Python (#54)

* Swagger For Python

* Minor fixes

* Include file name in log using wrapper for Winston typescript logger (#55)

Co-authored-by: Bruce He <[email protected]>

* Create Python FileStorageService (#62)

* Add initial file storage service

* Add initial file storage service

* Create and Update

* Add exception handling and more docstrings

* Make expiration time a parameter, clean up code

* Add content type parameter, update interface

Co-authored-by: Richard Chen <[email protected]>

* Create TypeScript FileStorageService (#59)

* add initial files

* Fix firebase bucket init

* add create file implementation

* add interface notes and add checking if file already exists

* Add updateFile and deleteFile implementations

* update create file method

* update create method notes

* Refactor getFile

* remove import in server.ts

* Update error message on failure to get file

Co-authored-by: Sherry Li <[email protected]>

* add contentType param

* fix formatting in storageService.ts

* Make bucketName a param

* Fix bucket name format

Co-authored-by: tamim-khan <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Add testing frameworks (#57)

* Delete repeated requirements

* Add pytest to requirements

* Create python test examples

* Add typescript BE examples

* Create frontend sample tests

* Add test-db to docker-compose

* Update tests for docker containers

* Update psql conn string

* Add mongodb-memory-server dependency libcurl3 to docker container

* Add mongomock and pytest-mock to py requirements

* Create test_user_service

* Add pg user service test

* Configure SQLAlchemy migrations (#58)

* Configure SQLAlchemy migrations

* Fix create_app configs when calling from Flask CLI

* Update README.md (#64)

* Update README.md

* Apply suggestions from code review

Co-authored-by: Sherry Li <[email protected]>

Co-authored-by: Sherry Li <[email protected]>

* Set up frontend deployment and previews with Firebase Hosting and GitHub Actions (#87)

* Set up frontend hosting using Firebase

* Set up GitHub Actions for frontend deploy preview and automated prod deployment

* Set working directory in frontend deployment GitHub Actions

* Add yarn install step to deployment scripts

* Add entryPoint to action-hosting-deploy step

* Use separate backend urls for previews and prod

* Fix several minor issues (#63)

* Set extended option in express.urlencoded in server.ts

* Fix user_id casing in Python openapi.json

* Simplify Python DTO validators

* Add newline in Logout.tsx

* Rename TypeScript storageService to fileStorageService

* Integrate TS FileStorageService into EntityService (#88)

* temp changes

* add initial changes to EntityServiceMg

* Fix update function in entityservice

* Add file crud methods to postgres entity service

* Add file content type validation

* Fix create endpoints

* Add local file storing to graphql resolvers

* Add endpoint for getting file based on fileUUID

* Change storage service to store bucketName instead of the bucket

* Minor fixes

* Fix update functions in entity service

* Minor fixes

* Add content type to entity request DTO and filestorageservice calls

* Fix graphql

* Fix imports

* Refactor create/update to prevent dangling file references

* Address comments

* Wait for file to finish writing before continuing

* Delete file after uploading

* Add awaits to filestorageservice calls

Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Emily Louie <[email protected]>

* Add frontend csv utility (#90)

* Integrate Python FileStorageService into EntityService (#86)

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Fix python file get endpoint file storage service call

* Remove EntityDTO.file_name from Mongo Impl

* Update validator to check for missing body

* fix

* Fix file get endpoint auth, rename entity DTO variable

* Remove EntityDTO.file_name from Postgres Impl

* Update get_file to return object

* Fix bug in mongo service update logic

* Fix Postgres update route and logic

* Fix python postgres pop file and lint code.

* Postgres migration to add entity file name

Co-authored-by: Bruce He <[email protected]>

* Add backend TS csv generation utility (#91)

* initial files

* add a responseutil

* update rest api

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

Co-authored-by: Alex Guo <[email protected]>

* Add download csv functionality from frontend utility (#95)

* initial files

* add a responseutil

* update rest api

* Add download csv functionality from frontend utility

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

* Add backend API integration

Co-authored-by: Emily Louie <[email protected]>

* Refactor route strings into constants (#111)

* Backend CSV generation Python (#108)

* Initial change

Linter and tests

Update default options

csv default settings

Examples and minor format changes

Update docker-compose.yml

Moved tests to unit

* Add minor fixes

Co-authored-by: Sherry Li <[email protected]>

* Create Typescript registration flow with email verification (#104)

* Add endpoints for register user with email verification

* Check email verified on the firebase user instead of the token

* Create Python registration flow with email verification (#105)

* Add endpoints to register user using email verification

* fix import and add validator

* Add validation for RegisterUserDTO

* Fix accessing the email verification from token

* Change the verification email title

* check email verified in firebase user rather than token

* Frontend User Sign-Up (#115)

* Add sign-up page & auth client register functions

* Rebase on main and make minor routing changes

Co-authored-by: Sherry Li <[email protected]>

* Integrate Google OAuth into Python backend (#112)

* Add google oauth signin to firebase rest client

* Add google oauth login and signup functionality

* Add frontend for google oauth signin

* Fix backend

* Add comment for google user id token

* Integrate Google OAuth into TS (#114)

* Add REST Impl

* Fix try catch

Co-authored-by: Alex Guo <[email protected]>

* Fix email_verified syntax in Python auth_service (#123)

* Add TS GraphQL support for Google OAuth (#122)

* GraphQL OAuth

* rename id_token

* Validators

* Update authValidators.ts

* Fix generate_csv_from_list call in entity and user routes (#119)

* Integrate file uploads and downloads into frontend  (#116)

* add initial upload button and onChange function

* Add field to display table

* Fix mutation and add console.logs to debug

* Update graphql queries in create and update

* Add call in EntityAPIClient, graphql in DisplayTableContainer, and setup FileUtil

* Fix display of buttons to only be shown if the fileName is not null

* Add suggested changes to remove circular JSON errors

* Uncomment python part in docker-compose.yml

* Address PR comments and fix Graphql get in DisplayTableContainer

* Fix REST file upload

* Add REST file update to frontend

* Decamelize formData when using Python backend

* Fix fileUrl access in EntityAPIClient.getFile for Python backend

Co-authored-by: Alex Guo <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Create HooksDemo page (#125)

Co-authored-by: Xin Hao Zhang <[email protected]>
Co-authored-by: alexguo8 <[email protected]>
Co-authored-by: Emily Louie <[email protected]>
Co-authored-by: Tamim Khan <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Dinu Wijetunga <[email protected]>
Co-authored-by: Alex Guo <[email protected]>
sherryhli added a commit that referenced this pull request Sep 10, 2021
* Add example context components for frontend state management (#37)

* Add example context components

* Add ts root dir to fix eslint errors

* Fix typo, add return type to reducer

* Add react plugins to eslint

* Update README.md (#46)

* Linting fixes (#42)

* Add ts plugins to eslint, fix eslint errors

* Remove deep copy of form data

* Add more return types, change prettier errors to warn

* Type decoded JWT, move AuthenticatedUser to types file

* Create AuthTypes

* Fix token expiry

Co-authored-by: Sherry Li <[email protected]>

* Refactor auth functions that use localStorage logic into AuthAPIClient (#45)

* duplicate code to authapiclient.ts

* refactor functions with localstorage to AuthAPIClient

* Update with removed REST tags

* update with pr fixes

* Update mongoose version to remove warnings (#47)

* Configure Sequelize migrations (#48)

* Configure Sequelize migrations using umzug

* Add defaultValue and allowNull options to add column example

* Add swagger for typescript backend (#51)

* Add Python REST Validators (#50)

* add initial validate decorator

* update with modified middleware and add decorators to the respective functions

* add decorator and validate method for entity dto

* Update README.md and add nodemailer config path to secret.config (#49)

* Update README.md

* Add nodemailer config path to secret.config

* Add frontend stack to README.md

* Add minor edits to README.md

* Add TypeScript REST API validation (#52)

* Add auth validators

* Add Entity and User Validators

* Refactor validation utils

* Add API error messages

* Swagger For Python (#54)

* Swagger For Python

* Minor fixes

* Include file name in log using wrapper for Winston typescript logger (#55)

Co-authored-by: Bruce He <[email protected]>

* Create Python FileStorageService (#62)

* Add initial file storage service

* Add initial file storage service

* Create and Update

* Add exception handling and more docstrings

* Make expiration time a parameter, clean up code

* Add content type parameter, update interface

Co-authored-by: Richard Chen <[email protected]>

* Create TypeScript FileStorageService (#59)

* add initial files

* Fix firebase bucket init

* add create file implementation

* add interface notes and add checking if file already exists

* Add updateFile and deleteFile implementations

* update create file method

* update create method notes

* Refactor getFile

* remove import in server.ts

* Update error message on failure to get file

Co-authored-by: Sherry Li <[email protected]>

* add contentType param

* fix formatting in storageService.ts

* Make bucketName a param

* Fix bucket name format

Co-authored-by: tamim-khan <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Add testing frameworks (#57)

* Delete repeated requirements

* Add pytest to requirements

* Create python test examples

* Add typescript BE examples

* Create frontend sample tests

* Add test-db to docker-compose

* Update tests for docker containers

* Update psql conn string

* Add mongodb-memory-server dependency libcurl3 to docker container

* Add mongomock and pytest-mock to py requirements

* Create test_user_service

* Add pg user service test

* Configure SQLAlchemy migrations (#58)

* Configure SQLAlchemy migrations

* Fix create_app configs when calling from Flask CLI

* Update README.md (#64)

* Update README.md

* Apply suggestions from code review

Co-authored-by: Sherry Li <[email protected]>

Co-authored-by: Sherry Li <[email protected]>

* Set up frontend deployment and previews with Firebase Hosting and GitHub Actions (#87)

* Set up frontend hosting using Firebase

* Set up GitHub Actions for frontend deploy preview and automated prod deployment

* Set working directory in frontend deployment GitHub Actions

* Add yarn install step to deployment scripts

* Add entryPoint to action-hosting-deploy step

* Use separate backend urls for previews and prod

* Fix several minor issues (#63)

* Set extended option in express.urlencoded in server.ts

* Fix user_id casing in Python openapi.json

* Simplify Python DTO validators

* Add newline in Logout.tsx

* Rename TypeScript storageService to fileStorageService

* Integrate TS FileStorageService into EntityService (#88)

* temp changes

* add initial changes to EntityServiceMg

* Fix update function in entityservice

* Add file crud methods to postgres entity service

* Add file content type validation

* Fix create endpoints

* Add local file storing to graphql resolvers

* Add endpoint for getting file based on fileUUID

* Change storage service to store bucketName instead of the bucket

* Minor fixes

* Fix update functions in entity service

* Minor fixes

* Add content type to entity request DTO and filestorageservice calls

* Fix graphql

* Fix imports

* Refactor create/update to prevent dangling file references

* Address comments

* Wait for file to finish writing before continuing

* Delete file after uploading

* Add awaits to filestorageservice calls

Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Emily Louie <[email protected]>

* Add frontend csv utility (#90)

* Integrate Python FileStorageService into EntityService (#86)

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Fix python file get endpoint file storage service call

* Remove EntityDTO.file_name from Mongo Impl

* Update validator to check for missing body

* fix

* Fix file get endpoint auth, rename entity DTO variable

* Remove EntityDTO.file_name from Postgres Impl

* Update get_file to return object

* Fix bug in mongo service update logic

* Fix Postgres update route and logic

* Fix python postgres pop file and lint code.

* Postgres migration to add entity file name

Co-authored-by: Bruce He <[email protected]>

* Add backend TS csv generation utility (#91)

* initial files

* add a responseutil

* update rest api

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

Co-authored-by: Alex Guo <[email protected]>

* Add download csv functionality from frontend utility (#95)

* initial files

* add a responseutil

* update rest api

* Add download csv functionality from frontend utility

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

* Add backend API integration

Co-authored-by: Emily Louie <[email protected]>

* Refactor route strings into constants (#111)

* Backend CSV generation Python (#108)

* Initial change

Linter and tests

Update default options

csv default settings

Examples and minor format changes

Update docker-compose.yml

Moved tests to unit

* Add minor fixes

Co-authored-by: Sherry Li <[email protected]>

* Create Typescript registration flow with email verification (#104)

* Add endpoints for register user with email verification

* Check email verified on the firebase user instead of the token

* Create Python registration flow with email verification (#105)

* Add endpoints to register user using email verification

* fix import and add validator

* Add validation for RegisterUserDTO

* Fix accessing the email verification from token

* Change the verification email title

* check email verified in firebase user rather than token

* Frontend User Sign-Up (#115)

* Add sign-up page & auth client register functions

* Rebase on main and make minor routing changes

Co-authored-by: Sherry Li <[email protected]>

* Integrate Google OAuth into Python backend (#112)

* Add google oauth signin to firebase rest client

* Add google oauth login and signup functionality

* Add frontend for google oauth signin

* Fix backend

* Add comment for google user id token

* Integrate Google OAuth into TS (#114)

* Add REST Impl

* Fix try catch

Co-authored-by: Alex Guo <[email protected]>

* Fix email_verified syntax in Python auth_service (#123)

* Add TS GraphQL support for Google OAuth (#122)

* GraphQL OAuth

* rename id_token

* Validators

* Update authValidators.ts

* Fix generate_csv_from_list call in entity and user routes (#119)

* Integrate file uploads and downloads into frontend  (#116)

* add initial upload button and onChange function

* Add field to display table

* Fix mutation and add console.logs to debug

* Update graphql queries in create and update

* Add call in EntityAPIClient, graphql in DisplayTableContainer, and setup FileUtil

* Fix display of buttons to only be shown if the fileName is not null

* Add suggested changes to remove circular JSON errors

* Uncomment python part in docker-compose.yml

* Address PR comments and fix Graphql get in DisplayTableContainer

* Fix REST file upload

* Add REST file update to frontend

* Decamelize formData when using Python backend

* Fix fileUrl access in EntityAPIClient.getFile for Python backend

Co-authored-by: Alex Guo <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Create HooksDemo page (#125)

* Update README.md (#128)

* Fix various bugs (#127)

* Add type check on self.enum_field before calling .upper() in validator

* Set erase_db_and_sync in Python backend based on TESTING config value

* Change DB dialect name from postgres to postgresql in Python connection string

* Update testDb connect method for compatibility with mongo-memory-server's updated API

* Change setData to setEntities in DisplayTableContainer.tsx

* Add comments to AuthService's generateTokenOAuth method

* Separate SignInResponse types for password and OAuth sign ins

* Fix Python csv_utils to account for optional fields

* Add *.egg-info to .gitignore

* Remove commented out code in backend/typescript/utilities/CSVUtils.ts

* Lint and reformat

* Fix form reset issue after setting file field in CreateForm and UpdateForm

* Fix casing in CSVUtils import path

Co-authored-by: Xin Hao Zhang <[email protected]>
Co-authored-by: alexguo8 <[email protected]>
Co-authored-by: Emily Louie <[email protected]>
Co-authored-by: Tamim Khan <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Dinu Wijetunga <[email protected]>
Co-authored-by: Alex Guo <[email protected]>
sherryhli added a commit that referenced this pull request Sep 11, 2021
* Add example context components for frontend state management (#37)

* Add example context components

* Add ts root dir to fix eslint errors

* Fix typo, add return type to reducer

* Add react plugins to eslint

* Update README.md (#46)

* Linting fixes (#42)

* Add ts plugins to eslint, fix eslint errors

* Remove deep copy of form data

* Add more return types, change prettier errors to warn

* Type decoded JWT, move AuthenticatedUser to types file

* Create AuthTypes

* Fix token expiry

Co-authored-by: Sherry Li <[email protected]>

* Refactor auth functions that use localStorage logic into AuthAPIClient (#45)

* duplicate code to authapiclient.ts

* refactor functions with localstorage to AuthAPIClient

* Update with removed REST tags

* update with pr fixes

* Update mongoose version to remove warnings (#47)

* Configure Sequelize migrations (#48)

* Configure Sequelize migrations using umzug

* Add defaultValue and allowNull options to add column example

* Add swagger for typescript backend (#51)

* Add Python REST Validators (#50)

* add initial validate decorator

* update with modified middleware and add decorators to the respective functions

* add decorator and validate method for entity dto

* Update README.md and add nodemailer config path to secret.config (#49)

* Update README.md

* Add nodemailer config path to secret.config

* Add frontend stack to README.md

* Add minor edits to README.md

* Add TypeScript REST API validation (#52)

* Add auth validators

* Add Entity and User Validators

* Refactor validation utils

* Add API error messages

* Swagger For Python (#54)

* Swagger For Python

* Minor fixes

* Include file name in log using wrapper for Winston typescript logger (#55)

Co-authored-by: Bruce He <[email protected]>

* Create Python FileStorageService (#62)

* Add initial file storage service

* Add initial file storage service

* Create and Update

* Add exception handling and more docstrings

* Make expiration time a parameter, clean up code

* Add content type parameter, update interface

Co-authored-by: Richard Chen <[email protected]>

* Create TypeScript FileStorageService (#59)

* add initial files

* Fix firebase bucket init

* add create file implementation

* add interface notes and add checking if file already exists

* Add updateFile and deleteFile implementations

* update create file method

* update create method notes

* Refactor getFile

* remove import in server.ts

* Update error message on failure to get file

Co-authored-by: Sherry Li <[email protected]>

* add contentType param

* fix formatting in storageService.ts

* Make bucketName a param

* Fix bucket name format

Co-authored-by: tamim-khan <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Add testing frameworks (#57)

* Delete repeated requirements

* Add pytest to requirements

* Create python test examples

* Add typescript BE examples

* Create frontend sample tests

* Add test-db to docker-compose

* Update tests for docker containers

* Update psql conn string

* Add mongodb-memory-server dependency libcurl3 to docker container

* Add mongomock and pytest-mock to py requirements

* Create test_user_service

* Add pg user service test

* Configure SQLAlchemy migrations (#58)

* Configure SQLAlchemy migrations

* Fix create_app configs when calling from Flask CLI

* Update README.md (#64)

* Update README.md

* Apply suggestions from code review

Co-authored-by: Sherry Li <[email protected]>

Co-authored-by: Sherry Li <[email protected]>

* Set up frontend deployment and previews with Firebase Hosting and GitHub Actions (#87)

* Set up frontend hosting using Firebase

* Set up GitHub Actions for frontend deploy preview and automated prod deployment

* Set working directory in frontend deployment GitHub Actions

* Add yarn install step to deployment scripts

* Add entryPoint to action-hosting-deploy step

* Use separate backend urls for previews and prod

* Fix several minor issues (#63)

* Set extended option in express.urlencoded in server.ts

* Fix user_id casing in Python openapi.json

* Simplify Python DTO validators

* Add newline in Logout.tsx

* Rename TypeScript storageService to fileStorageService

* Integrate TS FileStorageService into EntityService (#88)

* temp changes

* add initial changes to EntityServiceMg

* Fix update function in entityservice

* Add file crud methods to postgres entity service

* Add file content type validation

* Fix create endpoints

* Add local file storing to graphql resolvers

* Add endpoint for getting file based on fileUUID

* Change storage service to store bucketName instead of the bucket

* Minor fixes

* Fix update functions in entity service

* Minor fixes

* Add content type to entity request DTO and filestorageservice calls

* Fix graphql

* Fix imports

* Refactor create/update to prevent dangling file references

* Address comments

* Wait for file to finish writing before continuing

* Delete file after uploading

* Add awaits to filestorageservice calls

Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Emily Louie <[email protected]>

* Add frontend csv utility (#90)

* Integrate Python FileStorageService into EntityService (#86)

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Fix python file get endpoint file storage service call

* Remove EntityDTO.file_name from Mongo Impl

* Update validator to check for missing body

* fix

* Fix file get endpoint auth, rename entity DTO variable

* Remove EntityDTO.file_name from Postgres Impl

* Update get_file to return object

* Fix bug in mongo service update logic

* Fix Postgres update route and logic

* Fix python postgres pop file and lint code.

* Postgres migration to add entity file name

Co-authored-by: Bruce He <[email protected]>

* Add backend TS csv generation utility (#91)

* initial files

* add a responseutil

* update rest api

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

Co-authored-by: Alex Guo <[email protected]>

* Add download csv functionality from frontend utility (#95)

* initial files

* add a responseutil

* update rest api

* Add download csv functionality from frontend utility

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

* Add backend API integration

Co-authored-by: Emily Louie <[email protected]>

* Refactor route strings into constants (#111)

* Backend CSV generation Python (#108)

* Initial change

Linter and tests

Update default options

csv default settings

Examples and minor format changes

Update docker-compose.yml

Moved tests to unit

* Add minor fixes

Co-authored-by: Sherry Li <[email protected]>

* Create Typescript registration flow with email verification (#104)

* Add endpoints for register user with email verification

* Check email verified on the firebase user instead of the token

* Create Python registration flow with email verification (#105)

* Add endpoints to register user using email verification

* fix import and add validator

* Add validation for RegisterUserDTO

* Fix accessing the email verification from token

* Change the verification email title

* check email verified in firebase user rather than token

* Frontend User Sign-Up (#115)

* Add sign-up page & auth client register functions

* Rebase on main and make minor routing changes

Co-authored-by: Sherry Li <[email protected]>

* Integrate Google OAuth into Python backend (#112)

* Add google oauth signin to firebase rest client

* Add google oauth login and signup functionality

* Add frontend for google oauth signin

* Fix backend

* Add comment for google user id token

* Integrate Google OAuth into TS (#114)

* Add REST Impl

* Fix try catch

Co-authored-by: Alex Guo <[email protected]>

* Fix email_verified syntax in Python auth_service (#123)

* Add TS GraphQL support for Google OAuth (#122)

* GraphQL OAuth

* rename id_token

* Validators

* Update authValidators.ts

* Fix generate_csv_from_list call in entity and user routes (#119)

* Integrate file uploads and downloads into frontend  (#116)

* add initial upload button and onChange function

* Add field to display table

* Fix mutation and add console.logs to debug

* Update graphql queries in create and update

* Add call in EntityAPIClient, graphql in DisplayTableContainer, and setup FileUtil

* Fix display of buttons to only be shown if the fileName is not null

* Add suggested changes to remove circular JSON errors

* Uncomment python part in docker-compose.yml

* Address PR comments and fix Graphql get in DisplayTableContainer

* Fix REST file upload

* Add REST file update to frontend

* Decamelize formData when using Python backend

* Fix fileUrl access in EntityAPIClient.getFile for Python backend

Co-authored-by: Alex Guo <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Create HooksDemo page (#125)

* Update README.md (#128)

* Fix various bugs (#127)

* Add type check on self.enum_field before calling .upper() in validator

* Set erase_db_and_sync in Python backend based on TESTING config value

* Change DB dialect name from postgres to postgresql in Python connection string

* Update testDb connect method for compatibility with mongo-memory-server's updated API

* Change setData to setEntities in DisplayTableContainer.tsx

* Add comments to AuthService's generateTokenOAuth method

* Separate SignInResponse types for password and OAuth sign ins

* Fix Python csv_utils to account for optional fields

* Add *.egg-info to .gitignore

* Remove commented out code in backend/typescript/utilities/CSVUtils.ts

* Lint and reformat

* Fix form reset issue after setting file field in CreateForm and UpdateForm

* Fix casing in CSVUtils import path

* Update Swagger docs with new endpoints and request body types (#131)

* Import EntityRequest in UpdateForm.tsx

* Include Firebase initialization when no-auth and file-storage are selected

Co-authored-by: Xin Hao Zhang <[email protected]>
Co-authored-by: alexguo8 <[email protected]>
Co-authored-by: Emily Louie <[email protected]>
Co-authored-by: Tamim Khan <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Dinu Wijetunga <[email protected]>
Co-authored-by: Alex Guo <[email protected]>
sherryhli added a commit that referenced this pull request Dec 19, 2021
* Add example context components for frontend state management (#37)

* Add example context components

* Add ts root dir to fix eslint errors

* Fix typo, add return type to reducer

* Add react plugins to eslint

* Update README.md (#46)

* Linting fixes (#42)

* Add ts plugins to eslint, fix eslint errors

* Remove deep copy of form data

* Add more return types, change prettier errors to warn

* Type decoded JWT, move AuthenticatedUser to types file

* Create AuthTypes

* Fix token expiry

Co-authored-by: Sherry Li <[email protected]>

* Refactor auth functions that use localStorage logic into AuthAPIClient (#45)

* duplicate code to authapiclient.ts

* refactor functions with localstorage to AuthAPIClient

* Update with removed REST tags

* update with pr fixes

* Update mongoose version to remove warnings (#47)

* Configure Sequelize migrations (#48)

* Configure Sequelize migrations using umzug

* Add defaultValue and allowNull options to add column example

* Add swagger for typescript backend (#51)

* Add Python REST Validators (#50)

* add initial validate decorator

* update with modified middleware and add decorators to the respective functions

* add decorator and validate method for entity dto

* Update README.md and add nodemailer config path to secret.config (#49)

* Update README.md

* Add nodemailer config path to secret.config

* Add frontend stack to README.md

* Add minor edits to README.md

* Add TypeScript REST API validation (#52)

* Add auth validators

* Add Entity and User Validators

* Refactor validation utils

* Add API error messages

* Swagger For Python (#54)

* Swagger For Python

* Minor fixes

* Include file name in log using wrapper for Winston typescript logger (#55)

Co-authored-by: Bruce He <[email protected]>

* Create Python FileStorageService (#62)

* Add initial file storage service

* Add initial file storage service

* Create and Update

* Add exception handling and more docstrings

* Make expiration time a parameter, clean up code

* Add content type parameter, update interface

Co-authored-by: Richard Chen <[email protected]>

* Create TypeScript FileStorageService (#59)

* add initial files

* Fix firebase bucket init

* add create file implementation

* add interface notes and add checking if file already exists

* Add updateFile and deleteFile implementations

* update create file method

* update create method notes

* Refactor getFile

* remove import in server.ts

* Update error message on failure to get file

Co-authored-by: Sherry Li <[email protected]>

* add contentType param

* fix formatting in storageService.ts

* Make bucketName a param

* Fix bucket name format

Co-authored-by: tamim-khan <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Add testing frameworks (#57)

* Delete repeated requirements

* Add pytest to requirements

* Create python test examples

* Add typescript BE examples

* Create frontend sample tests

* Add test-db to docker-compose

* Update tests for docker containers

* Update psql conn string

* Add mongodb-memory-server dependency libcurl3 to docker container

* Add mongomock and pytest-mock to py requirements

* Create test_user_service

* Add pg user service test

* Configure SQLAlchemy migrations (#58)

* Configure SQLAlchemy migrations

* Fix create_app configs when calling from Flask CLI

* Update README.md (#64)

* Update README.md

* Apply suggestions from code review

Co-authored-by: Sherry Li <[email protected]>

Co-authored-by: Sherry Li <[email protected]>

* Set up frontend deployment and previews with Firebase Hosting and GitHub Actions (#87)

* Set up frontend hosting using Firebase

* Set up GitHub Actions for frontend deploy preview and automated prod deployment

* Set working directory in frontend deployment GitHub Actions

* Add yarn install step to deployment scripts

* Add entryPoint to action-hosting-deploy step

* Use separate backend urls for previews and prod

* Fix several minor issues (#63)

* Set extended option in express.urlencoded in server.ts

* Fix user_id casing in Python openapi.json

* Simplify Python DTO validators

* Add newline in Logout.tsx

* Rename TypeScript storageService to fileStorageService

* Integrate TS FileStorageService into EntityService (#88)

* temp changes

* add initial changes to EntityServiceMg

* Fix update function in entityservice

* Add file crud methods to postgres entity service

* Add file content type validation

* Fix create endpoints

* Add local file storing to graphql resolvers

* Add endpoint for getting file based on fileUUID

* Change storage service to store bucketName instead of the bucket

* Minor fixes

* Fix update functions in entity service

* Minor fixes

* Add content type to entity request DTO and filestorageservice calls

* Fix graphql

* Fix imports

* Refactor create/update to prevent dangling file references

* Address comments

* Wait for file to finish writing before continuing

* Delete file after uploading

* Add awaits to filestorageservice calls

Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Emily Louie <[email protected]>

* Add frontend csv utility (#90)

* Integrate Python FileStorageService into EntityService (#86)

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Fix python file get endpoint file storage service call

* Remove EntityDTO.file_name from Mongo Impl

* Update validator to check for missing body

* fix

* Fix file get endpoint auth, rename entity DTO variable

* Remove EntityDTO.file_name from Postgres Impl

* Update get_file to return object

* Fix bug in mongo service update logic

* Fix Postgres update route and logic

* Fix python postgres pop file and lint code.

* Postgres migration to add entity file name

Co-authored-by: Bruce He <[email protected]>

* Add backend TS csv generation utility (#91)

* initial files

* add a responseutil

* update rest api

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

Co-authored-by: Alex Guo <[email protected]>

* Add download csv functionality from frontend utility (#95)

* initial files

* add a responseutil

* update rest api

* Add download csv functionality from frontend utility

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

* Add backend API integration

Co-authored-by: Emily Louie <[email protected]>

* Refactor route strings into constants (#111)

* Backend CSV generation Python (#108)

* Initial change

Linter and tests

Update default options

csv default settings

Examples and minor format changes

Update docker-compose.yml

Moved tests to unit

* Add minor fixes

Co-authored-by: Sherry Li <[email protected]>

* Create Typescript registration flow with email verification (#104)

* Add endpoints for register user with email verification

* Check email verified on the firebase user instead of the token

* Create Python registration flow with email verification (#105)

* Add endpoints to register user using email verification

* fix import and add validator

* Add validation for RegisterUserDTO

* Fix accessing the email verification from token

* Change the verification email title

* check email verified in firebase user rather than token

* Frontend User Sign-Up (#115)

* Add sign-up page & auth client register functions

* Rebase on main and make minor routing changes

Co-authored-by: Sherry Li <[email protected]>

* Integrate Google OAuth into Python backend (#112)

* Add google oauth signin to firebase rest client

* Add google oauth login and signup functionality

* Add frontend for google oauth signin

* Fix backend

* Add comment for google user id token

* Integrate Google OAuth into TS (#114)

* Add REST Impl

* Fix try catch

Co-authored-by: Alex Guo <[email protected]>

* Fix email_verified syntax in Python auth_service (#123)

* Add TS GraphQL support for Google OAuth (#122)

* GraphQL OAuth

* rename id_token

* Validators

* Update authValidators.ts

* Fix generate_csv_from_list call in entity and user routes (#119)

* Integrate file uploads and downloads into frontend  (#116)

* add initial upload button and onChange function

* Add field to display table

* Fix mutation and add console.logs to debug

* Update graphql queries in create and update

* Add call in EntityAPIClient, graphql in DisplayTableContainer, and setup FileUtil

* Fix display of buttons to only be shown if the fileName is not null

* Add suggested changes to remove circular JSON errors

* Uncomment python part in docker-compose.yml

* Address PR comments and fix Graphql get in DisplayTableContainer

* Fix REST file upload

* Add REST file update to frontend

* Decamelize formData when using Python backend

* Fix fileUrl access in EntityAPIClient.getFile for Python backend

Co-authored-by: Alex Guo <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Create HooksDemo page (#125)

* Update README.md (#128)

* Fix various bugs (#127)

* Add type check on self.enum_field before calling .upper() in validator

* Set erase_db_and_sync in Python backend based on TESTING config value

* Change DB dialect name from postgres to postgresql in Python connection string

* Update testDb connect method for compatibility with mongo-memory-server's updated API

* Change setData to setEntities in DisplayTableContainer.tsx

* Add comments to AuthService's generateTokenOAuth method

* Separate SignInResponse types for password and OAuth sign ins

* Fix Python csv_utils to account for optional fields

* Add *.egg-info to .gitignore

* Remove commented out code in backend/typescript/utilities/CSVUtils.ts

* Lint and reformat

* Fix form reset issue after setting file field in CreateForm and UpdateForm

* Fix casing in CSVUtils import path

* Update Swagger docs with new endpoints and request body types (#131)

* Fix error when deleting an entity with no file in Python (#133)

* Fix error when deleting an entity with no file

* Add id return for delete entity endpoint in TypeScript

* Address comment

* Modify and clean up infra setup (#134)

* Add db health check, db init script, and container names

* Make scripts executable

* Fix formatting in backend/python/app/__init__.py

* Fix whitespace

* Fix ApolloClient link when using file storage without auth

* Change user_id param type in Python update user endpoint

Co-authored-by: Xin Hao Zhang <[email protected]>
Co-authored-by: alexguo8 <[email protected]>
Co-authored-by: Emily Louie <[email protected]>
Co-authored-by: Tamim Khan <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Dinu Wijetunga <[email protected]>
Co-authored-by: Alex Guo <[email protected]>
sherryhli added a commit that referenced this pull request Jan 11, 2022
* Add example context components for frontend state management (#37)

* Add example context components

* Add ts root dir to fix eslint errors

* Fix typo, add return type to reducer

* Add react plugins to eslint

* Update README.md (#46)

* Linting fixes (#42)

* Add ts plugins to eslint, fix eslint errors

* Remove deep copy of form data

* Add more return types, change prettier errors to warn

* Type decoded JWT, move AuthenticatedUser to types file

* Create AuthTypes

* Fix token expiry

Co-authored-by: Sherry Li <[email protected]>

* Refactor auth functions that use localStorage logic into AuthAPIClient (#45)

* duplicate code to authapiclient.ts

* refactor functions with localstorage to AuthAPIClient

* Update with removed REST tags

* update with pr fixes

* Update mongoose version to remove warnings (#47)

* Configure Sequelize migrations (#48)

* Configure Sequelize migrations using umzug

* Add defaultValue and allowNull options to add column example

* Add swagger for typescript backend (#51)

* Add Python REST Validators (#50)

* add initial validate decorator

* update with modified middleware and add decorators to the respective functions

* add decorator and validate method for entity dto

* Update README.md and add nodemailer config path to secret.config (#49)

* Update README.md

* Add nodemailer config path to secret.config

* Add frontend stack to README.md

* Add minor edits to README.md

* Add TypeScript REST API validation (#52)

* Add auth validators

* Add Entity and User Validators

* Refactor validation utils

* Add API error messages

* Swagger For Python (#54)

* Swagger For Python

* Minor fixes

* Include file name in log using wrapper for Winston typescript logger (#55)

Co-authored-by: Bruce He <[email protected]>

* Create Python FileStorageService (#62)

* Add initial file storage service

* Add initial file storage service

* Create and Update

* Add exception handling and more docstrings

* Make expiration time a parameter, clean up code

* Add content type parameter, update interface

Co-authored-by: Richard Chen <[email protected]>

* Create TypeScript FileStorageService (#59)

* add initial files

* Fix firebase bucket init

* add create file implementation

* add interface notes and add checking if file already exists

* Add updateFile and deleteFile implementations

* update create file method

* update create method notes

* Refactor getFile

* remove import in server.ts

* Update error message on failure to get file

Co-authored-by: Sherry Li <[email protected]>

* add contentType param

* fix formatting in storageService.ts

* Make bucketName a param

* Fix bucket name format

Co-authored-by: tamim-khan <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Add testing frameworks (#57)

* Delete repeated requirements

* Add pytest to requirements

* Create python test examples

* Add typescript BE examples

* Create frontend sample tests

* Add test-db to docker-compose

* Update tests for docker containers

* Update psql conn string

* Add mongodb-memory-server dependency libcurl3 to docker container

* Add mongomock and pytest-mock to py requirements

* Create test_user_service

* Add pg user service test

* Configure SQLAlchemy migrations (#58)

* Configure SQLAlchemy migrations

* Fix create_app configs when calling from Flask CLI

* Update README.md (#64)

* Update README.md

* Apply suggestions from code review

Co-authored-by: Sherry Li <[email protected]>

Co-authored-by: Sherry Li <[email protected]>

* Set up frontend deployment and previews with Firebase Hosting and GitHub Actions (#87)

* Set up frontend hosting using Firebase

* Set up GitHub Actions for frontend deploy preview and automated prod deployment

* Set working directory in frontend deployment GitHub Actions

* Add yarn install step to deployment scripts

* Add entryPoint to action-hosting-deploy step

* Use separate backend urls for previews and prod

* Fix several minor issues (#63)

* Set extended option in express.urlencoded in server.ts

* Fix user_id casing in Python openapi.json

* Simplify Python DTO validators

* Add newline in Logout.tsx

* Rename TypeScript storageService to fileStorageService

* Integrate TS FileStorageService into EntityService (#88)

* temp changes

* add initial changes to EntityServiceMg

* Fix update function in entityservice

* Add file crud methods to postgres entity service

* Add file content type validation

* Fix create endpoints

* Add local file storing to graphql resolvers

* Add endpoint for getting file based on fileUUID

* Change storage service to store bucketName instead of the bucket

* Minor fixes

* Fix update functions in entity service

* Minor fixes

* Add content type to entity request DTO and filestorageservice calls

* Fix graphql

* Fix imports

* Refactor create/update to prevent dangling file references

* Address comments

* Wait for file to finish writing before continuing

* Delete file after uploading

* Add awaits to filestorageservice calls

Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Emily Louie <[email protected]>

* Add frontend csv utility (#90)

* Integrate Python FileStorageService into EntityService (#86)

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Fix python file get endpoint file storage service call

* Remove EntityDTO.file_name from Mongo Impl

* Update validator to check for missing body

* fix

* Fix file get endpoint auth, rename entity DTO variable

* Remove EntityDTO.file_name from Postgres Impl

* Update get_file to return object

* Fix bug in mongo service update logic

* Fix Postgres update route and logic

* Fix python postgres pop file and lint code.

* Postgres migration to add entity file name

Co-authored-by: Bruce He <[email protected]>

* Add backend TS csv generation utility (#91)

* initial files

* add a responseutil

* update rest api

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

Co-authored-by: Alex Guo <[email protected]>

* Add download csv functionality from frontend utility (#95)

* initial files

* add a responseutil

* update rest api

* Add download csv functionality from frontend utility

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

* Add backend API integration

Co-authored-by: Emily Louie <[email protected]>

* Refactor route strings into constants (#111)

* Backend CSV generation Python (#108)

* Initial change

Linter and tests

Update default options

csv default settings

Examples and minor format changes

Update docker-compose.yml

Moved tests to unit

* Add minor fixes

Co-authored-by: Sherry Li <[email protected]>

* Create Typescript registration flow with email verification (#104)

* Add endpoints for register user with email verification

* Check email verified on the firebase user instead of the token

* Create Python registration flow with email verification (#105)

* Add endpoints to register user using email verification

* fix import and add validator

* Add validation for RegisterUserDTO

* Fix accessing the email verification from token

* Change the verification email title

* check email verified in firebase user rather than token

* Frontend User Sign-Up (#115)

* Add sign-up page & auth client register functions

* Rebase on main and make minor routing changes

Co-authored-by: Sherry Li <[email protected]>

* Integrate Google OAuth into Python backend (#112)

* Add google oauth signin to firebase rest client

* Add google oauth login and signup functionality

* Add frontend for google oauth signin

* Fix backend

* Add comment for google user id token

* Integrate Google OAuth into TS (#114)

* Add REST Impl

* Fix try catch

Co-authored-by: Alex Guo <[email protected]>

* Fix email_verified syntax in Python auth_service (#123)

* Add TS GraphQL support for Google OAuth (#122)

* GraphQL OAuth

* rename id_token

* Validators

* Update authValidators.ts

* Fix generate_csv_from_list call in entity and user routes (#119)

* Integrate file uploads and downloads into frontend  (#116)

* add initial upload button and onChange function

* Add field to display table

* Fix mutation and add console.logs to debug

* Update graphql queries in create and update

* Add call in EntityAPIClient, graphql in DisplayTableContainer, and setup FileUtil

* Fix display of buttons to only be shown if the fileName is not null

* Add suggested changes to remove circular JSON errors

* Uncomment python part in docker-compose.yml

* Address PR comments and fix Graphql get in DisplayTableContainer

* Fix REST file upload

* Add REST file update to frontend

* Decamelize formData when using Python backend

* Fix fileUrl access in EntityAPIClient.getFile for Python backend

Co-authored-by: Alex Guo <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Create HooksDemo page (#125)

* Update README.md (#128)

* Fix various bugs (#127)

* Add type check on self.enum_field before calling .upper() in validator

* Set erase_db_and_sync in Python backend based on TESTING config value

* Change DB dialect name from postgres to postgresql in Python connection string

* Update testDb connect method for compatibility with mongo-memory-server's updated API

* Change setData to setEntities in DisplayTableContainer.tsx

* Add comments to AuthService's generateTokenOAuth method

* Separate SignInResponse types for password and OAuth sign ins

* Fix Python csv_utils to account for optional fields

* Add *.egg-info to .gitignore

* Remove commented out code in backend/typescript/utilities/CSVUtils.ts

* Lint and reformat

* Fix form reset issue after setting file field in CreateForm and UpdateForm

* Fix casing in CSVUtils import path

* Update Swagger docs with new endpoints and request body types (#131)

* Fix error when deleting an entity with no file in Python (#133)

* Fix error when deleting an entity with no file

* Add id return for delete entity endpoint in TypeScript

* Address comment

* Modify and clean up infra setup (#134)

* Add db health check, db init script, and container names

* Make scripts executable

* Fix formatting in backend/python/app/__init__.py

* Return string id from TypeScript PostgreSQL user and entity services (#136)

* Add end-to-end tests for the backend (#137)

* Add end-to-end tests for the backend

* Rename folder

Co-authored-by: Xin Hao Zhang <[email protected]>
Co-authored-by: alexguo8 <[email protected]>
Co-authored-by: Emily Louie <[email protected]>
Co-authored-by: Tamim Khan <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Dinu Wijetunga <[email protected]>
Co-authored-by: Alex Guo <[email protected]>
sherryhli added a commit that referenced this pull request Jan 14, 2022
* Add example context components for frontend state management (#37)

* Add example context components

* Add ts root dir to fix eslint errors

* Fix typo, add return type to reducer

* Add react plugins to eslint

* Update README.md (#46)

* Linting fixes (#42)

* Add ts plugins to eslint, fix eslint errors

* Remove deep copy of form data

* Add more return types, change prettier errors to warn

* Type decoded JWT, move AuthenticatedUser to types file

* Create AuthTypes

* Fix token expiry

Co-authored-by: Sherry Li <[email protected]>

* Refactor auth functions that use localStorage logic into AuthAPIClient (#45)

* duplicate code to authapiclient.ts

* refactor functions with localstorage to AuthAPIClient

* Update with removed REST tags

* update with pr fixes

* Update mongoose version to remove warnings (#47)

* Configure Sequelize migrations (#48)

* Configure Sequelize migrations using umzug

* Add defaultValue and allowNull options to add column example

* Add swagger for typescript backend (#51)

* Add Python REST Validators (#50)

* add initial validate decorator

* update with modified middleware and add decorators to the respective functions

* add decorator and validate method for entity dto

* Update README.md and add nodemailer config path to secret.config (#49)

* Update README.md

* Add nodemailer config path to secret.config

* Add frontend stack to README.md

* Add minor edits to README.md

* Add TypeScript REST API validation (#52)

* Add auth validators

* Add Entity and User Validators

* Refactor validation utils

* Add API error messages

* Swagger For Python (#54)

* Swagger For Python

* Minor fixes

* Include file name in log using wrapper for Winston typescript logger (#55)

Co-authored-by: Bruce He <[email protected]>

* Create Python FileStorageService (#62)

* Add initial file storage service

* Add initial file storage service

* Create and Update

* Add exception handling and more docstrings

* Make expiration time a parameter, clean up code

* Add content type parameter, update interface

Co-authored-by: Richard Chen <[email protected]>

* Create TypeScript FileStorageService (#59)

* add initial files

* Fix firebase bucket init

* add create file implementation

* add interface notes and add checking if file already exists

* Add updateFile and deleteFile implementations

* update create file method

* update create method notes

* Refactor getFile

* remove import in server.ts

* Update error message on failure to get file

Co-authored-by: Sherry Li <[email protected]>

* add contentType param

* fix formatting in storageService.ts

* Make bucketName a param

* Fix bucket name format

Co-authored-by: tamim-khan <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Add testing frameworks (#57)

* Delete repeated requirements

* Add pytest to requirements

* Create python test examples

* Add typescript BE examples

* Create frontend sample tests

* Add test-db to docker-compose

* Update tests for docker containers

* Update psql conn string

* Add mongodb-memory-server dependency libcurl3 to docker container

* Add mongomock and pytest-mock to py requirements

* Create test_user_service

* Add pg user service test

* Configure SQLAlchemy migrations (#58)

* Configure SQLAlchemy migrations

* Fix create_app configs when calling from Flask CLI

* Update README.md (#64)

* Update README.md

* Apply suggestions from code review

Co-authored-by: Sherry Li <[email protected]>

Co-authored-by: Sherry Li <[email protected]>

* Set up frontend deployment and previews with Firebase Hosting and GitHub Actions (#87)

* Set up frontend hosting using Firebase

* Set up GitHub Actions for frontend deploy preview and automated prod deployment

* Set working directory in frontend deployment GitHub Actions

* Add yarn install step to deployment scripts

* Add entryPoint to action-hosting-deploy step

* Use separate backend urls for previews and prod

* Fix several minor issues (#63)

* Set extended option in express.urlencoded in server.ts

* Fix user_id casing in Python openapi.json

* Simplify Python DTO validators

* Add newline in Logout.tsx

* Rename TypeScript storageService to fileStorageService

* Integrate TS FileStorageService into EntityService (#88)

* temp changes

* add initial changes to EntityServiceMg

* Fix update function in entityservice

* Add file crud methods to postgres entity service

* Add file content type validation

* Fix create endpoints

* Add local file storing to graphql resolvers

* Add endpoint for getting file based on fileUUID

* Change storage service to store bucketName instead of the bucket

* Minor fixes

* Fix update functions in entity service

* Minor fixes

* Add content type to entity request DTO and filestorageservice calls

* Fix graphql

* Fix imports

* Refactor create/update to prevent dangling file references

* Address comments

* Wait for file to finish writing before continuing

* Delete file after uploading

* Add awaits to filestorageservice calls

Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Emily Louie <[email protected]>

* Add frontend csv utility (#90)

* Integrate Python FileStorageService into EntityService (#86)

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Fix python file get endpoint file storage service call

* Remove EntityDTO.file_name from Mongo Impl

* Update validator to check for missing body

* fix

* Fix file get endpoint auth, rename entity DTO variable

* Remove EntityDTO.file_name from Postgres Impl

* Update get_file to return object

* Fix bug in mongo service update logic

* Fix Postgres update route and logic

* Fix python postgres pop file and lint code.

* Postgres migration to add entity file name

Co-authored-by: Bruce He <[email protected]>

* Add backend TS csv generation utility (#91)

* initial files

* add a responseutil

* update rest api

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

Co-authored-by: Alex Guo <[email protected]>

* Add download csv functionality from frontend utility (#95)

* initial files

* add a responseutil

* update rest api

* Add download csv functionality from frontend utility

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

* Add backend API integration

Co-authored-by: Emily Louie <[email protected]>

* Refactor route strings into constants (#111)

* Backend CSV generation Python (#108)

* Initial change

Linter and tests

Update default options

csv default settings

Examples and minor format changes

Update docker-compose.yml

Moved tests to unit

* Add minor fixes

Co-authored-by: Sherry Li <[email protected]>

* Create Typescript registration flow with email verification (#104)

* Add endpoints for register user with email verification

* Check email verified on the firebase user instead of the token

* Create Python registration flow with email verification (#105)

* Add endpoints to register user using email verification

* fix import and add validator

* Add validation for RegisterUserDTO

* Fix accessing the email verification from token

* Change the verification email title

* check email verified in firebase user rather than token

* Frontend User Sign-Up (#115)

* Add sign-up page & auth client register functions

* Rebase on main and make minor routing changes

Co-authored-by: Sherry Li <[email protected]>

* Integrate Google OAuth into Python backend (#112)

* Add google oauth signin to firebase rest client

* Add google oauth login and signup functionality

* Add frontend for google oauth signin

* Fix backend

* Add comment for google user id token

* Integrate Google OAuth into TS (#114)

* Add REST Impl

* Fix try catch

Co-authored-by: Alex Guo <[email protected]>

* Fix email_verified syntax in Python auth_service (#123)

* Add TS GraphQL support for Google OAuth (#122)

* GraphQL OAuth

* rename id_token

* Validators

* Update authValidators.ts

* Fix generate_csv_from_list call in entity and user routes (#119)

* Integrate file uploads and downloads into frontend  (#116)

* add initial upload button and onChange function

* Add field to display table

* Fix mutation and add console.logs to debug

* Update graphql queries in create and update

* Add call in EntityAPIClient, graphql in DisplayTableContainer, and setup FileUtil

* Fix display of buttons to only be shown if the fileName is not null

* Add suggested changes to remove circular JSON errors

* Uncomment python part in docker-compose.yml

* Address PR comments and fix Graphql get in DisplayTableContainer

* Fix REST file upload

* Add REST file update to frontend

* Decamelize formData when using Python backend

* Fix fileUrl access in EntityAPIClient.getFile for Python backend

Co-authored-by: Alex Guo <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Create HooksDemo page (#125)

* Update README.md (#128)

* Fix various bugs (#127)

* Add type check on self.enum_field before calling .upper() in validator

* Set erase_db_and_sync in Python backend based on TESTING config value

* Change DB dialect name from postgres to postgresql in Python connection string

* Update testDb connect method for compatibility with mongo-memory-server's updated API

* Change setData to setEntities in DisplayTableContainer.tsx

* Add comments to AuthService's generateTokenOAuth method

* Separate SignInResponse types for password and OAuth sign ins

* Fix Python csv_utils to account for optional fields

* Add *.egg-info to .gitignore

* Remove commented out code in backend/typescript/utilities/CSVUtils.ts

* Lint and reformat

* Fix form reset issue after setting file field in CreateForm and UpdateForm

* Fix casing in CSVUtils import path

* Update Swagger docs with new endpoints and request body types (#131)

* Fix error when deleting an entity with no file in Python (#133)

* Fix error when deleting an entity with no file

* Add id return for delete entity endpoint in TypeScript

* Address comment

* Modify and clean up infra setup (#134)

* Add db health check, db init script, and container names

* Make scripts executable

* Fix formatting in backend/python/app/__init__.py

* Return string id from TypeScript PostgreSQL user and entity services (#136)

* Add end-to-end tests for the backend (#137)

* Add end-to-end tests for the backend

* Rename folder

* Add files and modifications for backend deployment to Heroku (#138)

* Add files and modifications for backend deployment to Heroku

* Require migrations in TypeScript backend

* Stringify Google login error object

* Fix formatting in frontend

* Remove nodemailer config path from secret.config

* Fix typo in DATABASE_URL

* Check if MONGODB_URL is present before reading from app.config

* Delete demo migrations

* Remove newline from backend/typescript/models/index.ts

* Change model file path pattern in umzug.ts

* Add tags to GitHub Actions workflow files

* Fix id type in TypeScript PostgreSQL backend

* Add file storage tags to entities table migration file

* Add auth tags for users table creation in Python initial migration

Co-authored-by: Xin Hao Zhang <[email protected]>
Co-authored-by: alexguo8 <[email protected]>
Co-authored-by: Emily Louie <[email protected]>
Co-authored-by: Tamim Khan <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Dinu Wijetunga <[email protected]>
Co-authored-by: Alex Guo <[email protected]>
sherryhli added a commit that referenced this pull request Jan 16, 2022
* Add example context components for frontend state management (#37)

* Add example context components

* Add ts root dir to fix eslint errors

* Fix typo, add return type to reducer

* Add react plugins to eslint

* Update README.md (#46)

* Linting fixes (#42)

* Add ts plugins to eslint, fix eslint errors

* Remove deep copy of form data

* Add more return types, change prettier errors to warn

* Type decoded JWT, move AuthenticatedUser to types file

* Create AuthTypes

* Fix token expiry

Co-authored-by: Sherry Li <[email protected]>

* Refactor auth functions that use localStorage logic into AuthAPIClient (#45)

* duplicate code to authapiclient.ts

* refactor functions with localstorage to AuthAPIClient

* Update with removed REST tags

* update with pr fixes

* Update mongoose version to remove warnings (#47)

* Configure Sequelize migrations (#48)

* Configure Sequelize migrations using umzug

* Add defaultValue and allowNull options to add column example

* Add swagger for typescript backend (#51)

* Add Python REST Validators (#50)

* add initial validate decorator

* update with modified middleware and add decorators to the respective functions

* add decorator and validate method for entity dto

* Update README.md and add nodemailer config path to secret.config (#49)

* Update README.md

* Add nodemailer config path to secret.config

* Add frontend stack to README.md

* Add minor edits to README.md

* Add TypeScript REST API validation (#52)

* Add auth validators

* Add Entity and User Validators

* Refactor validation utils

* Add API error messages

* Swagger For Python (#54)

* Swagger For Python

* Minor fixes

* Include file name in log using wrapper for Winston typescript logger (#55)

Co-authored-by: Bruce He <[email protected]>

* Create Python FileStorageService (#62)

* Add initial file storage service

* Add initial file storage service

* Create and Update

* Add exception handling and more docstrings

* Make expiration time a parameter, clean up code

* Add content type parameter, update interface

Co-authored-by: Richard Chen <[email protected]>

* Create TypeScript FileStorageService (#59)

* add initial files

* Fix firebase bucket init

* add create file implementation

* add interface notes and add checking if file already exists

* Add updateFile and deleteFile implementations

* update create file method

* update create method notes

* Refactor getFile

* remove import in server.ts

* Update error message on failure to get file

Co-authored-by: Sherry Li <[email protected]>

* add contentType param

* fix formatting in storageService.ts

* Make bucketName a param

* Fix bucket name format

Co-authored-by: tamim-khan <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Add testing frameworks (#57)

* Delete repeated requirements

* Add pytest to requirements

* Create python test examples

* Add typescript BE examples

* Create frontend sample tests

* Add test-db to docker-compose

* Update tests for docker containers

* Update psql conn string

* Add mongodb-memory-server dependency libcurl3 to docker container

* Add mongomock and pytest-mock to py requirements

* Create test_user_service

* Add pg user service test

* Configure SQLAlchemy migrations (#58)

* Configure SQLAlchemy migrations

* Fix create_app configs when calling from Flask CLI

* Update README.md (#64)

* Update README.md

* Apply suggestions from code review

Co-authored-by: Sherry Li <[email protected]>

Co-authored-by: Sherry Li <[email protected]>

* Set up frontend deployment and previews with Firebase Hosting and GitHub Actions (#87)

* Set up frontend hosting using Firebase

* Set up GitHub Actions for frontend deploy preview and automated prod deployment

* Set working directory in frontend deployment GitHub Actions

* Add yarn install step to deployment scripts

* Add entryPoint to action-hosting-deploy step

* Use separate backend urls for previews and prod

* Fix several minor issues (#63)

* Set extended option in express.urlencoded in server.ts

* Fix user_id casing in Python openapi.json

* Simplify Python DTO validators

* Add newline in Logout.tsx

* Rename TypeScript storageService to fileStorageService

* Integrate TS FileStorageService into EntityService (#88)

* temp changes

* add initial changes to EntityServiceMg

* Fix update function in entityservice

* Add file crud methods to postgres entity service

* Add file content type validation

* Fix create endpoints

* Add local file storing to graphql resolvers

* Add endpoint for getting file based on fileUUID

* Change storage service to store bucketName instead of the bucket

* Minor fixes

* Fix update functions in entity service

* Minor fixes

* Add content type to entity request DTO and filestorageservice calls

* Fix graphql

* Fix imports

* Refactor create/update to prevent dangling file references

* Address comments

* Wait for file to finish writing before continuing

* Delete file after uploading

* Add awaits to filestorageservice calls

Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Emily Louie <[email protected]>

* Add frontend csv utility (#90)

* Integrate Python FileStorageService into EntityService (#86)

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Fix python file get endpoint file storage service call

* Remove EntityDTO.file_name from Mongo Impl

* Update validator to check for missing body

* fix

* Fix file get endpoint auth, rename entity DTO variable

* Remove EntityDTO.file_name from Postgres Impl

* Update get_file to return object

* Fix bug in mongo service update logic

* Fix Postgres update route and logic

* Fix python postgres pop file and lint code.

* Postgres migration to add entity file name

Co-authored-by: Bruce He <[email protected]>

* Add backend TS csv generation utility (#91)

* initial files

* add a responseutil

* update rest api

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

Co-authored-by: Alex Guo <[email protected]>

* Add download csv functionality from frontend utility (#95)

* initial files

* add a responseutil

* update rest api

* Add download csv functionality from frontend utility

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

* Add backend API integration

Co-authored-by: Emily Louie <[email protected]>

* Refactor route strings into constants (#111)

* Backend CSV generation Python (#108)

* Initial change

Linter and tests

Update default options

csv default settings

Examples and minor format changes

Update docker-compose.yml

Moved tests to unit

* Add minor fixes

Co-authored-by: Sherry Li <[email protected]>

* Create Typescript registration flow with email verification (#104)

* Add endpoints for register user with email verification

* Check email verified on the firebase user instead of the token

* Create Python registration flow with email verification (#105)

* Add endpoints to register user using email verification

* fix import and add validator

* Add validation for RegisterUserDTO

* Fix accessing the email verification from token

* Change the verification email title

* check email verified in firebase user rather than token

* Frontend User Sign-Up (#115)

* Add sign-up page & auth client register functions

* Rebase on main and make minor routing changes

Co-authored-by: Sherry Li <[email protected]>

* Integrate Google OAuth into Python backend (#112)

* Add google oauth signin to firebase rest client

* Add google oauth login and signup functionality

* Add frontend for google oauth signin

* Fix backend

* Add comment for google user id token

* Integrate Google OAuth into TS (#114)

* Add REST Impl

* Fix try catch

Co-authored-by: Alex Guo <[email protected]>

* Fix email_verified syntax in Python auth_service (#123)

* Add TS GraphQL support for Google OAuth (#122)

* GraphQL OAuth

* rename id_token

* Validators

* Update authValidators.ts

* Fix generate_csv_from_list call in entity and user routes (#119)

* Integrate file uploads and downloads into frontend  (#116)

* add initial upload button and onChange function

* Add field to display table

* Fix mutation and add console.logs to debug

* Update graphql queries in create and update

* Add call in EntityAPIClient, graphql in DisplayTableContainer, and setup FileUtil

* Fix display of buttons to only be shown if the fileName is not null

* Add suggested changes to remove circular JSON errors

* Uncomment python part in docker-compose.yml

* Address PR comments and fix Graphql get in DisplayTableContainer

* Fix REST file upload

* Add REST file update to frontend

* Decamelize formData when using Python backend

* Fix fileUrl access in EntityAPIClient.getFile for Python backend

Co-authored-by: Alex Guo <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Create HooksDemo page (#125)

* Update README.md (#128)

* Fix various bugs (#127)

* Add type check on self.enum_field before calling .upper() in validator

* Set erase_db_and_sync in Python backend based on TESTING config value

* Change DB dialect name from postgres to postgresql in Python connection string

* Update testDb connect method for compatibility with mongo-memory-server's updated API

* Change setData to setEntities in DisplayTableContainer.tsx

* Add comments to AuthService's generateTokenOAuth method

* Separate SignInResponse types for password and OAuth sign ins

* Fix Python csv_utils to account for optional fields

* Add *.egg-info to .gitignore

* Remove commented out code in backend/typescript/utilities/CSVUtils.ts

* Lint and reformat

* Fix form reset issue after setting file field in CreateForm and UpdateForm

* Fix casing in CSVUtils import path

* Update Swagger docs with new endpoints and request body types (#131)

* Fix error when deleting an entity with no file in Python (#133)

* Fix error when deleting an entity with no file

* Add id return for delete entity endpoint in TypeScript

* Address comment

* Modify and clean up infra setup (#134)

* Add db health check, db init script, and container names

* Make scripts executable

* Fix formatting in backend/python/app/__init__.py

* Return string id from TypeScript PostgreSQL user and entity services (#136)

* Add end-to-end tests for the backend (#137)

* Add end-to-end tests for the backend

* Rename folder

* Add files and modifications for backend deployment to Heroku (#138)

* Add files and modifications for backend deployment to Heroku

* Require migrations in TypeScript backend

* Stringify Google login error object

* Fix formatting in frontend

* Remove nodemailer config path from secret.config

* Fix typo in DATABASE_URL

* Check if MONGODB_URL is present before reading from app.config

* Create GitHub Actions linting workflow and fix lint errors (#149)

* Create GitHub Actions file for running linters

* Fix lint and formatting errors in backend/typescript

* Fix lint and formatting errors in frontend

* Fix quotes in .github/workflows/lint.yml

* Fix newlines and lint errors

Co-authored-by: Xin Hao Zhang <[email protected]>
Co-authored-by: alexguo8 <[email protected]>
Co-authored-by: Emily Louie <[email protected]>
Co-authored-by: Tamim Khan <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Dinu Wijetunga <[email protected]>
Co-authored-by: Alex Guo <[email protected]>
sherryhli added a commit that referenced this pull request Jan 19, 2022
* Add example context components for frontend state management (#37)

* Add example context components

* Add ts root dir to fix eslint errors

* Fix typo, add return type to reducer

* Add react plugins to eslint

* Update README.md (#46)

* Linting fixes (#42)

* Add ts plugins to eslint, fix eslint errors

* Remove deep copy of form data

* Add more return types, change prettier errors to warn

* Type decoded JWT, move AuthenticatedUser to types file

* Create AuthTypes

* Fix token expiry

Co-authored-by: Sherry Li <[email protected]>

* Refactor auth functions that use localStorage logic into AuthAPIClient (#45)

* duplicate code to authapiclient.ts

* refactor functions with localstorage to AuthAPIClient

* Update with removed REST tags

* update with pr fixes

* Update mongoose version to remove warnings (#47)

* Configure Sequelize migrations (#48)

* Configure Sequelize migrations using umzug

* Add defaultValue and allowNull options to add column example

* Add swagger for typescript backend (#51)

* Add Python REST Validators (#50)

* add initial validate decorator

* update with modified middleware and add decorators to the respective functions

* add decorator and validate method for entity dto

* Update README.md and add nodemailer config path to secret.config (#49)

* Update README.md

* Add nodemailer config path to secret.config

* Add frontend stack to README.md

* Add minor edits to README.md

* Add TypeScript REST API validation (#52)

* Add auth validators

* Add Entity and User Validators

* Refactor validation utils

* Add API error messages

* Swagger For Python (#54)

* Swagger For Python

* Minor fixes

* Include file name in log using wrapper for Winston typescript logger (#55)

Co-authored-by: Bruce He <[email protected]>

* Create Python FileStorageService (#62)

* Add initial file storage service

* Add initial file storage service

* Create and Update

* Add exception handling and more docstrings

* Make expiration time a parameter, clean up code

* Add content type parameter, update interface

Co-authored-by: Richard Chen <[email protected]>

* Create TypeScript FileStorageService (#59)

* add initial files

* Fix firebase bucket init

* add create file implementation

* add interface notes and add checking if file already exists

* Add updateFile and deleteFile implementations

* update create file method

* update create method notes

* Refactor getFile

* remove import in server.ts

* Update error message on failure to get file

Co-authored-by: Sherry Li <[email protected]>

* add contentType param

* fix formatting in storageService.ts

* Make bucketName a param

* Fix bucket name format

Co-authored-by: tamim-khan <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Add testing frameworks (#57)

* Delete repeated requirements

* Add pytest to requirements

* Create python test examples

* Add typescript BE examples

* Create frontend sample tests

* Add test-db to docker-compose

* Update tests for docker containers

* Update psql conn string

* Add mongodb-memory-server dependency libcurl3 to docker container

* Add mongomock and pytest-mock to py requirements

* Create test_user_service

* Add pg user service test

* Configure SQLAlchemy migrations (#58)

* Configure SQLAlchemy migrations

* Fix create_app configs when calling from Flask CLI

* Update README.md (#64)

* Update README.md

* Apply suggestions from code review

Co-authored-by: Sherry Li <[email protected]>

Co-authored-by: Sherry Li <[email protected]>

* Set up frontend deployment and previews with Firebase Hosting and GitHub Actions (#87)

* Set up frontend hosting using Firebase

* Set up GitHub Actions for frontend deploy preview and automated prod deployment

* Set working directory in frontend deployment GitHub Actions

* Add yarn install step to deployment scripts

* Add entryPoint to action-hosting-deploy step

* Use separate backend urls for previews and prod

* Fix several minor issues (#63)

* Set extended option in express.urlencoded in server.ts

* Fix user_id casing in Python openapi.json

* Simplify Python DTO validators

* Add newline in Logout.tsx

* Rename TypeScript storageService to fileStorageService

* Integrate TS FileStorageService into EntityService (#88)

* temp changes

* add initial changes to EntityServiceMg

* Fix update function in entityservice

* Add file crud methods to postgres entity service

* Add file content type validation

* Fix create endpoints

* Add local file storing to graphql resolvers

* Add endpoint for getting file based on fileUUID

* Change storage service to store bucketName instead of the bucket

* Minor fixes

* Fix update functions in entity service

* Minor fixes

* Add content type to entity request DTO and filestorageservice calls

* Fix graphql

* Fix imports

* Refactor create/update to prevent dangling file references

* Address comments

* Wait for file to finish writing before continuing

* Delete file after uploading

* Add awaits to filestorageservice calls

Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Emily Louie <[email protected]>

* Add frontend csv utility (#90)

* Integrate Python FileStorageService into EntityService (#86)

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Fix python file get endpoint file storage service call

* Remove EntityDTO.file_name from Mongo Impl

* Update validator to check for missing body

* fix

* Fix file get endpoint auth, rename entity DTO variable

* Remove EntityDTO.file_name from Postgres Impl

* Update get_file to return object

* Fix bug in mongo service update logic

* Fix Postgres update route and logic

* Fix python postgres pop file and lint code.

* Postgres migration to add entity file name

Co-authored-by: Bruce He <[email protected]>

* Add backend TS csv generation utility (#91)

* initial files

* add a responseutil

* update rest api

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

Co-authored-by: Alex Guo <[email protected]>

* Add download csv functionality from frontend utility (#95)

* initial files

* add a responseutil

* update rest api

* Add download csv functionality from frontend utility

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

* Add backend API integration

Co-authored-by: Emily Louie <[email protected]>

* Refactor route strings into constants (#111)

* Backend CSV generation Python (#108)

* Initial change

Linter and tests

Update default options

csv default settings

Examples and minor format changes

Update docker-compose.yml

Moved tests to unit

* Add minor fixes

Co-authored-by: Sherry Li <[email protected]>

* Create Typescript registration flow with email verification (#104)

* Add endpoints for register user with email verification

* Check email verified on the firebase user instead of the token

* Create Python registration flow with email verification (#105)

* Add endpoints to register user using email verification

* fix import and add validator

* Add validation for RegisterUserDTO

* Fix accessing the email verification from token

* Change the verification email title

* check email verified in firebase user rather than token

* Frontend User Sign-Up (#115)

* Add sign-up page & auth client register functions

* Rebase on main and make minor routing changes

Co-authored-by: Sherry Li <[email protected]>

* Integrate Google OAuth into Python backend (#112)

* Add google oauth signin to firebase rest client

* Add google oauth login and signup functionality

* Add frontend for google oauth signin

* Fix backend

* Add comment for google user id token

* Integrate Google OAuth into TS (#114)

* Add REST Impl

* Fix try catch

Co-authored-by: Alex Guo <[email protected]>

* Fix email_verified syntax in Python auth_service (#123)

* Add TS GraphQL support for Google OAuth (#122)

* GraphQL OAuth

* rename id_token

* Validators

* Update authValidators.ts

* Fix generate_csv_from_list call in entity and user routes (#119)

* Integrate file uploads and downloads into frontend  (#116)

* add initial upload button and onChange function

* Add field to display table

* Fix mutation and add console.logs to debug

* Update graphql queries in create and update

* Add call in EntityAPIClient, graphql in DisplayTableContainer, and setup FileUtil

* Fix display of buttons to only be shown if the fileName is not null

* Add suggested changes to remove circular JSON errors

* Uncomment python part in docker-compose.yml

* Address PR comments and fix Graphql get in DisplayTableContainer

* Fix REST file upload

* Add REST file update to frontend

* Decamelize formData when using Python backend

* Fix fileUrl access in EntityAPIClient.getFile for Python backend

Co-authored-by: Alex Guo <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Create HooksDemo page (#125)

* Update README.md (#128)

* Fix various bugs (#127)

* Add type check on self.enum_field before calling .upper() in validator

* Set erase_db_and_sync in Python backend based on TESTING config value

* Change DB dialect name from postgres to postgresql in Python connection string

* Update testDb connect method for compatibility with mongo-memory-server's updated API

* Change setData to setEntities in DisplayTableContainer.tsx

* Add comments to AuthService's generateTokenOAuth method

* Separate SignInResponse types for password and OAuth sign ins

* Fix Python csv_utils to account for optional fields

* Add *.egg-info to .gitignore

* Remove commented out code in backend/typescript/utilities/CSVUtils.ts

* Lint and reformat

* Fix form reset issue after setting file field in CreateForm and UpdateForm

* Fix casing in CSVUtils import path

* Update Swagger docs with new endpoints and request body types (#131)

* Fix error when deleting an entity with no file in Python (#133)

* Fix error when deleting an entity with no file

* Add id return for delete entity endpoint in TypeScript

* Address comment

* Modify and clean up infra setup (#134)

* Add db health check, db init script, and container names

* Make scripts executable

* Fix formatting in backend/python/app/__init__.py

* Return string id from TypeScript PostgreSQL user and entity services (#136)

* Add end-to-end tests for the backend (#137)

* Add end-to-end tests for the backend

* Rename folder

* Add files and modifications for backend deployment to Heroku (#138)

* Add files and modifications for backend deployment to Heroku

* Require migrations in TypeScript backend

* Stringify Google login error object

* Fix formatting in frontend

* Remove nodemailer config path from secret.config

* Fix typo in DATABASE_URL

* Check if MONGODB_URL is present before reading from app.config

* Create GitHub Actions linting workflow and fix lint errors (#149)

* Create GitHub Actions file for running linters

* Fix lint and formatting errors in backend/typescript

* Fix lint and formatting errors in frontend

* Fix quotes in .github/workflows/lint.yml

* Fix error message typing in backend/typescript (#152)

* Fix error message typing in backend/typescript

* Add eslint-disable comments

* Fix content_type check in Python validate middleware (#153)

* Fix newline

* Fix GraphQL file upload bug

Co-authored-by: Xin Hao Zhang <[email protected]>
Co-authored-by: alexguo8 <[email protected]>
Co-authored-by: Emily Louie <[email protected]>
Co-authored-by: Tamim Khan <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Dinu Wijetunga <[email protected]>
Co-authored-by: Alex Guo <[email protected]>
sherryhli added a commit that referenced this pull request Jan 19, 2022
* Add example context components for frontend state management (#37)

* Add example context components

* Add ts root dir to fix eslint errors

* Fix typo, add return type to reducer

* Add react plugins to eslint

* Update README.md (#46)

* Linting fixes (#42)

* Add ts plugins to eslint, fix eslint errors

* Remove deep copy of form data

* Add more return types, change prettier errors to warn

* Type decoded JWT, move AuthenticatedUser to types file

* Create AuthTypes

* Fix token expiry

Co-authored-by: Sherry Li <[email protected]>

* Refactor auth functions that use localStorage logic into AuthAPIClient (#45)

* duplicate code to authapiclient.ts

* refactor functions with localstorage to AuthAPIClient

* Update with removed REST tags

* update with pr fixes

* Update mongoose version to remove warnings (#47)

* Configure Sequelize migrations (#48)

* Configure Sequelize migrations using umzug

* Add defaultValue and allowNull options to add column example

* Add swagger for typescript backend (#51)

* Add Python REST Validators (#50)

* add initial validate decorator

* update with modified middleware and add decorators to the respective functions

* add decorator and validate method for entity dto

* Update README.md and add nodemailer config path to secret.config (#49)

* Update README.md

* Add nodemailer config path to secret.config

* Add frontend stack to README.md

* Add minor edits to README.md

* Add TypeScript REST API validation (#52)

* Add auth validators

* Add Entity and User Validators

* Refactor validation utils

* Add API error messages

* Swagger For Python (#54)

* Swagger For Python

* Minor fixes

* Include file name in log using wrapper for Winston typescript logger (#55)

Co-authored-by: Bruce He <[email protected]>

* Create Python FileStorageService (#62)

* Add initial file storage service

* Add initial file storage service

* Create and Update

* Add exception handling and more docstrings

* Make expiration time a parameter, clean up code

* Add content type parameter, update interface

Co-authored-by: Richard Chen <[email protected]>

* Create TypeScript FileStorageService (#59)

* add initial files

* Fix firebase bucket init

* add create file implementation

* add interface notes and add checking if file already exists

* Add updateFile and deleteFile implementations

* update create file method

* update create method notes

* Refactor getFile

* remove import in server.ts

* Update error message on failure to get file

Co-authored-by: Sherry Li <[email protected]>

* add contentType param

* fix formatting in storageService.ts

* Make bucketName a param

* Fix bucket name format

Co-authored-by: tamim-khan <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Add testing frameworks (#57)

* Delete repeated requirements

* Add pytest to requirements

* Create python test examples

* Add typescript BE examples

* Create frontend sample tests

* Add test-db to docker-compose

* Update tests for docker containers

* Update psql conn string

* Add mongodb-memory-server dependency libcurl3 to docker container

* Add mongomock and pytest-mock to py requirements

* Create test_user_service

* Add pg user service test

* Configure SQLAlchemy migrations (#58)

* Configure SQLAlchemy migrations

* Fix create_app configs when calling from Flask CLI

* Update README.md (#64)

* Update README.md

* Apply suggestions from code review

Co-authored-by: Sherry Li <[email protected]>

Co-authored-by: Sherry Li <[email protected]>

* Set up frontend deployment and previews with Firebase Hosting and GitHub Actions (#87)

* Set up frontend hosting using Firebase

* Set up GitHub Actions for frontend deploy preview and automated prod deployment

* Set working directory in frontend deployment GitHub Actions

* Add yarn install step to deployment scripts

* Add entryPoint to action-hosting-deploy step

* Use separate backend urls for previews and prod

* Fix several minor issues (#63)

* Set extended option in express.urlencoded in server.ts

* Fix user_id casing in Python openapi.json

* Simplify Python DTO validators

* Add newline in Logout.tsx

* Rename TypeScript storageService to fileStorageService

* Integrate TS FileStorageService into EntityService (#88)

* temp changes

* add initial changes to EntityServiceMg

* Fix update function in entityservice

* Add file crud methods to postgres entity service

* Add file content type validation

* Fix create endpoints

* Add local file storing to graphql resolvers

* Add endpoint for getting file based on fileUUID

* Change storage service to store bucketName instead of the bucket

* Minor fixes

* Fix update functions in entity service

* Minor fixes

* Add content type to entity request DTO and filestorageservice calls

* Fix graphql

* Fix imports

* Refactor create/update to prevent dangling file references

* Address comments

* Wait for file to finish writing before continuing

* Delete file after uploading

* Add awaits to filestorageservice calls

Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Emily Louie <[email protected]>

* Add frontend csv utility (#90)

* Integrate Python FileStorageService into EntityService (#86)

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Update EntityService Mongo

* Update Python Entity models for file storage.

* Add file get request to routes, work on entity services

* Add entity request dto for python

* Add file support in entity routes

* Add file to update route

* Update validator and DTO

* Add content type check to python entity dto validator

* Add file storage support to Python Postgres Entity service

* Add PUT logic to Python Postgres entity service update function

* Change update logic for mongo

* lint

* Fix python file get endpoint file storage service call

* Remove EntityDTO.file_name from Mongo Impl

* Update validator to check for missing body

* fix

* Fix file get endpoint auth, rename entity DTO variable

* Remove EntityDTO.file_name from Postgres Impl

* Update get_file to return object

* Fix bug in mongo service update logic

* Fix Postgres update route and logic

* Fix python postgres pop file and lint code.

* Postgres migration to add entity file name

Co-authored-by: Bruce He <[email protected]>

* Add backend TS csv generation utility (#91)

* initial files

* add a responseutil

* update rest api

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

Co-authored-by: Alex Guo <[email protected]>

* Add download csv functionality from frontend utility (#95)

* initial files

* add a responseutil

* update rest api

* Add download csv functionality from frontend utility

* Add new Graphql querires

* Address PR comments and remove CSV option for requests that return single items

* Change generateCSV function to match frontends

* update yarn.lock

* Fix yarn.lock

* Add backend API integration

Co-authored-by: Emily Louie <[email protected]>

* Refactor route strings into constants (#111)

* Backend CSV generation Python (#108)

* Initial change

Linter and tests

Update default options

csv default settings

Examples and minor format changes

Update docker-compose.yml

Moved tests to unit

* Add minor fixes

Co-authored-by: Sherry Li <[email protected]>

* Create Typescript registration flow with email verification (#104)

* Add endpoints for register user with email verification

* Check email verified on the firebase user instead of the token

* Create Python registration flow with email verification (#105)

* Add endpoints to register user using email verification

* fix import and add validator

* Add validation for RegisterUserDTO

* Fix accessing the email verification from token

* Change the verification email title

* check email verified in firebase user rather than token

* Frontend User Sign-Up (#115)

* Add sign-up page & auth client register functions

* Rebase on main and make minor routing changes

Co-authored-by: Sherry Li <[email protected]>

* Integrate Google OAuth into Python backend (#112)

* Add google oauth signin to firebase rest client

* Add google oauth login and signup functionality

* Add frontend for google oauth signin

* Fix backend

* Add comment for google user id token

* Integrate Google OAuth into TS (#114)

* Add REST Impl

* Fix try catch

Co-authored-by: Alex Guo <[email protected]>

* Fix email_verified syntax in Python auth_service (#123)

* Add TS GraphQL support for Google OAuth (#122)

* GraphQL OAuth

* rename id_token

* Validators

* Update authValidators.ts

* Fix generate_csv_from_list call in entity and user routes (#119)

* Integrate file uploads and downloads into frontend  (#116)

* add initial upload button and onChange function

* Add field to display table

* Fix mutation and add console.logs to debug

* Update graphql queries in create and update

* Add call in EntityAPIClient, graphql in DisplayTableContainer, and setup FileUtil

* Fix display of buttons to only be shown if the fileName is not null

* Add suggested changes to remove circular JSON errors

* Uncomment python part in docker-compose.yml

* Address PR comments and fix Graphql get in DisplayTableContainer

* Fix REST file upload

* Add REST file update to frontend

* Decamelize formData when using Python backend

* Fix fileUrl access in EntityAPIClient.getFile for Python backend

Co-authored-by: Alex Guo <[email protected]>
Co-authored-by: Sherry Li <[email protected]>

* Create HooksDemo page (#125)

* Update README.md (#128)

* Fix various bugs (#127)

* Add type check on self.enum_field before calling .upper() in validator

* Set erase_db_and_sync in Python backend based on TESTING config value

* Change DB dialect name from postgres to postgresql in Python connection string

* Update testDb connect method for compatibility with mongo-memory-server's updated API

* Change setData to setEntities in DisplayTableContainer.tsx

* Add comments to AuthService's generateTokenOAuth method

* Separate SignInResponse types for password and OAuth sign ins

* Fix Python csv_utils to account for optional fields

* Add *.egg-info to .gitignore

* Remove commented out code in backend/typescript/utilities/CSVUtils.ts

* Lint and reformat

* Fix form reset issue after setting file field in CreateForm and UpdateForm

* Fix casing in CSVUtils import path

* Update Swagger docs with new endpoints and request body types (#131)

* Fix error when deleting an entity with no file in Python (#133)

* Fix error when deleting an entity with no file

* Add id return for delete entity endpoint in TypeScript

* Address comment

* Modify and clean up infra setup (#134)

* Add db health check, db init script, and container names

* Make scripts executable

* Fix formatting in backend/python/app/__init__.py

* Return string id from TypeScript PostgreSQL user and entity services (#136)

* Add end-to-end tests for the backend (#137)

* Add end-to-end tests for the backend

* Rename folder

* Add files and modifications for backend deployment to Heroku (#138)

* Add files and modifications for backend deployment to Heroku

* Require migrations in TypeScript backend

* Stringify Google login error object

* Fix formatting in frontend

* Remove nodemailer config path from secret.config

* Fix typo in DATABASE_URL

* Check if MONGODB_URL is present before reading from app.config

* Create GitHub Actions linting workflow and fix lint errors (#149)

* Create GitHub Actions file for running linters

* Fix lint and formatting errors in backend/typescript

* Fix lint and formatting errors in frontend

* Fix quotes in .github/workflows/lint.yml

* Fix error message typing in backend/typescript (#152)

* Fix error message typing in backend/typescript

* Add eslint-disable comments

* Fix content_type check in Python validate middleware (#153)

* Ignore tests under build folder in backend/typescript (#157)

Co-authored-by: Xin Hao Zhang <[email protected]>
Co-authored-by: alexguo8 <[email protected]>
Co-authored-by: Emily Louie <[email protected]>
Co-authored-by: Tamim Khan <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Bruce He <[email protected]>
Co-authored-by: Richard Chen <[email protected]>
Co-authored-by: Dinu Wijetunga <[email protected]>
Co-authored-by: Alex Guo <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

TS backend and frontend: integrate Google OAuth sign-in
3 participants