11import logger from '@/configs/logger.config' ;
22import { LeaderboardRepository } from '@/repositories/leaderboard.repository' ;
3- import { LeaderboardResponseData } from '@/types/dto/responses/leaderboardResponse.type' ;
3+ import {
4+ LeaderboardPostType ,
5+ LeaderboardResponseData ,
6+ LeaderboardUserType ,
7+ } from '@/types/dto/responses/leaderboardResponse.type' ;
48
59export class LeaderboardService {
610 constructor ( private leaderboardRepo : LeaderboardRepository ) { }
@@ -23,32 +27,58 @@ export class LeaderboardService {
2327 }
2428
2529 private mapRawResultToLeaderboardResponseData ( rawResult : unknown [ ] , type : string ) : LeaderboardResponseData {
26- const result = { posts : null , users : null } ;
30+ const result : LeaderboardResponseData = { posts : null , users : null } ;
2731
2832 if ( type === 'post' ) {
29- result . posts = rawResult . map ( ( post ) => ( {
30- id : post . id ,
31- title : post . title ,
32- slug : post . slug ,
33- totalViews : post . total_views ,
34- totalLikes : post . total_likes ,
35- viewDiff : post . view_diff ,
36- likeDiff : post . like_diff ,
37- releasedAt : post . released_at ,
38- } ) ) ;
33+ result . posts = ( rawResult as RawPostResult [ ] ) . map (
34+ ( post ) : LeaderboardPostType => ( {
35+ id : post . id ,
36+ title : post . title ,
37+ slug : post . slug ,
38+ totalViews : post . total_views ,
39+ totalLikes : post . total_likes ,
40+ viewDiff : post . view_diff ,
41+ likeDiff : post . like_diff ,
42+ releasedAt : post . released_at ,
43+ } ) ,
44+ ) ;
3945 } else {
40- result . users = rawResult . map ( ( user ) => ( {
41- id : user . id ,
42- email : user . email ,
43- totalViews : user . total_views ,
44- totalLikes : user . total_likes ,
45- totalPosts : user . total_posts ,
46- viewDiff : user . view_diff ,
47- likeDiff : user . like_diff ,
48- postDiff : user . post_diff ,
49- } ) ) ;
46+ result . users = ( rawResult as RawUserResult [ ] ) . map (
47+ ( user ) : LeaderboardUserType => ( {
48+ id : user . id ,
49+ email : user . email ,
50+ totalViews : user . total_views ,
51+ totalLikes : user . total_likes ,
52+ totalPosts : user . total_posts ,
53+ viewDiff : user . view_diff ,
54+ likeDiff : user . like_diff ,
55+ postDiff : user . post_diff ,
56+ } ) ,
57+ ) ;
5058 }
5159
5260 return result ;
5361 }
5462}
63+
64+ interface RawPostResult {
65+ id : number ;
66+ title : string ;
67+ slug : string ;
68+ total_views : number ;
69+ total_likes : number ;
70+ view_diff : number ;
71+ like_diff : number ;
72+ released_at : string ;
73+ }
74+
75+ interface RawUserResult {
76+ id : number ;
77+ email : string ;
78+ total_views : number ;
79+ total_likes : number ;
80+ total_posts : number ;
81+ view_diff : number ;
82+ like_diff : number ;
83+ post_diff : number ;
84+ }
0 commit comments