Skip to content

Commit 9db455d

Browse files
committed
♻️ refactor: response DTO 사용하도록 변경
1 parent 3716a28 commit 9db455d

File tree

5 files changed

+66
-130
lines changed

5 files changed

+66
-130
lines changed

server/src/activity/service/activity.service.ts

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,23 @@
1-
import { Injectable, NotFoundException } from '@nestjs/common';
1+
import { Injectable } from '@nestjs/common';
22
import { ActivityRepository } from '../repository/activity.repository';
3-
import { UserRepository } from '../../user/repository/user.repository';
43
import {
54
ActivityReadResponseDto,
65
DailyActivityDto,
76
} from '../dto/response/activity-read.dto';
7+
import { UserService } from '../../user/service/user.service';
88

99
@Injectable()
1010
export class ActivityService {
1111
constructor(
1212
private readonly activityRepository: ActivityRepository,
13-
private readonly userRepository: UserRepository,
13+
private readonly userService: UserService,
1414
) {}
1515

1616
async readActivities(
1717
userId: number,
1818
year: number,
1919
): Promise<ActivityReadResponseDto> {
20-
const user = await this.userRepository.findOneBy({ id: userId });
21-
if (!user) {
22-
throw new NotFoundException('존재하지 않는 사용자입니다.');
23-
}
20+
const user = await this.userService.getUser(userId);
2421

2522
const activities =
2623
await this.activityRepository.findActivitiesByUserIdAndYear(userId, year);
@@ -33,12 +30,7 @@ export class ActivityService {
3330
}),
3431
);
3532

36-
return new ActivityReadResponseDto({
37-
dailyActivities,
38-
maxStreak: user.maxStreak,
39-
currentStreak: user.currentStreak,
40-
totalViews: user.totalViews,
41-
});
33+
return ActivityReadResponseDto.toResponseDto(dailyActivities, user);
4234
}
4335

