Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
54154a0
feat: 환경에 따라서 S3 설정 변경
Conut-1 Mar 12, 2025
9314538
feat: 환경에 따라 .env파일 변경
Conut-1 Mar 13, 2025
7f8305a
refactor: 불필요한 nestjs 모듈 임포트 제거
Conut-1 Mar 13, 2025
017c1e9
refactor: 환경변수 파일 이름 변경
Conut-1 Mar 15, 2025
22e2605
fix: .env 파일 이름 변경
Conut-1 Mar 17, 2025
e455672
fix: 테스트용 ConfigModule
Conut-1 Mar 17, 2025
66bf260
chore: 환경변수 파일 지정
Conut-1 Mar 17, 2025
9f85d47
feat: testcontainers 사용을 위한 globalSetup, globalTeardown 설정
Conut-1 Mar 18, 2025
dfbf7c7
feat: mongodb를 testcontainers로 생성
Conut-1 Mar 22, 2025
fc85399
chore: localstack testcontainers 패키지 설치
Conut-1 Mar 24, 2025
65e57c5
feat: localstack testcontainers로 생성
Conut-1 Mar 24, 2025
dc61f69
chore: mysql testcontainers 패키지 설치
Conut-1 Mar 25, 2025
90eaa0a
feat: mysql testcontainers로 생성
Conut-1 Mar 25, 2025
f012492
refactor: 컨테이너 생성 함수로 분리
Conut-1 Mar 26, 2025
ca533cb
chore: dotenv, dotenv-expand를 devDependencies로 추가
Conut-1 Mar 27, 2025
a5afb00
feat: 여러 환경변수를 조합해서 환경변수 만들기
Conut-1 Mar 27, 2025
61a7059
feat: 테스트 ConfigModule에서 dotenv-expand 사용 설정
Conut-1 Mar 28, 2025
c326084
feat: 테스트 컨테이너 설정에 환경변수 사용
Conut-1 Mar 28, 2025
c54eac6
refactor: 환경변수 interface 작성
Conut-1 Mar 28, 2025
d814b1f
refactor: globalThis에서 컨테이너들 분리
Conut-1 Mar 29, 2025
b1cb662
refactor: ConfigModule 설정 리팩토링
Conut-1 Mar 29, 2025
a9d5f01
refactor: 커스텀 ConfigModule 적용
Conut-1 Mar 29, 2025
f628d7a
refactor: 불필요한 nestjs 모듈 imports 제거
Conut-1 Mar 29, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion nestjs-BE/server/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -31,4 +31,5 @@ lerna-debug.log*
/.vscode

# Environment Variable File
.env
.env.production
.env.development
1,235 changes: 1,226 additions & 9 deletions nestjs-BE/server/package-lock.json

Large diffs are not rendered by default.

8 changes: 6 additions & 2 deletions nestjs-BE/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
"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": "npx prisma migrate reset --force && jest --config ./test/jest-e2e.json"
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.645.0",
Expand All @@ -35,7 +35,6 @@
"@prisma/client": "^5.6.0",
"class-transformer": "^0.5.1",
"class-validator": "^0.14.0",
"dotenv": "^16.3.1",
"lodash": "^4.17.21",
"mongoose": "^8.0.2",
"passport": "^0.6.0",
Expand All @@ -48,6 +47,9 @@
"@nestjs/cli": "^10.0.0",
"@nestjs/schematics": "^10.0.0",
"@nestjs/testing": "^10.0.0",
"@testcontainers/localstack": "^10.21.0",
"@testcontainers/mongodb": "^10.21.0",
"@testcontainers/mysql": "^10.22.0",
"@types/express": "^4.17.17",
"@types/jest": "^29.5.2",
"@types/lodash": "^4.17.15",
Expand All @@ -58,6 +60,8 @@
"@types/uuid": "^10.0.0",
"@typescript-eslint/eslint-plugin": "^6.0.0",
"@typescript-eslint/parser": "^6.0.0",
"dotenv": "^16.4.7",
"dotenv-expand": "^12.0.1",
"eslint": "^8.42.0",
"eslint-config-prettier": "^9.0.0",
"eslint-plugin-prettier": "^5.0.0",
Expand Down
6 changes: 3 additions & 3 deletions nestjs-BE/server/src/app.module.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { Module } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { ConfigService } from '@nestjs/config';
import { MongooseModule } from '@nestjs/mongoose';
import { ScheduleModule } from '@nestjs/schedule';
import { AppController } from './app.controller';
Expand All @@ -11,17 +11,17 @@ import { BoardsModule } from './boards/boards.module';
import { InviteCodesModule } from './invite-codes/invite-codes.module';
import { ProfileSpaceModule } from './profile-space/profile-space.module';
import { BoardTreesModule } from './board-trees/board-trees.module';
import { CustomConfigModule } from './config/custom-config.module';

