@@ -2,41 +2,40 @@ import logger from '@/configs/logger.config';
22import { SvgBadgeType , BadgeData } from '@/types' ;
33import { LeaderboardRepository } from '@/repositories/leaderboard.repository' ;
44
5+ const safeNumber = ( value : any , defaultValue : number = 0 ) : number => {
6+ const num = Number ( value ) ;
7+ return isNaN ( num ) ? defaultValue : num ;
8+ } ;
9+
510export class SvgService {
6- constructor ( private leaderboardRepo : LeaderboardRepository ) { }
11+ constructor ( private leaderboardRepo : LeaderboardRepository ) { }
712
8- async getBadgeData (
9- username : string ,
10- type : SvgBadgeType ,
11- dateRange : number = 30 ,
12- ) : Promise < BadgeData > {
13- try {
14- const userStats = await this . leaderboardRepo . getUserStats ( username , dateRange ) ;
15- const recentPosts = type === 'default'
16- ? await this . leaderboardRepo . getRecentPosts ( username , dateRange , 3 )
17- : [ ] ;
13+ async getBadgeData ( username : string , type : SvgBadgeType , dateRange : number = 30 ) : Promise < BadgeData > {
14+ try {
15+ const userStats = await this . leaderboardRepo . getUserStats ( username , dateRange ) ;
16+ const recentPosts = type === 'default' ? await this . leaderboardRepo . getRecentPosts ( username , dateRange , 3 ) : [ ] ;
1817
19- return {
20- user : {
21- username : userStats . username ,
22- totalViews : Number ( userStats . total_views ) ,
23- totalLikes : Number ( userStats . total_likes ) ,
24- totalPosts : Number ( userStats . total_posts ) ,
25- viewDiff : Number ( userStats . view_diff ) ,
26- likeDiff : Number ( userStats . like_diff ) ,
27- postDiff : Number ( userStats . post_diff ) ,
28- } ,
29- recentPosts : recentPosts . map ( post => ( {
30- title : post . title ,
31- releasedAt : post . released_at ,
32- viewCount : Number ( post . today_view ) ,
33- likeCount : Number ( post . today_like ) ,
34- viewDiff : Number ( post . view_diff ) ,
35- } ) )
36- } ;
37- } catch ( error ) {
38- logger . error ( 'SvgService getBadgeData error: ' , error ) ;
39- throw error ;
40- }
18+ return {
19+ user : {
20+ username : userStats . username ,
21+ totalViews : safeNumber ( userStats . total_views ) ,
22+ totalLikes : safeNumber ( userStats . total_likes ) ,
23+ totalPosts : safeNumber ( userStats . total_posts ) ,
24+ viewDiff : safeNumber ( userStats . view_diff ) ,
25+ likeDiff : safeNumber ( userStats . like_diff ) ,
26+ postDiff : safeNumber ( userStats . post_diff ) ,
27+ } ,
28+ recentPosts : recentPosts . map ( ( post ) => ( {
29+ title : post . title ,
30+ releasedAt : post . released_at ,
31+ viewCount : safeNumber ( post . today_view ) ,
32+ likeCount : safeNumber ( post . today_like ) ,
33+ viewDiff : safeNumber ( post . view_diff ) ,
34+ } ) ) ,
35+ } ;
36+ } catch ( error ) {
37+ logger . error ( 'SvgService getBadgeData error: ' , error ) ;
38+ throw error ;
4139 }
40+ }
4241}
0 commit comments