Skip to content

Commit f487c2a

Browse files
Database connection+Create+Read
1 parent fc2aa8a commit f487c2a

File tree

9 files changed

+527
-44
lines changed

9 files changed

+527
-44
lines changed

package-lock.json

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

package.json

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,16 @@
2222
},
2323
"dependencies": {
2424
"@nestjs/common": "^7.6.15",
25+
"@nestjs/config": "^0.6.3",
2526
"@nestjs/core": "^7.6.15",
2627
"@nestjs/platform-express": "^7.6.15",
28+
"@nestjs/typeorm": "^7.1.5",
2729
"dotenv": "^10.0.0",
2830
"pg": "^8.6.0",
2931
"reflect-metadata": "^0.1.13",
3032
"rimraf": "^3.0.2",
31-
"rxjs": "^6.6.6"
33+
"rxjs": "^6.6.6",
34+
"typeorm": "^0.2.34"
3235
},
3336
"devDependencies": {
3437
"@nestjs/cli": "^7.6.0",

src/app.module.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,19 @@ import { AppService } from './app.service';
44
import { ProjectsController } from './controllers/projects/projects.controller';
55
import { LanguagesController } from './controllers/languages/languages.controller';
66
import { DatabaseService } from './services/database/database.service';
7-
7+
import { DatabaseModule } from './modules/database/database.module';
8+
import { ConfigModule } from '@nestjs/config';
9+
import config from './config';
810
@Module({
9-
imports: [],
11+
imports: [
12+
ConfigModule.forRoot({
13+
envFilePath: '.stage.env',
14+
load: [config],
15+
isGlobal: true,
16+
17+
}),
18+
DatabaseModule,
19+
],
1020
controllers: [AppController, ProjectsController, LanguagesController],
1121
providers: [AppService, DatabaseService],
1222
})

src/config.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { registerAs } from '@nestjs/config';
2+
3+
export default registerAs('config', () => {
4+
return {
5+
postgres: {
6+
database: process.env.DB_NAME,
7+
port: parseInt(process.env.DB_PORT, 10),
8+
password: process.env.DB_PASS,
9+
username: process.env.DB_USER,
10+
host: process.env.DB_HOST,
11+
}
12+
};
13+
});

src/controllers/projects/projects.controller.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,11 @@ export class ProjectsController {
1616
}
1717
@Post()
1818
@HttpCode(HttpStatus.CREATED)
19-
create(@Body() payload: any): object {
20-
return this.databaseService.createProject(payload);
19+
async create(@Body() payload: any) {
20+
const { name, description, location } = payload
21+
let newProduct = await this.databaseService.createProject(name, description, location)
22+
23+
return { msg: "created", data: newProduct };
2124
}
2225
@Put(":projectID")
2326
@HttpCode(HttpStatus.ACCEPTED)

src/entities/project.entity.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { PrimaryGeneratedColumn, Column, Entity } from 'typeorm';
2+
3+
@Entity()
4+
export class Project {
5+
@PrimaryGeneratedColumn()
6+
id: number;
7+
8+
@Column({ type: 'varchar', length: 255, unique: true })
9+
name: string;
10+
11+
@Column({ type: 'text' })
12+
description: string;
13+
14+
@Column({ type: 'varchar' })
15+
location: string;
16+
}

src/main.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
import { NestFactory } from '@nestjs/core';
22
import { AppModule } from './app.module';
33

4-
require('dotenv').config({ path: '.stage.env' })
5-
64
async function bootstrap() {
75
const app = await NestFactory.create(AppModule);
86
await app.listen(3000);
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { Module } from '@nestjs/common';
2+
import { Client } from "pg";
3+
import { TypeOrmModule } from '@nestjs/typeorm';
4+
import { Project } from './../../entities/project.entity';
5+
import { ConfigType } from '@nestjs/config';
6+
import config from '../../config';
7+
/*const client = new Client(dbConfig);
8+
9+
client.connect();*/
10+
@Module({
11+
imports: [
12+
TypeOrmModule.forRootAsync({
13+
inject: [config.KEY],
14+
useFactory: (configService: ConfigType<typeof config>) => {
15+
const { username, host, database, password, port } = configService.postgres;
16+
return {
17+
type: 'postgres',
18+
host,
19+
port,
20+
username,
21+
password,
22+
database,
23+
synchronize: true,
24+
autoLoadEntities: true,
25+
}
26+
}
27+
}),
28+
TypeOrmModule.forFeature([Project])
29+
],
30+
providers: [
31+
/*{
32+
provide: 'PG',
33+
useValue: client,
34+
},*/
35+
],
36+
exports: [/*'PG',*/ 'TypeOrmModule'],
37+
})
38+
export class DatabaseModule { }

src/services/database/database.service.ts

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
1-
import { Injectable } from '@nestjs/common';
2-
import { Client } from "pg";
3-
4-
5-
const client = new Client({
6-
user: 'root',
7-
host: process.env.DB_HOST,
8-
database: process.env.DB_NAME,
9-
password: process.env.DB_PASS,
10-
port: parseInt(process.env.DB_PORT),
11-
});
1+
import { Injectable, Inject } from '@nestjs/common';
2+
import { Client } from 'pg';
3+
import { InjectRepository } from '@nestjs/typeorm';
4+
import { Repository } from 'typeorm'; // 👈 import
125

6+
import { Project } from './../../entities/project.entity';
137
@Injectable()
148
export class DatabaseService {
9+
constructor(
10+
//@Inject('PG') private clientPg: Client,
11+
@InjectRepository(Project) private projectRepo: Repository<Project>,
12+
) {
13+
//this.clientPg.query("SELECT * FROM projects")
14+
}
1515
db = {
1616
projects: {
1717
"0": {
@@ -33,14 +33,21 @@ export class DatabaseService {
3333
"2": "rust"
3434
}
3535
}
36-
createProject(params): object {
37-
return { data: params };
36+
async createProject(name: string, description: string, location: string) {
37+
let poject = this.projectRepo.create({ name, description, location })
38+
await this.projectRepo.save(poject)
39+
return { id: poject.id };
3840
}
3941
getProject(id): object {
40-
return { data: this.db.projects[id] };
42+
return {
43+
data: this.projectRepo.findOne(id)
44+
};
4145
}
4246
getProjects(params): object {
43-
return { data: params };
47+
//this.clientPg.query("SELECT * FROM projects")
48+
return {
49+
data: this.projectRepo.find()
50+
};
4451
}
4552
updateProject(id, payload): object {
4653
return { data: this.db.projects[id] };

0 commit comments

Comments
 (0)