Skip to content

Commit aa3fe28

Browse files
authored
merge pull request #469 from kmi0817/be-feautre/#468-change-attaching-files
[feat] ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ์„œ๋น„์Šค ์ƒ์„ฑ
2 parents a886f8b + c7e37b4 commit aa3fe28

11 files changed

+74
-18
lines changed

โ€ŽBE/src/app.module.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ import { TimelinesModule } from './timelines/timelines.module';
77
import { AuthModule } from './auth/auth.module';
88
import { ConfigModule, ConfigService } from '@nestjs/config';
99
import { DatabaseModule } from './database/database.module';
10-
import { StorageModule } from './storage/storage.module';
10+
// import { StorageModule } from './storage/storage.module';
11+
import { FileModule } from './file/file.module';
1112
import { JwtModule } from '@nestjs/jwt';
1213
import { EmailModule } from './email/email.module';
1314

@@ -22,7 +23,8 @@ import { EmailModule } from './email/email.module';
2223
secret: process.env.JWT_SECRET_ACCESS,
2324
signOptions: { expiresIn: '30d' },
2425
}),
25-
StorageModule,
26+
// StorageModule,
27+
FileModule,
2628
UsersModule,
2729
PostingsModule,
2830
TimelinesModule,

โ€ŽBE/src/app.service.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import { StorageService } from './storage/storage.service';
1+
// import { StorageService } from './storage/storage.service';
2+
import { FileService } from './file/file.service';
23
import { Injectable } from '@nestjs/common';
34

