update readme add git scripts

This commit is contained in:
Joseph Ditton 2021-12-03 18:31:24 -07:00
parent edbbed2050
commit 5446509b96
9 changed files with 95 additions and 16 deletions

View File

@ -1,8 +1,26 @@
# Nest Starter App
# USU CS4610 Nest Starter App
## Description
A starter app with Postgres, NestJS, and React
## 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
$ git clone git@github.com:dittonjs/OnTheSpot.git <YourAppName>
```
Replace your app name with the name of your app, for example
```bash
$ git clone git@github.com:dittonjs/OnTheSpot.git SpyChat
```
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
```
and follow the prompts. This script will link the repo to your new repo while maintaining a reference to the starter app. This way, if we make changes to the starter app, you can still get those changes.
## Prerequisites
### asdf-vm
Tool versions are managed using `asdf-vm`. You will need to have `asdf-vm` installed first.
@ -15,13 +33,15 @@ $ asdf install
```
### Install yarn
We will use `yarn` instead of `npm` for package managment
We will use `yarn` instead of `npm` for package managment. To install yarn run
```bash
$ npm install -g yarn
```
### .env
Create a file in the root called `.env` and copy the contents of `.env.example`
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.
In your new `.env` file update the values for each key as you would like
@ -37,27 +57,43 @@ $ cd client && yarn && cd ..
```
### Database
Create the database
To setup the database run
```bash
$ pg_ctl start # starts postgres
$ createdb neststarterappdevelopment # creates a postgres database
$ yarn db:setup
```
This will create the database, run the migrations, and run the seed for you.
Run the migrations
### 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
```bash
$ yarn db:migrate
```
will run any pending migrations.
Migrations need to be run again everytime a new migration is created
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.
Run the seeds
### Seeds
Seeds allow you prepopulate your database with data. By default this application prepopulates the `Roles` and the Admin `User` into your database.
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
```bash
$ yarn db:seed
```
This should create roles and your admin level user in your database.
### SSL
**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
```
Create a ssl key and certificate and place them in the root directory
```bash

12
bin/create_db.sh Normal file
View File

@ -0,0 +1,12 @@
#!/bin/bash
source .env
echo "Creating db '$DATABASE_URL'"
pg_ctl status || pg_ctl start
{
createdb $DATABASE_URL && echo "Database '$DATABASE_URL' created successfully"
} || {
echo "Database '$DATABASE_URL' already exists, skipping creation."
}

18
bin/setup_new_project.sh Normal file
View File

@ -0,0 +1,18 @@
#!/bin/bash
source .env
echo "What is the name of your application?"
read appname
echo "Where is your git repo? (eg git@github.com:dittonjs/NestStarterApp.git)"
read reponame
sed -i "s/USU CS4610 Nest Starter App/$appname/" README.md
git remote rename origin upstream
git remote add origin $reponame
git branch -M main
git push -u origin main

View File

@ -13,6 +13,8 @@
"db:migrate": "yarn db:start && yarn typeorm migration:run",
"db:migrate:undo": "yarn db:start && yarn typeorm migration:revert",
"db:seed": "yarn db:start && ts-node ./node_modules/typeorm-seeding/dist/cli.js seed -n cli_config.ts -r $(pwd)/server/database",
"db:reset": "yarn db:start && yarn typeorm schema:drop && yarn db:migrate && yarn db:seed",
"db:setup": "bash bin/create_db.sh && yarn db:migrate && yarn db:seed",
"prebuild": "rimraf dist",
"build": "nest build && yarn client:build",
"format": "prettier --write \"server/**/*.ts\" \"test/**/*.ts\"",

View File

@ -43,7 +43,8 @@ export class UsersController {
async create(@Body() userPayload: CreateUserDto, @Res({ passthrough: true }) res: Response) {
const newUser = new User();
newUser.email = userPayload.email;
newUser.name = userPayload.name;
newUser.firstName = userPayload.firstName;
newUser.lastName = userPayload.lastName;
newUser.passwordHash = await bcrypt.hash(userPayload.password, 10);
const [role] = await this.rolesService.findByKey(RoleKey.USER);
const userRole = new UserRole();

View File

@ -13,7 +13,12 @@ export class AddUser1637028716848 implements MigrationInterface {
isGenerated: true,
},
{
name: 'name',
name: 'firstName',
type: 'text',
isNullable: false,
},
{
name: 'lastName',
type: 'text',
isNullable: false,
},

View File

@ -36,7 +36,8 @@ export default class Seeds implements Seeder {
adminUser = new User();
adminUser.email = process.env.ADMIN_EMAIL;
adminUser.passwordHash = passwordHash;
adminUser.name = 'Site Admin';
adminUser.firstName = 'Admin';
adminUser.lastName = 'Site';
const adminUserRole = new UserRole();
adminUserRole.role = adminRole;
adminUser.userRoles = [adminUserRole];

View File

@ -1,5 +1,6 @@
export class CreateUserDto {
name: string;
firstName: string;
lastName: string;
email: string;
password: string;
}

View File

@ -11,7 +11,10 @@ export class User {
email: string;
@Column({ nullable: false })
name: string;
firstName: string;
@Column({ nullable: false })
lastName: string;
@Column({ nullable: false })
passwordHash: string;