update readme add git scripts
This commit is contained in:
parent
edbbed2050
commit
5446509b96
58
README.md
58
README.md
@ -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
12
bin/create_db.sh
Normal 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
18
bin/setup_new_project.sh
Normal 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
|
||||||
|
|
||||||
|
|
@ -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\"",
|
||||||
|
@ -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();
|
||||||
|
@ -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,
|
||||||
},
|
},
|
||||||
|
@ -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];
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
export class CreateUserDto {
|
export class CreateUserDto {
|
||||||
name: string;
|
firstName: string;
|
||||||
|
lastName: string;
|
||||||
email: string;
|
email: string;
|
||||||
password: string;
|
password: string;
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user