Skip to content

Commit c3cf578

Browse files
committed
modify: number로의 형 변환을 서비스 계층에서 수행하도록 수정
1 parent eba00ee commit c3cf578

File tree

3 files changed

+69
-69
lines changed

3 files changed

+69
-69
lines changed

src/repositories/__test__/leaderboard.repo.integration.test.ts

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ describe('LeaderboardRepository 통합 테스트', () => {
8686
});
8787

8888
describe('getUserLeaderboard', () => {
89-
it('사용자 통계 배열로 이루어진 리더보드를 반환해야 한다', async () => {
89+
it('사용자 통계 배열로 이루어진 리더보드를 반환해야 하며, 통계 값은 음수가 아니어야 한다', async () => {
9090
const result = await repo.getUserLeaderboard(
9191
DEFAULT_PARAMS.USER_SORT,
9292
DEFAULT_PARAMS.DATE_RANGE,
@@ -98,14 +98,14 @@ describe('LeaderboardRepository 통합 테스트', () => {
9898
if (!isEnoughData(result, 1, '사용자 리더보드 반환값')) return;
9999

100100
result.forEach((leaderboardUser) => {
101-
expect(typeof leaderboardUser.id).toEqual('string');
102-
expect(typeof leaderboardUser.email).toEqual('string');
103-
expect(typeof leaderboardUser.total_views).toEqual('number');
104-
expect(typeof leaderboardUser.total_likes).toEqual('number');
105-
expect(typeof leaderboardUser.total_posts).toEqual('number');
106-
expect(typeof leaderboardUser.view_diff).toEqual('number');
107-
expect(typeof leaderboardUser.like_diff).toEqual('number');
108-
expect(typeof leaderboardUser.post_diff).toEqual('number');
101+
expect(leaderboardUser).toHaveProperty('id');
102+
expect(leaderboardUser).toHaveProperty('email');
103+
expect(leaderboardUser).toHaveProperty('total_views');
104+
expect(leaderboardUser).toHaveProperty('total_likes');
105+
expect(leaderboardUser).toHaveProperty('total_posts');
106+
expect(leaderboardUser).toHaveProperty('view_diff');
107+
expect(leaderboardUser).toHaveProperty('like_diff');
108+
expect(leaderboardUser).toHaveProperty('post_diff');
109109
});
110110
});
111111

@@ -119,12 +119,12 @@ describe('LeaderboardRepository 통합 테스트', () => {
119119
if (!isEnoughData(result, 1, '사용자 리더보드 반환값')) return;
120120

121121
result.forEach((leaderboardUser) => {
122-
expect(leaderboardUser.total_views).toBeGreaterThanOrEqual(0);
123-
expect(leaderboardUser.total_likes).toBeGreaterThanOrEqual(0);
124-
expect(leaderboardUser.total_posts).toBeGreaterThanOrEqual(0);
125-
expect(leaderboardUser.view_diff).toBeGreaterThanOrEqual(0);
126-
expect(leaderboardUser.like_diff).toBeGreaterThanOrEqual(0);
127-
expect(leaderboardUser.post_diff).toBeGreaterThanOrEqual(0);
122+
expect(Number(leaderboardUser.total_views)).toBeGreaterThanOrEqual(0);
123+
expect(Number(leaderboardUser.total_likes)).toBeGreaterThanOrEqual(0);
124+
expect(Number(leaderboardUser.total_posts)).toBeGreaterThanOrEqual(0);
125+
expect(Number(leaderboardUser.view_diff)).toBeGreaterThanOrEqual(0);
126+
expect(Number(leaderboardUser.like_diff)).toBeGreaterThanOrEqual(0);
127+
expect(Number(leaderboardUser.post_diff)).toBeGreaterThanOrEqual(0);
128128
});
129129
});
130130

@@ -144,7 +144,7 @@ describe('LeaderboardRepository 통합 테스트', () => {
144144

145145
const isSorted = result.every((leaderboardUser, idx) => {
146146
if (idx === 0) return true;
147-
return leaderboardUser[field] <= result[idx - 1][field];
147+
return Number(leaderboardUser[field]) <= Number(result[idx - 1][field]);
148148
});
149149

150150
expect(isSorted).toBe(true);
@@ -233,14 +233,14 @@ describe('LeaderboardRepository 통합 테스트', () => {
233233
if (!isEnoughData(result, 1, '게시물 리더보드 반환값')) return;
234234

235235
result.forEach((leaderboardPost) => {
236-
expect(typeof leaderboardPost.id).toEqual('string');
237-
expect(typeof leaderboardPost.title).toEqual('string');
238-
expect(typeof leaderboardPost.slug).toEqual('string');
239-
expect(typeof leaderboardPost.total_views).toEqual('number');
240-
expect(typeof leaderboardPost.total_likes).toEqual('number');
241-
expect(typeof leaderboardPost.view_diff).toEqual('number');
242-
expect(typeof leaderboardPost.like_diff).toEqual('number');
243-
expect(typeof leaderboardPost.released_at).toEqual('object');
236+
expect(leaderboardPost).toHaveProperty('id');
237+
expect(leaderboardPost).toHaveProperty('title');
238+
expect(leaderboardPost).toHaveProperty('slug');
239+
expect(leaderboardPost).toHaveProperty('total_views');
240+
expect(leaderboardPost).toHaveProperty('total_likes');
241+
expect(leaderboardPost).toHaveProperty('view_diff');
242+
expect(leaderboardPost).toHaveProperty('like_diff');
243+
expect(leaderboardPost).toHaveProperty('released_at');
244244
});
245245
});
246246

@@ -254,10 +254,10 @@ describe('LeaderboardRepository 통합 테스트', () => {
254254
if (!isEnoughData(result, 1, '게시물 리더보드 반환값')) return;
255255

256256
result.forEach((leaderboardPost) => {
257-
expect(leaderboardPost.total_views).toBeGreaterThanOrEqual(0);
258-
expect(leaderboardPost.total_likes).toBeGreaterThanOrEqual(0);
259-
expect(leaderboardPost.view_diff).toBeGreaterThanOrEqual(0);
260-
expect(leaderboardPost.like_diff).toBeGreaterThanOrEqual(0);
257+
expect(Number(leaderboardPost.total_views)).toBeGreaterThanOrEqual(0);
258+
expect(Number(leaderboardPost.total_likes)).toBeGreaterThanOrEqual(0);
259+
expect(Number(leaderboardPost.view_diff)).toBeGreaterThanOrEqual(0);
260+
expect(Number(leaderboardPost.like_diff)).toBeGreaterThanOrEqual(0);
261261
});
262262
});
263263

@@ -276,7 +276,7 @@ describe('LeaderboardRepository 통합 테스트', () => {
276276

277277
const isSorted = result.every((leaderboardPost, idx) => {
278278
if (idx === 0) return true;
279-
return leaderboardPost[field] <= result[idx - 1][field];
279+
return Number(leaderboardPost[field]) <= Number(result[idx - 1][field]);
280280
});
281281

282282
expect(isSorted).toBe(true);

src/services/__test__/leaderboard.service.test.ts

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,22 +30,22 @@ describe('LeaderboardService', () => {
3030
{
3131
id: '1',
3232
33-
total_views: 100,
34-
total_likes: 50,
35-
total_posts: 1,
36-
view_diff: 20,
37-
like_diff: 10,
38-
post_diff: 1,
33+
total_views: '100',
34+
total_likes: '50',
35+
total_posts: '1',
36+
view_diff: '20',
37+
like_diff: '10',
38+
post_diff: '1',
3939
},
4040
{
4141
id: '2',
4242
43-
total_views: 200,
44-
total_likes: 100,
45-
total_posts: 2,
46-
view_diff: 10,
47-
like_diff: 5,
48-
post_diff: 1,
43+
total_views: '200',
44+
total_likes: '100',
45+
total_posts: '2',
46+
view_diff: '10',
47+
like_diff: '5',
48+
post_diff: '1',
4949
},
5050
];
5151

@@ -121,20 +121,20 @@ describe('LeaderboardService', () => {
121121
id: '1',
122122
title: 'test',
123123
slug: 'test-slug',
124-
total_views: 100,
125-
total_likes: 50,
126-
view_diff: 20,
127-
like_diff: 10,
124+
total_views: '100',
125+
total_likes: '50',
126+
view_diff: '20',
127+
like_diff: '10',
128128
released_at: '2025-01-01',
129129
},
130130
{
131131
id: '2',
132132
title: 'test2',
133133
slug: 'test2-slug',
134-
total_views: 200,
135-
total_likes: 100,
136-
view_diff: 10,
137-
like_diff: 5,
134+
total_views: '200',
135+
total_likes: '100',
136+
view_diff: '10',
137+
like_diff: '5',
138138
released_at: '2025-01-02',
139139
},
140140
];

src/services/leaderboard.service.ts

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,12 @@ export class LeaderboardService {
4242
const users = rawResult.map((user) => ({
4343
id: user.id,
4444
email: user.email,
45-
totalViews: user.total_views,
46-
totalLikes: user.total_likes,
47-
totalPosts: user.total_posts,
48-
viewDiff: user.view_diff,
49-
likeDiff: user.like_diff,
50-
postDiff: user.post_diff,
45+
totalViews: Number(user.total_views),
46+
totalLikes: Number(user.total_likes),
47+
totalPosts: Number(user.total_posts),
48+
viewDiff: Number(user.view_diff),
49+
likeDiff: Number(user.like_diff),
50+
postDiff: Number(user.post_diff),
5151
}));
5252

5353
return { users };
@@ -58,10 +58,10 @@ export class LeaderboardService {
5858
id: post.id,
5959
title: post.title,
6060
slug: post.slug,
61-
totalViews: post.total_views,
62-
totalLikes: post.total_likes,
63-
viewDiff: post.view_diff,
64-
likeDiff: post.like_diff,
61+
totalViews: Number(post.total_views),
62+
totalLikes: Number(post.total_likes),
63+
viewDiff: Number(post.view_diff),
64+
likeDiff: Number(post.like_diff),
6565
releasedAt: post.released_at,
6666
}));
6767

@@ -73,20 +73,20 @@ interface RawPostResult {
7373
id: string;
7474
title: string;
7575
slug: string;
76-
total_views: number;
77-
total_likes: number;
78-
view_diff: number;
79-
like_diff: number;
76+
total_views: string;
77+
total_likes: string;
78+
view_diff: string;
79+
like_diff: string;
8080
released_at: string;
8181
}
8282

8383
interface RawUserResult {
8484
id: string;
8585
email: string;
86-
total_views: number;
87-
total_likes: number;
88-
total_posts: number;
89-
view_diff: number;
90-
like_diff: number;
91-
post_diff: number;
86+
total_views: string;
87+
total_likes: string;
88+
total_posts: string;
89+
view_diff: string;
90+
like_diff: string;
91+
post_diff: string;
9292
}

0 commit comments

Comments
 (0)