Skip to content

Commit 80455d4

Browse files
committed
initial version
1 parent 5f253ed commit 80455d4

13 files changed

Lines changed: 5148 additions & 0 deletions

.gitignore

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.idea/
2+
.vscode/
3+
node_modules/
4+
build/
5+
tmp/
6+
temp/

database.sqlite

20 KB
Binary file not shown.

package-lock.json

Lines changed: 3057 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"name": "typeorm_express",
3+
"version": "0.0.1",
4+
"description": "Awesome project developed with TypeORM.",
5+
"type": "commonjs",
6+
"devDependencies": {
7+
"ts-node": "10.9.1",
8+
"@types/node": "^16.11.10",
9+
"typescript": "4.5.2"
10+
},
11+
"dependencies": {
12+
"typeorm": "0.3.20",
13+
"reflect-metadata": "^0.1.13",
14+
"sqlite3": "^5.0.2",
15+
"express": "^4.17.2",
16+
"body-parser": "^1.19.1"
17+
},
18+
"scripts": {
19+
"start": "ts-node src/index.ts",
20+
"typeorm": "typeorm-ts-node-commonjs",
21+
"migration:run": "typeorm-ts-node-commonjs migration:run -d ./src/data-source.ts",
22+
"migration:revert": "typeorm-ts-node-commonjs migration:revert -d ./src/data-source.ts",
23+
"migration:show": "typeorm-ts-node-commonjs migration:show -d ./src/data-source.ts"
24+
}
25+
}

src/controller/UserController.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import { AppDataSource } from "../data-source"
2+
import { NextFunction, Request, Response } from "express"
3+
import { User } from "../entity/User"
4+
5+
export class UserController {
6+
7+
private userRepository = AppDataSource.getRepository(User)
8+
9+
async all(request: Request, response: Response, next: NextFunction) {
10+
return this.userRepository.find()
11+
}
12+
13+
async one(request: Request, response: Response, next: NextFunction) {
14+
const id = parseInt(request.params.id)
15+
16+
17+
const user = await this.userRepository.findOne({
18+
where: { id }
19+
})
20+
21+
if (!user) {
22+
return "unregistered user"
23+
}
24+
return user
25+
}
26+
27+
async save(request: Request, response: Response, next: NextFunction) {
28+
const { firstName, lastName, age } = request.body;
29+
30+
const user = Object.assign(new User(), {
31+
firstName,
32+
lastName,
33+
age
34+
})
35+
36+
return this.userRepository.save(user)
37+
}
38+
39+
async remove(request: Request, response: Response, next: NextFunction) {
40+
const id = parseInt(request.params.id)
41+
42+
let userToRemove = await this.userRepository.findOneBy({ id })
43+
44+
if (!userToRemove) {
45+
return "this user not exist"
46+
}
47+
48+
await this.userRepository.remove(userToRemove)
49+
50+
return "user has been removed"
51+
}
52+
53+
}

src/data-source.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import "reflect-metadata"
2+
import { DataSource } from "typeorm"
3+
// import { User } from "./entity/User"
4+
5+
export const AppDataSource = new DataSource({
6+
type: "sqlite",
7+
database: "database.sqlite",
8+
synchronize: false,
9+
migrationsRun: true,
10+
logging: false,
11+
// entities: [User],
12+
entities: ["src/entity/*.ts"],
13+
migrations: ["src/migration/*.ts"],
14+
subscribers: [],
15+
})

src/entity/User.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm"
2+
3+
@Entity()
4+
export class User {
5+
6+
@PrimaryGeneratedColumn()
7+
id: number
8+
9+
@Column()
10+
firstName: string
11+
12+
@Column()
13+
lastName: string
14+
15+
@Column()
16+
age: number
17+
18+
@Column()
19+
email: string
20+
}

src/index.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import * as express from "express"
2+
import * as bodyParser from "body-parser"
3+
import { Request, Response } from "express"
4+
import { AppDataSource } from "./data-source"
5+
import { Routes } from "./routes"
6+
import { User } from "./entity/User"
7+
8+
AppDataSource.initialize().then(async () => {
9+
10+
// create express app
11+
const app = express()
12+
app.use(bodyParser.json())
13+
14+
// register express routes from defined application routes
15+
Routes.forEach(route => {
16+
(app as any)[route.method](route.route, (req: Request, res: Response, next: Function) => {
17+
const result = (new (route.controller as any))[route.action](req, res, next)
18+
if (result instanceof Promise) {
19+
result.then(result => result !== null && result !== undefined ? res.send(result) : undefined)
20+
21+
} else if (result !== null && result !== undefined) {
22+
res.json(result)
23+
}
24+
})
25+
})
26+
27+
// setup express app here
28+
// ...
29+
30+
// start express server
31+
app.listen(3000)
32+
33+
// insert new users for test
34+
// await AppDataSource.manager.save(
35+
// AppDataSource.manager.create(User, {
36+
// firstName: "Timber",
37+
// lastName: "Saw",
38+
// age: 27
39+
// })
40+
// )
41+
42+
// await AppDataSource.manager.save(
43+
// AppDataSource.manager.create(User, {
44+
// firstName: "Phantom",
45+
// lastName: "Assassin",
46+
// age: 24
47+
// })
48+
// )
49+
50+
console.log("Express server has started on port 3000. Open http://localhost:3000/users to see results")
51+
52+
}).catch(error => console.log(error))
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { MigrationInterface, QueryRunner } from "typeorm";
2+
3+
export class User1709803221770 implements MigrationInterface {
4+
name = 'User1709803221770'
5+
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
await queryRunner.query(`CREATE TABLE "user" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "firstName" varchar NOT NULL, "lastName" varchar NOT NULL, "age" integer NOT NULL)`);
8+
}
9+
10+
public async down(queryRunner: QueryRunner): Promise<void> {
11+
await queryRunner.query(`DROP TABLE "user"`);
12+
}
13+
14+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { MigrationInterface, QueryRunner, TableColumn } from "typeorm";
2+
3+
export class User1709864174745 implements MigrationInterface {
4+
name = 'User1709864174745'
5+
6+
public async up(queryRunner: QueryRunner): Promise<void> {
7+
// await queryRunner.query(`ALTER TABLE "user" ADD COLUMN "email" varchar varchar`);
8+
await queryRunner.addColumn('user', {
9+
name: 'email',
10+
type: 'varchar',
11+
isNullable: true,
12+
'@instanceof': undefined,
13+
isGenerated: false,
14+
isPrimary: false,
15+
isUnique: false,
16+
isArray: false,
17+
length: '',
18+
zerofill: false,
19+
unsigned: false,
20+
clone: function (): TableColumn {
21+
throw new Error('Function not implemented.')
22+
}
23+
})
24+
}
25+
26+
public async down(queryRunner: QueryRunner): Promise<void> {
27+
// await queryRunner.query(`ALTER TABLE "user" DROP COLUMN "email"`);
28+
await queryRunner.dropColumn('user', 'email')
29+
}
30+
}

0 commit comments

Comments
 (0)