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 ## Description
A starter app with Postgres, NestJS, and React 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 ## Prerequisites
### asdf-vm ### asdf-vm
Tool versions are managed using `asdf-vm`. You will need to have `asdf-vm` installed first. Tool versions are managed using `asdf-vm`. You will need to have `asdf-vm` installed first.
@ -15,13 +33,15 @@ $ asdf install
``` ```
### Install yarn ### 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 ```bash
$ npm install -g yarn $ npm install -g yarn
``` ```
### .env ### .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 In your new `.env` file update the values for each key as you would like
@ -37,27 +57,43 @@ $ cd client && yarn && cd ..
``` ```
### Database ### Database
Create the database To setup the database run
```bash ```bash
$ pg_ctl start # starts postgres $ yarn db:setup
$ createdb neststarterappdevelopment # creates a postgres database
``` ```
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 ```bash
$ yarn db:migrate $ 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 ```bash
$ yarn db:seed $ yarn db:seed
``` ```
This should create roles and your admin level user in your database.
### SSL ### 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 Create a ssl key and certificate and place them in the root directory
```bash ```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": "yarn db:start && yarn typeorm migration:run",
"db:migrate:undo": "yarn db:start && yarn typeorm migration:revert", "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: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", "prebuild": "rimraf dist",
"build": "nest build && yarn client:build", "build": "nest build && yarn client:build",
"format": "prettier --write \"server/**/*.ts\" \"test/**/*.ts\"", "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) { async create(@Body() userPayload: CreateUserDto, @Res({ passthrough: true }) res: Response) {
const newUser = new User(); const newUser = new User();
newUser.email = userPayload.email; newUser.email = userPayload.email;
newUser.name = userPayload.name; newUser.firstName = userPayload.firstName;
newUser.lastName = userPayload.lastName;
newUser.passwordHash = await bcrypt.hash(userPayload.password, 10); newUser.passwordHash = await bcrypt.hash(userPayload.password, 10);
const [role] = await this.rolesService.findByKey(RoleKey.USER); const [role] = await this.rolesService.findByKey(RoleKey.USER);
const userRole = new UserRole(); const userRole = new UserRole();

View File

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

View File

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

View File

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

View File

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