From 74ee20f7760e9cda3f11bac8dc9f680205f5b8ae Mon Sep 17 00:00:00 2001 From: Seonghyeon0409 Date: Mon, 18 Nov 2024 15:57:24 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20migration=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/server/data-source.ts | 17 ++ packages/server/package.json | 190 +++++++++--------- packages/server/src/account/account.entity.ts | 4 +- packages/server/src/asset/asset.entity.ts | 2 +- packages/server/src/auth/user.entity.ts | 2 +- packages/server/src/main.ts | 5 +- .../1731911925616-consent-record.ts | 11 + .../1731911957654-consent-record.ts | 11 + .../src/trade-history/trade-history.entity.ts | 2 +- packages/server/src/trade/trade.entity.ts | 2 +- packages/server/tsconfig.json | 3 + packages/server/tsconfig.typeorm.json | 13 ++ 12 files changed, 158 insertions(+), 104 deletions(-) create mode 100644 packages/server/data-source.ts create mode 100644 packages/server/src/migrations/1731911925616-consent-record.ts create mode 100644 packages/server/src/migrations/1731911957654-consent-record.ts create mode 100644 packages/server/tsconfig.typeorm.json diff --git a/packages/server/data-source.ts b/packages/server/data-source.ts new file mode 100644 index 00000000..b1ab2b2f --- /dev/null +++ b/packages/server/data-source.ts @@ -0,0 +1,17 @@ +import { DataSource } from 'typeorm'; +import path from 'path'; +import * as dotenv from 'dotenv'; + +dotenv.config(); +console.log('Entities Path:', path.join(__dirname, '../**/**/*.entity.{js,ts}')); +export const AppDataSource = new DataSource({ + type: process.env.DB_TYPE as 'mysql', + host: process.env.DB_HOST, + port: Number(process.env.DB_PORT), + username: process.env.DB_USERNAME, + password: process.env.DB_PASSWORD, + database: process.env.DB_DATABASE, + entities: [path.resolve(__dirname, '../server/src/**/*.entity.{js,ts}')], + migrations: [path.resolve(__dirname, '../server/src/migrations/*.{js,ts}')], + synchronize: false, +}); \ No newline at end of file diff --git a/packages/server/package.json b/packages/server/package.json index af4e333c..d0379c73 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -1,96 +1,98 @@ { - "name": "server", - "version": "0.0.1", - "description": "", - "author": "", - "private": true, - "license": "UNLICENSED", - "scripts": { - "build": "nest build", - "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", - "start": "nest start", - "start:dev": "nest start --watch", - "start:debug": "nest start --debug --watch", - "start:prod": "node dist/src/main.js", - "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", - "test": "jest", - "test:watch": "jest --watch", - "test:cov": "jest --coverage", - "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", - "test:e2e": "jest --config ./test/jest-e2e.json" - }, - "dependencies": { - "@nestjs/axios": "^3.1.2", - "@nestjs/common": "^10.0.0", - "@nestjs/core": "^10.4.7", - "@nestjs/jwt": "^10.2.0", - "@nestjs/platform-express": "^10.0.0", - "@nestjs/platform-socket.io": "^10.4.7", - "@nestjs/schedule": "^4.1.1", - "@nestjs/swagger": "^8.0.5", - "@nestjs/typeorm": "9.0.0", - "@nestjs/websockets": "^10.4.7", - "@types/swagger-ui-express": "^4.1.7", - "axios": "^1.7.7", - "class-transformer": "^0.5.1", - "class-validator": "^0.14.1", - "config": "^3.3.12", - "dotenv": "^16.4.5", - "i": "^0.3.7", - "ioredis": "^5.4.1", - "js-yaml": "^4.1.0", - "mysql2": "^3.11.3", - "reflect-metadata": "^0.2.0", - "rxjs": "^7.8.1", - "tunnel-ssh": "^5.1.2", - "typeorm": "0.3.7", - "uuid": "^11.0.3", - "ws": "^8.18.0" - }, - "devDependencies": { - "@nestjs/cli": "^10.0.0", - "@nestjs/schematics": "^10.0.0", - "@nestjs/testing": "^10.0.0", - "@types/config": "^3", - "@types/dotenv": "^8.2.3", - "@types/express": "^5.0.0", - "@types/jest": "^29.5.2", - "@types/js-yaml": "^4", - "@types/node": "^20.3.1", - "@types/socket.io": "^3.0.2", - "@types/supertest": "^6.0.0", - "@types/ws": "^8.5.13", - "@typescript-eslint/eslint-plugin": "^8.0.0", - "@typescript-eslint/parser": "^8.0.0", - "@yarnpkg/pnpify": "^4.1.3", - "eslint": "^8.0.0", - "eslint-config-prettier": "^9.0.0", - "eslint-plugin-prettier": "^5.0.0", - "jest": "^29.5.0", - "prettier": "^3.0.0", - "source-map-support": "^0.5.21", - "supertest": "^7.0.0", - "ts-jest": "^29.1.0", - "ts-loader": "^9.4.3", - "ts-node": "^10.9.1", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.6.3" - }, - "jest": { - "moduleFileExtensions": [ - "js", - "json", - "ts" - ], - "rootDir": "src", - "testRegex": ".*\\.spec\\.ts$", - "transform": { - "^.+\\.(t|j)s$": "ts-jest" - }, - "collectCoverageFrom": [ - "**/*.(t|j)s" - ], - "coverageDirectory": "../coverage", - "testEnvironment": "node" - } + "name": "server", + "version": "0.0.1", + "description": "", + "author": "", + "private": true, + "license": "UNLICENSED", + "scripts": { + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/src/main.js", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json", + "typeorm": "ts-node -P ./tsconfig.typeorm.json $(yarn bin typeorm) -d ./data-source.ts" + }, + "dependencies": { + "@nestjs/axios": "^3.1.2", + "@nestjs/common": "^10.0.0", + "@nestjs/core": "^10.4.7", + "@nestjs/jwt": "^10.2.0", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/platform-socket.io": "^10.4.7", + "@nestjs/schedule": "^4.1.1", + "@nestjs/swagger": "^8.0.5", + "@nestjs/typeorm": "9.0.0", + "@nestjs/websockets": "^10.4.7", + "@types/swagger-ui-express": "^4.1.7", + "axios": "^1.7.7", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.1", + "config": "^3.3.12", + "dotenv": "^16.4.5", + "i": "^0.3.7", + "ioredis": "^5.4.1", + "js-yaml": "^4.1.0", + "mysql2": "^3.11.3", + "reflect-metadata": "^0.2.0", + "rxjs": "^7.8.1", + "tunnel-ssh": "^5.1.2", + "typeorm": "^0.3.20", + "uuid": "^11.0.3", + "ws": "^8.18.0", + "src": "workspace:*" + }, + "devDependencies": { + "@nestjs/cli": "^10.0.0", + "@nestjs/schematics": "^10.0.0", + "@nestjs/testing": "^10.0.0", + "@types/config": "^3", + "@types/dotenv": "^8.2.3", + "@types/express": "^5.0.0", + "@types/jest": "^29.5.2", + "@types/js-yaml": "^4", + "@types/node": "^20.3.1", + "@types/socket.io": "^3.0.2", + "@types/supertest": "^6.0.0", + "@types/ws": "^8.5.13", + "@typescript-eslint/eslint-plugin": "^8.0.0", + "@typescript-eslint/parser": "^8.0.0", + "@yarnpkg/pnpify": "^4.1.3", + "eslint": "^8.0.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "jest": "^29.5.0", + "prettier": "^3.0.0", + "source-map-support": "^0.5.21", + "supertest": "^7.0.0", + "ts-jest": "^29.1.0", + "ts-loader": "^9.4.3", + "ts-node": "^10.9.2", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.6.3" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + } } diff --git a/packages/server/src/account/account.entity.ts b/packages/server/src/account/account.entity.ts index f2579812..bdf2b63f 100644 --- a/packages/server/src/account/account.entity.ts +++ b/packages/server/src/account/account.entity.ts @@ -1,5 +1,5 @@ -import { Asset } from 'src/asset/asset.entity'; -import { User } from 'src/auth/user.entity'; +import { Asset } from '@src/asset/asset.entity'; +import { User } from '@src/auth/user.entity'; import { Entity, PrimaryGeneratedColumn, diff --git a/packages/server/src/asset/asset.entity.ts b/packages/server/src/asset/asset.entity.ts index da47db99..9d38c693 100644 --- a/packages/server/src/asset/asset.entity.ts +++ b/packages/server/src/asset/asset.entity.ts @@ -1,4 +1,4 @@ -import { Account } from 'src/account/account.entity'; +import { Account } from '@src/account/account.entity'; import { Entity, PrimaryGeneratedColumn, diff --git a/packages/server/src/auth/user.entity.ts b/packages/server/src/auth/user.entity.ts index ced6e4cf..4a8b6968 100644 --- a/packages/server/src/auth/user.entity.ts +++ b/packages/server/src/auth/user.entity.ts @@ -22,7 +22,7 @@ export class User extends BaseEntity { @Column() username: string; - + @OneToOne(() => Account, (account) => account.user, { cascade: true, onDelete: 'CASCADE', diff --git a/packages/server/src/main.ts b/packages/server/src/main.ts index 9793439e..48ddad3a 100644 --- a/packages/server/src/main.ts +++ b/packages/server/src/main.ts @@ -10,10 +10,7 @@ import { setupSshTunnel } from './configs/ssh-tunnel'; import { AllExceptionsFilter } from 'common/all-exceptions.filter'; config(); -console.log({ - synchronize: process.env.DB_SYNCHRONIZE === "true", // "true" 문자열인 경우만 true로 변환 - dropSchema: process.env.DB_DROPSCHEMA === "true", -}); + async function bootstrap() { await setupSshTunnel(); const app = await NestFactory.create(AppModule); diff --git a/packages/server/src/migrations/1731911925616-consent-record.ts b/packages/server/src/migrations/1731911925616-consent-record.ts new file mode 100644 index 00000000..ac54020a --- /dev/null +++ b/packages/server/src/migrations/1731911925616-consent-record.ts @@ -0,0 +1,11 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class ConsentRecord1731911925616 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + } + + public async down(queryRunner: QueryRunner): Promise { + } + +} diff --git a/packages/server/src/migrations/1731911957654-consent-record.ts b/packages/server/src/migrations/1731911957654-consent-record.ts new file mode 100644 index 00000000..c70773e3 --- /dev/null +++ b/packages/server/src/migrations/1731911957654-consent-record.ts @@ -0,0 +1,11 @@ +import { MigrationInterface, QueryRunner } from "typeorm"; + +export class ConsentRecord1731911957654 implements MigrationInterface { + + public async up(queryRunner: QueryRunner): Promise { + } + + public async down(queryRunner: QueryRunner): Promise { + } + +} diff --git a/packages/server/src/trade-history/trade-history.entity.ts b/packages/server/src/trade-history/trade-history.entity.ts index b1e8651f..b5bda770 100644 --- a/packages/server/src/trade-history/trade-history.entity.ts +++ b/packages/server/src/trade-history/trade-history.entity.ts @@ -1,4 +1,4 @@ -import { User } from 'src/auth/user.entity'; +import { User } from '@src/auth/user.entity'; import { Entity, PrimaryGeneratedColumn, diff --git a/packages/server/src/trade/trade.entity.ts b/packages/server/src/trade/trade.entity.ts index 793dc074..4d893109 100644 --- a/packages/server/src/trade/trade.entity.ts +++ b/packages/server/src/trade/trade.entity.ts @@ -1,4 +1,4 @@ -import { User } from 'src/auth/user.entity'; +import { User } from '@src/auth/user.entity'; import { Entity, PrimaryGeneratedColumn, diff --git a/packages/server/tsconfig.json b/packages/server/tsconfig.json index e1f7fb05..8350e141 100644 --- a/packages/server/tsconfig.json +++ b/packages/server/tsconfig.json @@ -18,6 +18,9 @@ "strictBindCallApply": false, "forceConsistentCasingInFileNames": false, "noFallthroughCasesInSwitch": false, + "paths": { + "@src/*": ["src/*"] + } } } diff --git a/packages/server/tsconfig.typeorm.json b/packages/server/tsconfig.typeorm.json new file mode 100644 index 00000000..7e71ccde --- /dev/null +++ b/packages/server/tsconfig.typeorm.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.json", // 기존 tsconfig.json 파일을 확장 + "compilerOptions": { + "module": "CommonJS", // TypeORM CLI는 CommonJS를 필요로 함 + "target": "ES2020", // 실행 환경에 맞게 설정 + "outDir": "./dist", // 출력 디렉토리 + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true + }, + "include": ["./src/**/*.ts"], // 필요한 파일 경로 포함 + "exclude": ["node_modules"] // 불필요한 경로 제외 +}