2021-12-03 20:31:24 -05:00
# USU CS4610 Nest Starter App
2021-10-29 20:57:24 -04:00
2021-12-04 19:04:11 -05:00
<!-- BEGIN REMOVABLE -->
2021-10-29 20:57:24 -04:00
## Description
2021-11-16 21:14:46 -05:00
A starter app with Postgres, NestJS, and React
2021-12-03 20:31:24 -05:00
## Cloning the project
This app is designed to used as a starting point for another application so you will want to clone the project into a folder that matches your app. Run
```bash
2021-12-04 13:33:33 -05:00
$ git clone git@github.com:dittonjs/NestStarterApp.git < YourAppName >
2021-12-03 20:31:24 -05:00
```
Replace your app name with the name of your app, for example
```bash
2021-12-04 13:33:33 -05:00
$ git clone git@github.com:dittonjs/NestStarterApp.git SpyChat
2021-12-03 20:31:24 -05:00
```
Next, go create a remote repository in github (or gitlab, or bitbucket, it doesn't matter) for your new application.
Finally, run
```bash
$ bash ./bin/setup_new_project.sh
```
2021-12-03 20:48:52 -05:00
and follow the prompts. This script will link the repo to your new repo while maintaining a reference to the starter app repo. This way, if we make changes to the starter app repo, you can still get those changes.
2021-12-04 19:04:11 -05:00
<!-- END REMOVABLE -->
## Pulling Updates from Starter App
2021-12-03 20:48:52 -05:00
To retrieve changes from the starter app run
```bash
$ git pull upstream main
```
2021-11-16 21:14:46 -05:00
## Prerequisites
### asdf-vm
Tool versions are managed using `asdf-vm` . You will need to have `asdf-vm` installed first.
2021-10-29 20:57:24 -04:00
2021-11-03 21:25:40 -04:00
## Setup
2021-11-16 21:14:46 -05:00
### Tool versions
Install the tool versions by running
```bash
$ asdf install
```
### Install yarn
2021-12-03 20:31:24 -05:00
We will use `yarn` instead of `npm` for package managment. To install yarn run
2021-11-16 21:14:46 -05:00
```bash
$ npm install -g yarn
```
### .env
2021-12-03 20:31:24 -05:00
Create a file in the root called `.env` and copy the contents of `.env.example` .
Make sure you create a new file instead of renaming the `.env.example` file.
2021-11-03 21:25:40 -04:00
2021-12-03 19:00:23 -05:00
In your new `.env` file update the values for each key as you would like
2021-11-16 21:14:46 -05:00
### Dependencies
2021-11-30 17:40:07 -05:00
To install the server dependencies run
2021-11-16 21:14:46 -05:00
```bash
$ yarn # this is same thing as `yarn install`
```
2021-11-03 21:25:40 -04:00
2021-11-30 17:40:07 -05:00
To install the client dependencies run
```bash
$ cd client & & yarn & & cd ..
```
2021-11-16 21:14:46 -05:00
### Database
2021-12-03 20:48:52 -05:00
This application uses Postgres. To setup the database run
2021-11-03 21:25:40 -04:00
```bash
2021-12-03 20:31:24 -05:00
$ yarn db:setup
2021-11-03 21:25:40 -04:00
```
2021-12-03 20:48:52 -05:00
This will create the database, run the migrations, and run the seeds for you.
2021-10-29 20:57:24 -04:00
2021-12-03 20:31:24 -05:00
### Migrations
Any time you want make changes to your database schema you will need to generate a migration file
```bash
yarn db:migration:generate AddContextToRoles # replace this name with a name that describes your migration
```
Open that migration file and make the changes. Then, when you are ready
2021-11-16 21:14:46 -05:00
```bash
2021-12-03 19:00:23 -05:00
$ yarn db:migrate
2021-11-16 21:14:46 -05:00
```
2021-12-03 20:31:24 -05:00
will run any pending migrations.
If a team member adds a migrations you will need to run the migrate command to make the changes to your local database as well.
2021-11-16 21:14:46 -05:00
2021-12-03 20:31:24 -05:00
### Seeds
2021-12-03 20:48:52 -05:00
Seeds allow you to pre-populate your database with data. By default this application prepopulates the `Roles` and the Admin `User` into your database.
2021-11-16 21:14:46 -05:00
2021-12-03 20:31:24 -05:00
If you make changes to the seeds file at `server/database/seeds.ts` the make sure that, in the event seeds are run multiple times, you don't end up with duplicate data.
To run the seeds
2021-12-03 19:00:23 -05:00
```bash
$ yarn db:seed
```
2021-11-16 21:14:46 -05:00
### SSL
2021-12-03 20:31:24 -05:00
**Only do this step if you intend on developing your app in an environment where you need SSL (like canvas or other embedded platforms).**
In your `.env` set
```
USE_SSL=true
```
2021-11-30 17:40:07 -05:00
Create a ssl key and certificate and place them in the root directory
2021-10-29 20:57:24 -04:00
```bash
2021-11-16 21:14:46 -05:00
$ openssl req -x509 -newkey rsa:4096 -keyout private-key.pem -out public-cert.pem -sha256 -nodes
2021-10-29 20:57:24 -04:00
```
2021-11-30 17:40:07 -05:00
Enter `US` for the country code. Where this key will only be used for development you can leave all of the rest of information blank.
2021-10-29 20:57:24 -04:00
## Running the app
2021-11-30 17:40:07 -05:00
To start the server run
2021-10-29 20:57:24 -04:00
```bash
# watch mode
2021-11-16 21:14:46 -05:00
$ yarn start:dev
2021-11-30 17:40:07 -05:00
```
2021-10-29 20:57:24 -04:00
2021-11-30 17:40:07 -05:00
To start the client run
```bash
$ yarn client:watch
2021-10-29 20:57:24 -04:00
```
## Test
```bash
# unit tests
2021-11-16 21:14:46 -05:00
$ yarn test
2021-10-29 20:57:24 -04:00
# e2e tests
2021-11-16 21:14:46 -05:00
$ yarn test:e2e
2021-10-29 20:57:24 -04:00
# test coverage
2021-11-16 21:14:46 -05:00
$ yarn test:cov
2021-10-29 20:57:24 -04:00
```