4436
async upsertActivity(userId: number) {

server/src/comment/service/comment.service.ts

Lines changed: 9 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -6,18 +6,21 @@ import {
66
import { CommentRepository } from '../repository/comment.repository';
77
import { CreateCommentRequestDto } from '../dto/request/create-comment.dto';
88
import { FeedRepository } from '../../feed/repository/feed.repository';
9-
import { UserRepository } from '../../user/repository/user.repository';
109
import { Payload } from '../../common/guard/jwt.guard';
1110
import { DeleteCommentRequestDto } from '../dto/request/delete-comment.dto';
1211
import { UpdateCommentRequestDto } from '../dto/request/update-comment.dto';
1312
import { GetCommentRequestDto } from '../dto/request/get-comment.dto';
13+
import { GetCommentResponseDto } from '../dto/response/get-comment.dto';
14+
import { FeedService } from '../../feed/service/feed.service';
15+
import { UserService } from '../../user/service/user.service';
1416

1517
@Injectable()
1618
export class CommentService {
1719
constructor(
1820
private readonly commentRepository: CommentRepository,
1921
private readonly feedRepository: FeedRepository,
20-
private readonly userRepository: UserRepository,
22+
private readonly userService: UserService,
23+
private readonly feedService: FeedService,
2124
) {}
2225

2326
private async commentCheck(userInformation: Payload, commentId: number) {
@@ -38,41 +41,17 @@ export class CommentService {
3841
}
3942

4043
async get(commentDto: GetCommentRequestDto) {
41-
const feed = await this.feedRepository.findOneBy({
42-
id: commentDto.feedId,
43-
});
44-
45-
if (!feed) {
46-
throw new NotFoundException('게시글을 찾을 수 없습니다.');
47-
}
44+
await this.feedService.getFeed(commentDto.feedId);
4845

4946
const comments = await this.commentRepository.getCommentInformation(
5047
commentDto.feedId,
5148
);
52-
return comments.map((row) => ({
53-
id: row.id,
54-
comment: row.comment,
55-
date: row.date,
56-
user: {
57-
id: row.user.id,
58-
userName: row.user.userName,
59-
profileImage: row.user.profileImage,
60-
},
61-
}));
49+
return GetCommentResponseDto.toResponseDtoArray(comments);
6250
}
6351

6452
async create(userInformation: Payload, commentDto: CreateCommentRequestDto) {
65-
const feed = await this.feedRepository.findOneBy({ id: commentDto.feedId });
66-
if (!feed) {
67-
throw new NotFoundException('존재하지 않는 게시글입니다.');
68-
}
69-
70-
const user = await this.userRepository.findOneBy({
71-
id: userInformation.id,
72-
});
73-
if (!user) {
74-
throw new NotFoundException('존재하지 않는 유저입니다.');
75-
}
53+
const feed = await this.feedService.getFeed(commentDto.feedId);
54+
const user = await this.userService.getUser(userInformation.id);
7655

7756
await this.commentRepository.save({
7857
comment: commentDto.comment,

server/src/feed/service/feed.service.ts

Lines changed: 22 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,24 @@ export class FeedService {
4242
private readonly redisService: RedisService,
4343
) {}
4444

45+
async getFeed(feedId: number) {
46+
const feed = await this.feedRepository.findOneBy({ id: feedId });
47+
if (!feed) {
48+
throw new NotFoundException('존재하지 않는 게시글입니다.');
49+
}
50+
51+
return feed;
52+
}
53+
54+
async getFeedByView(feedId: number) {
55+
const feed = await this.feedViewRepository.findOneBy({ feedId });
56+
if (!feed) {
57+
throw new NotFoundException('존재하지 않는 게시글입니다.');
58+
}
59+
60+
return feed;
61+
}
62+
4563
async readFeedPagination(feedPaginationQueryDto: FeedPaginationRequestDto) {
4664
const feedList = await this.feedViewRepository.findFeedPagination(
4765
feedPaginationQueryDto,
@@ -103,10 +121,6 @@ export class FeedService {
103121
const { find, page, limit, type } = searchFeedQueryDto;
104122
const offset = (page - 1) * limit;
105123

106-
if (!this.validateSearchType(type)) {
107-
throw new BadRequestException('검색 타입이 잘못되었습니다.');
108-
}
109-
110124
const [searchResult, totalCount] = await this.feedRepository.searchFeedList(
111125
find,
112126
limit,
@@ -125,16 +139,6 @@ export class FeedService {
125139
);
126140
}
127141

128-
private validateSearchType(type: string) {
129-
const searchType = {
130-
title: 'title',
131-
blogName: 'blogName',
132-
all: 'all',
133-
};
134-
135-
return searchType.hasOwnProperty(type);
136-
}
137-
138142
async updateFeedViewCount(
139143
viewUpdateParamDto: FeedViewUpdateRequestDto,
140144
request: Request,
@@ -144,18 +148,12 @@ export class FeedService {
144148
const ip = this.getIp(request);
145149
const feedId = viewUpdateParamDto.feedId;
146150
if (ip && this.isString(ip)) {
147-
const [feed, hasCookie, hasIpFlag] = await Promise.all([
148-
this.feedRepository.findOne({
149-
where: { id: feedId },
150-
}),
151+
const [_, hasCookie, hasIpFlag] = await Promise.all([
152+
this.getFeed(feedId),
151153
Boolean(cookie?.includes(`View_count_${feedId}=${feedId}`)),
152154
this.redisService.sismember(`feed:${feedId}:ip`, ip),
153155
]);
154156

155-
if (!feed) {
156-
throw new NotFoundException(`${feedId}번 피드를 찾을 수 없습니다.`);
157-
}
158-
159157
if (!hasCookie) {
160158
this.createCookie(response, feedId);
161159
}
@@ -241,28 +239,12 @@ export class FeedService {
241239
}
242240

243241
async readFeedDetail(feedDetailRequestDto: FeedDetailRequestDto) {
244-
const feed = await this.feedViewRepository.findOneBy({
245-
feedId: feedDetailRequestDto.feedId,
246-
});
247-
if (!feed) {
248-
throw new NotFoundException(
249-
`${feedDetailRequestDto.feedId}번 피드는 존재하지 않습니다.`,
250-
);
251-
}
252-
242+
const feed = await this.getFeedByView(feedDetailRequestDto.feedId);
253243
return FeedDetailResponseDto.toResponseDto(feed);
254244
}
255245

256246
async deleteCheckFeed(feedDeleteCheckDto: FeedDeleteCheckDto) {
257-
const feed = await this.feedRepository.findOneBy({
258-
id: feedDeleteCheckDto.feedId,
259-
});
260-
if (!feed) {
261-
throw new NotFoundException(
262-
`${feedDeleteCheckDto.feedId}번 피드는 존재하지 않습니다.`,
263-
);
264-
}
265-
247+
const feed = await this.getFeed(feedDeleteCheckDto.feedId);
266248
const response = await fetch(feed.path);
267249

268250
if (response.status === HttpStatus.NOT_FOUND) {

server/src/like/service/like.service.ts

Lines changed: 7 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,26 +7,20 @@ import {
77
} from '@nestjs/common';
88
import { LikeRepository } from '../repository/like.repository';
99
import { Payload } from '../../common/guard/jwt.guard';
10-
import { FeedRepository } from '../../feed/repository/feed.repository';
1110
import { FeedLikeRequestDto } from '../dto/request/like.dto';
11+
import { GetLikeResponseDto } from '../dto/response/like.dto';
12+
import { FeedService } from '../../feed/service/feed.service';
1213

1314
@Injectable()
1415
export class LikeService {
1516
constructor(
1617
private readonly likeRepository: LikeRepository,
17-
private readonly feedRepository: FeedRepository,
18+
private readonly feedService: FeedService,
1819
private readonly dataSource: DataSource,
1920
) {}
2021

2122
async get(userInformation: Payload, feedLikeGetDto: FeedLikeRequestDto) {
22-
const feed = await this.feedRepository.findOneBy({
23-
id: feedLikeGetDto.feedId,
24-
});
25-
26-
if (!feed) {
27-
throw new NotFoundException('해당 피드를 찾을 수 없습니다.');
28-
}
29-
23+
await this.feedService.getFeed(feedLikeGetDto.feedId);
3024
let isLike = false;
3125

3226
if (userInformation) {
@@ -37,9 +31,7 @@ export class LikeService {
3731
isLike = !!like;
3832
}
3933

40-
return {
41-
isLike,
42-
};
34+
return GetLikeResponseDto.toResponseDto(isLike);
4335
}
4436

4537
async create(
@@ -51,13 +43,7 @@ export class LikeService {
5143
await queryRunner.startTransaction();
5244

5345
try {
54-
const feed = await this.feedRepository.findOneBy({
55-
id: feedLikeCreateDto.feedId,
56-
});
57-
if (!feed) {
58-
throw new NotFoundException('해당 피드를 찾을 수 없습니다.');
59-
}
60-
46+
const feed = await this.feedService.getFeed(feedLikeCreateDto.feedId);
6147
const existing = await this.likeRepository.findOneBy({
6248
user: { id: userInformation.id },
6349
feed: { id: feedLikeCreateDto.feedId },
@@ -91,13 +77,7 @@ export class LikeService {
9177
await queryRunner.startTransaction();
9278

9379
try {
94-
const feed = await this.feedRepository.findOneBy({
95-
id: feedLikeDeleteDto.feedId,
96-
});
97-
if (!feed) {
98-
throw new NotFoundException('해당 피드를 찾을 수 없습니다.');
99-
}
100-
80+
const feed = await this.feedService.getFeed(feedLikeDeleteDto.feedId);
10181
const existing = await this.likeRepository.findOneBy({
10282
user: { id: userInformation.id },
10383
feed: { id: feedLikeDeleteDto.feedId },

server/src/user/service/user.service.ts

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import { ConfigService } from '@nestjs/config';
1818
import { cookieConfig } from '../../common/cookie/cookie.config';
1919
import { Payload } from '../../common/guard/jwt.guard';
2020
import { UpdateUserDto } from '../dto/request/update-user.dto';
21+
import { CheckEmailDuplicationResponseDto } from '../dto/response/checkEmailDuplication.dto';
2122

2223
@Injectable()
2324
export class UserService {
@@ -29,12 +30,22 @@ export class UserService {
2930
private readonly configService: ConfigService,
3031
) {}
3132

32-
async checkEmailDuplication(email: string): Promise<boolean> {
33+
async getUser(userId: number) {
34+
const user = await this.userRepository.findOneBy({
35+
id: userId,
36+
});
37+
if (!user) {
38+
throw new NotFoundException('존재하지 않는 유저입니다.');
39+
}
40+
return user;
41+
}
42+
43+
async checkEmailDuplication(email: string) {
3344
const user = await this.userRepository.findOne({
3445
where: { email },
3546
});
3647

37-
return !!user;
48+
return CheckEmailDuplicationResponseDto.toResponseDto(!!user);
3849
}
3950

4051
async registerUser(registerDto: RegisterDto): Promise<void> {
@@ -121,10 +132,7 @@ export class UserService {
121132
}
122133

123134
async updateUserActivity(userId: number) {
124-
const user = await this.userRepository.findOneBy({ id: userId });
125-
if (!user) {
126-
throw new NotFoundException(`존재하지 않는 사용자 입니다.`);
127-
}
135+
const user = await this.getUser(userId);
128136

129137
const today = new Date();
130138
today.setHours(0, 0, 0, 0);
@@ -158,20 +166,15 @@ export class UserService {
158166
userId: number,
159167
updateData: Partial<UpdateUserDto>,
160168
): Promise<void> {
161-
const user = await this.userRepository.findOneBy({ id: userId });
162-
if (!user) {
163-
throw new NotFoundException('존재하지 않는 사용자입니다.');
164-
}
165-
166-
if (updateData.userName !== undefined) {
167-
user.userName = updateData.userName;
168-
}
169-
if (updateData.profileImage !== undefined) {
170-
user.profileImage = updateData.profileImage;
171-
}
172-
if (updateData.introduction !== undefined) {
173-
user.introduction = updateData.introduction;
174-
}
169+
const user = await this.getUser(userId);
170+
171+
user.userName = updateData.userName ? updateData.userName : user.userName;
172+
user.profileImage = updateData.profileImage
173+
? updateData.profileImage
174+
: user.profileImage;
175+
user.introduction = updateData.introduction
176+
? updateData.introduction
177+
: user.introduction;
175178

176179
await this.userRepository.save(user);
177180
}

0 commit comments

Comments
 (0)