2.11.0 • Published 1 year ago

@acmucsd/membership-portal v2.11.0

Weekly downloads
1
License
MPL-2.0
Repository
github
Last release
1 year ago

membership-portal-api   CircleCI

REST API for the UC San Diego ACM chapter's membership portal.

Build Instructions

Feel free to use yarn ... instead of npm run ..., but make sure not to commit the yarn.lock.

  1. Clone the repository: git clone https://github.com/acmucsd/membership-portal.
  2. Navigate to the directory: cd membership-portal.
  3. Install PostgreSQL. See installation instructions below.
  4. Install the necessary dependencies: npm install. For Windows users, see specific build instructions below.
  5. Create a new .env file using .env.example as a template: cp .env.example .env.
  6. Fill out the .env. See the example file below.
  7. Run the containerized service(s) (e.g. Postgres): docker-compose up -d.
  8. Initialize the database: npm run db:migrate.
  9. Populate the database: npm run db:seed.
  10. Start the Node app: npm run dev.

Installing Postgres

MacOS and Linux users can install Postgres via Homebrew, and Linux users can use apt. Windows users will need to download the Postgres 11.5 installer from here, run the installer, and add the Postgres bin to the PATH environment variable.

Windows Build Instructions

  1. Run the Windows Powershell as administrator.
  2. Install build tools to compile native Node modules: npm install -g windows-build-tools.
  3. Rerun npm install in a separate command prompt window.

Sample .env

RDS_HOST=localhost
RDS_PORT=5432
RDS_DATABASE=membership_portal
RDS_USER=acmucsd_dev
RDS_PASSWORD=password

AUTH_SECRET=secret

CLIENT=localhost:8000

Note: For Windows users, localhost won't workyou'll need to set RDS_HOST to the Docker Machine's IP address.

Useful Commands

  • docker-compose up -d to configure and run any required services
  • npm install to install the necessary dependencies
  • npm run dev to run the Node app with Nodemon and ts-node
  • npm run lint to lint the Node app with ESLint (without --fix)
  • npm run lint:fix to fix the simple linter issues automatically
  • npm run test to run the test suite with Jest
  • npm run db:migrate to run any new database migrations
  • npm run db:rollback to roll back the last database migration
  • npm run db:seed to populate the database with seeds
  • npm run db:unseed to completely clear the database
  • docker exec -it rds.acmucsd.local psql -U [RDS_USER] -d [RDS_DATABASE] to access Postgres (RDS_XYZ from .env).

Take a look at package.json for the actual commands.

Database Migrations

To write database migrations, take a look at the TypeORM documentation and previous migrations. Everything's already configured via ormconfig.ts so executing npm run db:migrate should work. Migrations on the production database automatically run upon deployment using Heroku's release phase (configured in the Procfile).

Upgrading to Latest Version

The first iteration of the membership portal is a JavaScript app written in 2019. The second and latest iteration, written 2020, is a TypeScript app built with better reliability and error handling, stronger concurrency guarantees, and a smoother development experience in mind, and includes a number of breaking changes at the API and database levels. For a more concrete list of improvements, see acmucsd/membership-portal#115.

API Breaks and Changes

  • GET /auth/resetPassword: renamed to /auth/passwordReset
  • POST /auth/resetPassword: renamed to /auth/passwordReset
  • some routes (e.g. events search) accept optional auth tokens for more detailed responses
  • POST /user/bonus: renamed to /admin/bonus
  • POST /user/milestone: renamed to /admin/milestone; resetPoints?: boolean has been replaced in the request body by points?: number
  • GET /store/collection/:uuid: merchandise has been renamed in the response body to items
  • GET /store/merchandise: deleted
  • passwordChange field is breaking change (see Auth/UserControllerRequests)
  • POST /user/picture/:uuid: the UUID parameter is optional
  • GET /attendance/:uuid?: the attendance field in the response body has been renamed attendances
  • POST /attendance/attend: no longer reachable, requests should be made to /attendance

To Upgrade

  1. Update the app to the latest release of the first iteration (0.14.2).
  2. Manually run this SQL script (0000-sequelize-to-typeorm.sql).
  3. Update the app to the latest release (latest).