Skip to content

Commit 6bfbb2a

Browse files
authored
Merge pull request #42 from boostcampwm-2024/dev-be
feat: 데이터베이스 및 엔티티 설정 완료
2 parents 437a658 + 3a00c3e commit 6bfbb2a

25 files changed

+1024
-14
lines changed

backend/.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
# env
2+
.env
3+
.env*
4+
15
# compiled output
26
/dist
37
/node_modules

backend/package.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,16 @@
2121
},
2222
"dependencies": {
2323
"@nestjs/common": "^10.0.0",
24+
"@nestjs/config": "^3.3.0",
2425
"@nestjs/core": "^10.0.0",
26+
"@nestjs/mapped-types": "*",
2527
"@nestjs/platform-express": "^10.0.0",
28+
"@nestjs/typeorm": "^10.0.2",
2629
"class-transformer": "^0.5.1",
2730
"class-validator": "^0.14.1",
2831
"reflect-metadata": "^0.1.13",
2932
"rxjs": "^7.8.1",
33+
"sqlite3": "^5.1.7",
3034
"typeorm": "^0.3.20"
3135
},
3236
"devDependencies": {

backend/src/app.module.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,36 @@
11
import { Module } from '@nestjs/common';
2+
import { ConfigModule, ConfigService } from '@nestjs/config';
23
import { AppController } from './app.controller';
34
import { AppService } from './app.service';
5+
import { NodeModule } from './node/node.module';
6+
import { PageModule } from './page/page.module';
7+
import { EdgeModule } from './edge/edge.module';
8+
import { TypeOrmModule } from '@nestjs/typeorm';
9+
import { Page } from './page/page.entity';
10+
import { Edge } from './edge/edge.entity';
11+
import { Node } from './node/node.entity';
412

513
@Module({
6-
imports: [],
14+
imports: [
15+
ConfigModule.forRoot({
16+
isGlobal: true,
17+
envFilePath: '../.env', // * nest 디렉터리 기준
18+
}),
19+
TypeOrmModule.forRootAsync({
20+
imports: [ConfigModule],
21+
useFactory: (configService: ConfigService) => ({
22+
type: 'sqlite',
23+
database: configService.get('DB_NAME'),
24+
entities: [Node, Page, Edge],
25+
logging: true,
26+
synchronize: true,
27+
}),
28+
inject: [ConfigService],
29+
}),
30+
NodeModule,
31+
PageModule,
32+
EdgeModule,
33+
],
734
controllers: [AppController],
835
providers: [AppService],
936
})
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { EdgeController } from './edge.controller';
3+
import { EdgeService } from './edge.service';
4+
5+
describe('EdgeController', () => {
6+
let controller: EdgeController;
7+
8+
beforeEach(async () => {
9+
const module: TestingModule = await Test.createTestingModule({
10+
controllers: [EdgeController],
11+
providers: [EdgeService],
12+
}).compile();
13+
14+
controller = module.get<EdgeController>(EdgeController);
15+
});
16+
17+
it('should be defined', () => {
18+
expect(controller).toBeDefined();
19+
});
20+
});
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Controller } from '@nestjs/common';
2+
import { EdgeService } from './edge.service';
3+
4+
@Controller('edge')
5+
export class EdgeController {
6+
constructor(private readonly edgeService: EdgeService) {}
7+
}

backend/src/edge/edge.entity.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// edge.entity.ts
2+
import {
3+
Entity,
4+
PrimaryGeneratedColumn,
5+
Column,
6+
ManyToOne,
7+
JoinColumn,
8+
} from 'typeorm';
9+
import { Node } from '../node/node.entity';
10+
11+
@Entity()
12+
export class Edge {
13+
@PrimaryGeneratedColumn('increment')
14+
id: number;
15+
16+
@ManyToOne(() => Node, (node) => node.outgoingEdges, { onDelete: 'CASCADE' })
17+
@JoinColumn({ name: 'from_node_id' })
18+
fromNode: Node;
19+
20+
@ManyToOne(() => Node, (node) => node.incomingEdges, { onDelete: 'CASCADE' })
21+
@JoinColumn({ name: 'to_node_id' })
22+
toNode: Node;
23+
24+
@Column()
25+
fromPoint: string;
26+
27+
@Column()
28+
toPoint: string;
29+
30+
@Column({ nullable: true })
31+
type: string;
32+
33+
@Column({ nullable: true })
34+
color: string;
35+
}

backend/src/edge/edge.module.ts

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { Module } from '@nestjs/common';
2+
import { EdgeService } from './edge.service';
3+
import { EdgeController } from './edge.controller';
4+
import { TypeOrmModule } from '@nestjs/typeorm';
5+
import { Edge } from './edge.entity';
6+
import { EdgeRepository } from './edge.repository';
7+
8+
@Module({
9+
imports: [TypeOrmModule.forFeature([Edge])],
10+
controllers: [EdgeController],
11+
providers: [EdgeService, EdgeRepository],
12+
})
13+
export class EdgeModule {}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
import { DataSource, Repository } from 'typeorm';
2+
import { Edge } from './edge.entity';
3+
import { Injectable } from '@nestjs/common';
4+
5+
@Injectable()
6+
export class EdgeRepository extends Repository<Edge> {
7+
constructor(private dataSource: DataSource) {
8+
super(Edge, dataSource.createEntityManager());
9+
}
10+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { EdgeService } from './edge.service';
3+
4+
describe('EdgeService', () => {
5+
let service: EdgeService;
6+
7+
beforeEach(async () => {
8+
const module: TestingModule = await Test.createTestingModule({
9+
providers: [EdgeService],
10+
}).compile();
11+
12+
service = module.get<EdgeService>(EdgeService);
13+
});
14+
15+
it('should be defined', () => {
16+
expect(service).toBeDefined();
17+
});
18+
});

backend/src/edge/edge.service.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { Injectable } from '@nestjs/common';
2+
import { EdgeRepository } from './edge.repository';
3+
4+
@Injectable()
5+
export class EdgeService {
6+
constructor(private edgeRepository: EdgeRepository) {}
7+
}

0 commit comments

Comments
 (0)