@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
CustomConfigModule,
AuthModule,
ScheduleModule.forRoot(),
ProfilesModule,
SpacesModule,
BoardsModule,
MongooseModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => ({
uri: configService.get<string>('MONGODB_DATABASE_URI'),
Expand Down
4 changes: 2 additions & 2 deletions nestjs-BE/server/src/auth/auth.controller.spec.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import { HttpStatus, NotFoundException } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';
import { Test, TestingModule } from '@nestjs/testing';
import { AuthController } from './auth.controller';
import { AuthService } from './auth.service';
import { CustomConfigModule } from '../config/custom-config.module';

describe('AuthController', () => {
let controller: AuthController;
let authService: AuthService;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [ConfigModule.forRoot()],
imports: [CustomConfigModule],
controllers: [AuthController],
providers: [
{
Expand Down
4 changes: 2 additions & 2 deletions nestjs-BE/server/src/auth/auth.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { Test, TestingModule } from '@nestjs/testing';
import { JwtModule, JwtService } from '@nestjs/jwt';
import { ConfigModule } from '@nestjs/config';
import { NotFoundException } from '@nestjs/common';
import { RefreshToken } from '@prisma/client';
import { AuthService } from './auth.service';
import { RefreshTokensService } from '../refresh-tokens/refresh-tokens.service';
import { UsersService } from '../users/users.service';
import { ProfilesService } from '../profiles/profiles.service';
import { CustomConfigModule } from '../config/custom-config.module';

const fetchSpy = jest.spyOn(global, 'fetch');

Expand All @@ -18,7 +18,7 @@ describe('AuthService', () => {

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [JwtModule, ConfigModule.forRoot()],
imports: [JwtModule, CustomConfigModule],
providers: [
AuthService,
{
Expand Down
5 changes: 3 additions & 2 deletions nestjs-BE/server/src/boards/boards.controller.spec.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
import { Test, TestingModule } from '@nestjs/testing';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { ConfigService } from '@nestjs/config';
import { HttpStatus, NotFoundException } from '@nestjs/common';
import { BoardsController } from './boards.controller';
import { BoardsService } from './boards.service';
import { CreateBoardDto } from './dto/create-board.dto';
import { CustomConfigModule } from '../config/custom-config.module';

describe('BoardsController', () => {
let controller: BoardsController;
Expand All @@ -12,7 +13,7 @@ describe('BoardsController', () => {

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [ConfigModule],
imports: [CustomConfigModule],
controllers: [BoardsController],
providers: [
{
Expand Down
4 changes: 2 additions & 2 deletions nestjs-BE/server/src/boards/boards.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
import { Test, TestingModule } from '@nestjs/testing';
import { getModelToken } from '@nestjs/mongoose';
import { ConfigModule } from '@nestjs/config';
import { Model } from 'mongoose';
import { BoardsService } from './boards.service';
import { Board } from './schemas/board.schema';
import { CreateBoardDto } from './dto/create-board.dto';
import { UploadService } from '../upload/upload.service';
import { CustomConfigModule } from '../config/custom-config.module';

describe('BoardsService', () => {
let service: BoardsService;
let model: Model<Board>;

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [ConfigModule],
imports: [CustomConfigModule],
providers: [
BoardsService,
{
Expand Down
14 changes: 14 additions & 0 deletions nestjs-BE/server/src/config/custom-config.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Module } from '@nestjs/common';
import { ConfigModule } from '@nestjs/config';

@Module({
imports: [
ConfigModule.forRoot({
isGlobal: true,
envFilePath:
process.env.MODE === 'prod' ? '.env.production' : '.env.development',
expandVariables: true,
}),
],
})
export class CustomConfigModule {}
5 changes: 3 additions & 2 deletions nestjs-BE/server/src/profiles/profiles.service.spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { Test, TestingModule } from '@nestjs/testing';
import { NotFoundException } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { ConfigService } from '@nestjs/config';
import { omit } from 'lodash';
import { ProfilesService } from './profiles.service';
import { PrismaService } from '../prisma/prisma.service';
import { UploadService } from '../upload/upload.service';
import { CustomConfigModule } from '../config/custom-config.module';

import type { UpdateProfileDto } from './dto/update-profile.dto';

Expand All @@ -16,7 +17,7 @@ describe('ProfilesService', () => {

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [ConfigModule],
imports: [CustomConfigModule],
providers: [
ProfilesService,
{ provide: PrismaService, useValue: { profile: {} } },
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { ConfigModule } from '@nestjs/config';
import { JwtModule } from '@nestjs/jwt';
import { Test, TestingModule } from '@nestjs/testing';
import { PrismaClientKnownRequestError } from '@prisma/client/runtime/library';
import { v4 as uuid } from 'uuid';
import { RefreshTokensService } from './refresh-tokens.service';
import { CustomConfigModule } from '../config/custom-config.module';
import { PrismaService } from '../prisma/prisma.service';
import { getExpiryDate } from '../utils/date';

Expand All @@ -15,7 +15,7 @@ describe('RefreshTokensService', () => {

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [JwtModule, ConfigModule.forRoot()],
imports: [JwtModule, CustomConfigModule],
providers: [
RefreshTokensService,
{
Expand Down
5 changes: 3 additions & 2 deletions nestjs-BE/server/src/spaces/spaces.service.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
NotFoundException,
} from '@nestjs/common';
import { Test, TestingModule } from '@nestjs/testing';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { ConfigService } from '@nestjs/config';
import { Space } from '@prisma/client';
import { PrismaClientKnownRequestError } from '@prisma/client/runtime/library';
import { SpacesService } from './spaces.service';
Expand All @@ -13,6 +13,7 @@ import { UpdateSpaceDto } from './dto/update-space.dto';
import { PrismaService } from '../prisma/prisma.service';
import { ProfileSpaceService } from '../profile-space/profile-space.service';
import { UploadService } from '../upload/upload.service';
import { CustomConfigModule } from '../config/custom-config.module';

describe('SpacesService', () => {
let spacesService: SpacesService;
Expand All @@ -23,7 +24,7 @@ describe('SpacesService', () => {

beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [ConfigModule],
imports: [CustomConfigModule],
providers: [
SpacesService,
{ provide: PrismaService, useValue: { space: {} } },
Expand Down
22 changes: 19 additions & 3 deletions nestjs-BE/server/src/upload/upload.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,29 @@ export class UploadService {
private s3Client: S3Client;

constructor(private configService: ConfigService) {
this.s3Client = new S3Client({
region: this.configService.get<string>('AWS_REGION'),
this.s3Client = new S3Client(this.setS3Option());
}

private setS3Option() {
if (process.env.MODE === 'prod') {
return {
region: this.configService.get<string>('AWS_REGION'),
credentials: {
accessKeyId: this.configService.get<string>('S3_ACCESS_KEY_ID'),
secretAccessKey: this.configService.get<string>(
'S3_SECRET_ACCESS_KEY',
),
},
};
}
return {
endpoint: 'http://localhost:4566',
forcePathStyle: true,
credentials: {
accessKeyId: this.configService.get<string>('S3_ACCESS_KEY_ID'),
secretAccessKey: this.configService.get<string>('S3_SECRET_ACCESS_KEY'),
},
});
};
}

async uploadFile(image: Express.Multer.File) {
Expand Down
4 changes: 2 additions & 2 deletions nestjs-BE/server/test/auth.e2e-spec.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { HttpStatus, INestApplication } from '@nestjs/common';
import { Test, TestingModule } from '@nestjs/testing';
import { ConfigModule } from '@nestjs/config';
import * as request from 'supertest';
import { TestConfigModule } from './test-config.module';
import { AuthModule } from '../src/auth/auth.module';

describe('AuthController (e2e)', () => {
Expand All @@ -14,7 +14,7 @@ describe('AuthController (e2e)', () => {

beforeEach(async () => {
const moduleFixture: TestingModule = await Test.createTestingModule({
imports: [AuthModule, ConfigModule.forRoot({ isGlobal: true })],
imports: [AuthModule, TestConfigModule],
}).compile();

app = moduleFixture.createNestApplication();
Expand Down
6 changes: 3 additions & 3 deletions nestjs-BE/server/test/board-trees.e2e-spec.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
import { INestApplication } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { ConfigService } from '@nestjs/config';
import { Test, TestingModule } from '@nestjs/testing';
import { MongooseModule } from '@nestjs/mongoose';
import { Profile } from '@prisma/client';
import { sign } from 'jsonwebtoken';
import { io, Socket } from 'socket.io-client';
import { v4 as uuid } from 'uuid';
import { TestConfigModule } from './test-config.module';
import { BoardTreesModule } from '../src/board-trees/board-trees.module';
import { BoardTreesService } from '../src/board-trees/board-trees.service';
import { PrismaModule } from '../src/prisma/prisma.module';
Expand Down Expand Up @@ -35,9 +36,8 @@ describe('BoardTreesGateway (e2e)', () => {
beforeAll(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
TestConfigModule,
MongooseModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory: async (configService: ConfigService) => ({
uri: configService.get<string>('MONGODB_DATABASE_URI'),
Expand Down
5 changes: 3 additions & 2 deletions nestjs-BE/server/test/invite-codes.e2e-spec.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import { HttpStatus, INestApplication } from '@nestjs/common';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { ConfigService } from '@nestjs/config';
import { InviteCode, Profile, Space } from '@prisma/client';
import { Test, TestingModule } from '@nestjs/testing';
import { sign } from 'jsonwebtoken';
import * as request from 'supertest';
import { v4 as uuid } from 'uuid';
import { TestConfigModule } from './test-config.module';
import { InviteCodesModule } from '../src/invite-codes/invite-codes.module';
import { PrismaService } from '../src/prisma/prisma.service';
import * as RandomStringModule from '../src/utils/random-string';
Expand All @@ -18,7 +19,7 @@ describe('InviteController (e2e)', () => {

beforeAll(async () => {
const module: TestingModule = await Test.createTestingModule({
imports: [InviteCodesModule, ConfigModule.forRoot({ isGlobal: true })],
imports: [InviteCodesModule, TestConfigModule],
}).compile();

app = module.createNestApplication();
Expand Down
4 changes: 3 additions & 1 deletion nestjs-BE/server/test/jest-e2e.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,5 +6,7 @@
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"maxWorkers": "50%"
"maxWorkers": "50%",
"globalSetup": "./jest-global-setup.ts",
"globalTeardown": "./jest-global-teardown.ts"
}
Loading