45
@Injectable()
56
export class AppService {
6-
constructor(private readonly storageService: StorageService) {}
7+
constructor(private readonly storageService: FileService) {}
78

89
getHello(): string {
910
return `

โ€ŽBE/src/auth/auth.module.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@ import { AuthService } from './auth.service';
33
import { AuthController } from './auth.controller';
44
import { UsersModule } from 'src/users/users.module';
55
import { UsersService } from 'src/users/users.service';
6-
import { StorageService } from 'src/storage/storage.service';
6+
// import { StorageService } from 'src/storage/storage.service';
7+
import { FileService } from 'src/file/file.service';
78
import { HttpModule } from '@nestjs/axios';
89
import { AuthGuard } from './auth.guard';
910
import { EmailModule } from 'src/email/email.module';
@@ -16,7 +17,8 @@ import { AppleLoginStrategy } from 'src/socialLogin/apple-login-strategy';
1617
providers: [
1718
AuthService,
1819
UsersService,
19-
StorageService,
20+
// StorageService,
21+
FileService,
2022
AuthGuard,
2123
KakaoLoginStrategy,
2224
AppleLoginStrategy,

โ€ŽBE/src/file/file.module.ts

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { FileService } from './file.service';
2+
import { Module } from '@nestjs/common';
3+
4+
@Module({
5+
providers: [FileService],
6+
exports: [FileService],
7+
})
8+
export class FileModule {}

โ€ŽBE/src/file/file.service.ts

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { Injectable } from '@nestjs/common';
2+
import { mkdir, unlink, writeFile } from 'fs/promises';
3+
import { v4 as uuidv4 } from 'uuid';
4+
5+
@Injectable()
6+
export class FileService {
7+
private readonly basePath = 'static/';
8+
9+
constructor() {}
10+
11+
private generateFilename(originalname: string) {
12+
const extension = originalname.split('.').pop();
13+
const uniqueId = uuidv4();
14+
return `${uniqueId}.${extension}`;
15+
}
16+
17+
async upload(path: string, file: Express.Multer.File) {
18+
const filePath =
19+
this.basePath + path + this.generateFilename(file.originalname);
20+
await mkdir(this.basePath + path, { recursive: true });
21+
await writeFile(filePath, file.buffer);
22+
23+
return {
24+
imageUrl: filePath,
25+
path: filePath,
26+
};
27+
}
28+
29+
async getImageUrl(key: string): Promise<string> {
30+
return this.basePath + key;
31+
}
32+
33+
async delete(path: string) {
34+
await unlink(this.basePath + path);
35+
}
36+
}

โ€ŽBE/src/postings/postings.module.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ import { PostingsRepository } from './repositories/postings.repository';
77
import { LikedsRepository } from './repositories/likeds.repository';
88
import { ReportsRepository } from './repositories/reports.repository';
99
import { UsersModule } from '../users/users.module';
10-
import { StorageModule } from 'src/storage/storage.module';
10+
// import { StorageModule } from 'src/storage/storage.module';
11+
import { FileModule } from 'src/file/file.module';
1112

1213
@Module({
13-
imports: [DatabaseModule, UsersModule, StorageModule],
14+
imports: [DatabaseModule, UsersModule, FileModule],
1415
controllers: [PostingsController],
1516
providers: [
1617
...postingsProviders,

โ€ŽBE/src/postings/postings.service.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,8 @@ import { Liked } from './entities/liked.entity';
1717
import { Report } from './entities/report.entity';
1818
import { Period, Season } from './postings.types';
1919
import { BLOCKING_LIMIT } from './postings.constants';
20-
import { StorageService } from 'src/storage/storage.service';
20+
// import { StorageService } from 'src/storage/storage.service';
21+
import { FileService } from 'src/file/file.service';
2122
import { BlockRepository } from 'src/users/block.repository';
2223

2324
@Injectable()
@@ -28,7 +29,7 @@ export class PostingsService {
2829
private readonly postingsRepository: PostingsRepository,
2930
private readonly likedsRepository: LikedsRepository,
3031
private readonly reportsRepository: ReportsRepository,
31-
private readonly storageService: StorageService
32+
private readonly storageService: FileService
3233
) {}
3334

3435
async create(userId: string, createPostingDto: CreatePostingDto) {

โ€ŽBE/src/timelines/timelines.module.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -12,14 +12,16 @@ import { PostingsRepository } from '../postings/repositories/postings.repository
1212
import { LikedsRepository } from '../postings/repositories/likeds.repository';
1313
import { ReportsRepository } from '../postings/repositories/reports.repository';
1414
import { postingsProviders } from '../postings/postings.providers';
15-
import { StorageModule } from '../storage/storage.module';
15+
// import { StorageModule } from '../storage/storage.module';
16+
import { FileModule } from '../file/file.module';
1617

1718
@Module({
1819
imports: [
1920
DatabaseModule,
2021
PostingsModule,
2122
UsersModule,
22-
StorageModule,
23+
// StorageModule,
24+
FileModule,
2325
HttpModule,
2426
],
2527
controllers: [TimelinesController],

โ€ŽBE/src/timelines/timelines.service.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ import { CreateTimelineDto } from './dto/create-timeline.dto';
1010
import { UpdateTimelineDto } from './dto/update-timeline.dto';
1111
import { TimelinesRepository } from './timelines.repository';
1212
import { Timeline } from './entities/timeline.entity';
13-
import { StorageService } from '../storage/storage.service';
13+
// import { StorageService } from '../storage/storage.service';
14+
import { FileService } from '../file/file.service';
1415
import { PostingsService } from '../postings/postings.service';
1516
import { KAKAO_KEYWORD_SEARCH, PAPAGO_URL } from './timelines.constants';
1617
import { PostingsRepository } from '../postings/repositories/postings.repository';
@@ -21,7 +22,7 @@ export class TimelinesService {
2122
private readonly timelinesRepository: TimelinesRepository,
2223
private readonly postingsRepository: PostingsRepository,
2324
private readonly postingsService: PostingsService,
24-
private readonly storageService: StorageService,
25+
private readonly storageService: FileService,
2526
private readonly httpService: HttpService
2627
) {}
2728

โ€ŽBE/src/users/users.module.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ import { UsersService } from './users.service';
33
import { UsersController } from './users.controller';
44
import { usersProvider } from './users.providers';
55
import { UserRepository } from './users.repository';
6-
import { StorageModule } from '../storage/storage.module';
6+
// import { StorageModule } from '../storage/storage.module';
7+
import { FileModule } from '../file/file.module';
78
import { DatabaseModule } from '../database/database.module';
89
import { BlockRepository } from './block.repository';
910

1011
@Module({
11-
imports: [DatabaseModule, StorageModule],
12+
imports: [DatabaseModule, FileModule],
1213
controllers: [UsersController],
1314
providers: [UsersService, ...usersProvider, UserRepository, BlockRepository],
1415
exports: [UserRepository, UsersService, BlockRepository],

โ€ŽBE/src/users/users.service.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { BadRequestException, Injectable } from '@nestjs/common';
22
import { UserInfoDto } from './dto/user-info.dto';
3-
import { StorageService } from 'src/storage/storage.service';
3+
// import { StorageService } from 'src/storage/storage.service';
4+
import { FileService } from 'src/file/file.service';
45
import { UserRepository } from './users.repository';
56
import { CheckDuplicatedNameResponseDto } from './dto/check-duplicated-name-response.dto';
67
import { UpdateUserDto } from './dto/update-user.dto';
@@ -12,7 +13,7 @@ export class UsersService {
1213
constructor(
1314
private userRepository: UserRepository,
1415
private blockRepository: BlockRepository,
15-
private readonly storageService: StorageService
16+
private readonly storageService: FileService
1617
) {}
1718

1819
nameGenerator() {

0 commit comments

Comments
ย (0)