From 1b82ba93e848d68652f771b537c21ac48690b782 Mon Sep 17 00:00:00 2001 From: barel-mishal Date: Thu, 16 May 2024 00:27:47 +0300 Subject: [PATCH 1/4] add functions --- src/leaderboard/leaderboard.service.ts | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/leaderboard/leaderboard.service.ts b/src/leaderboard/leaderboard.service.ts index 0333c53..d5c5ef9 100644 --- a/src/leaderboard/leaderboard.service.ts +++ b/src/leaderboard/leaderboard.service.ts @@ -2,11 +2,10 @@ import { AnalyticsDto } from '@/common/dto/leaderboard'; import getLeaderBoardDataFROMJSON from '@/common/utils/getLeaderBoardDataFROMJSON'; import { LeaderboardTypeAnalytics } from '@/types/leaderboard'; import { Injectable, OnModuleInit } from '@nestjs/common'; +import { Cron, CronExpression } from '@nestjs/schedule'; @Injectable() export class LeaderboardService implements OnModuleInit { - onModuleInit() {} - async getLeaderboardData(): Promise { const since = '2024-01-05T00:00:00Z'; const until = '2024-04-12T00:00:00Z'; @@ -16,4 +15,18 @@ export class LeaderboardService implements OnModuleInit { until, } as LeaderboardTypeAnalytics; } + + async onModuleInit(): Promise { + await this.handleCron(); + } + + @Cron(CronExpression.EVERY_10_MINUTES) + async handleCron() { + // Implement a delete function to delete old data 6 weeks or older + await this.saveLeaderboard(); + } + + private async saveLeaderboard() { + // Implement this + } } From 44cc854cd200a920e030d04bdff3a6dc83f41fec Mon Sep 17 00:00:00 2001 From: barel-mishal Date: Thu, 16 May 2024 00:33:20 +0300 Subject: [PATCH 2/4] add function to save to the database --- src/leaderboard/leaderboard.service.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/leaderboard/leaderboard.service.ts b/src/leaderboard/leaderboard.service.ts index d5c5ef9..cd6f548 100644 --- a/src/leaderboard/leaderboard.service.ts +++ b/src/leaderboard/leaderboard.service.ts @@ -1,11 +1,22 @@ import { AnalyticsDto } from '@/common/dto/leaderboard'; +import { + Leaderboard, + LeaderboardDocument, +} from '@/common/mongoose/schemas/leaderboard'; import getLeaderBoardDataFROMJSON from '@/common/utils/getLeaderBoardDataFROMJSON'; import { LeaderboardTypeAnalytics } from '@/types/leaderboard'; import { Injectable, OnModuleInit } from '@nestjs/common'; +import { InjectModel } from '@nestjs/mongoose'; import { Cron, CronExpression } from '@nestjs/schedule'; +import { Model } from 'mongoose'; @Injectable() export class LeaderboardService implements OnModuleInit { + constructor( + @InjectModel(Leaderboard.name) + private readonly languageModel: Model, + ) {} + async getLeaderboardData(): Promise { const since = '2024-01-05T00:00:00Z'; const until = '2024-04-12T00:00:00Z'; From ce4f1fc71522e8cbd2f89ad92bad2259acfb0c02 Mon Sep 17 00:00:00 2001 From: barel-mishal Date: Thu, 16 May 2024 08:37:42 +0300 Subject: [PATCH 3/4] make --- src/leaderboard/leaderboard.service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/leaderboard/leaderboard.service.ts b/src/leaderboard/leaderboard.service.ts index cd6f548..69a5539 100644 --- a/src/leaderboard/leaderboard.service.ts +++ b/src/leaderboard/leaderboard.service.ts @@ -33,6 +33,7 @@ export class LeaderboardService implements OnModuleInit { @Cron(CronExpression.EVERY_10_MINUTES) async handleCron() { + console.log('Running fetch and store leaderboard cron job'); // Implement a delete function to delete old data 6 weeks or older await this.saveLeaderboard(); } From 43fcda51a9ce5d11ccb7717be742b4d557d23572 Mon Sep 17 00:00:00 2001 From: barel-mishal Date: Thu, 16 May 2024 08:54:53 +0300 Subject: [PATCH 4/4] chore: Refactor leaderboard service to use async/await for fetching JSON data --- src/leaderboard/leaderboard.service.ts | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/leaderboard/leaderboard.service.ts b/src/leaderboard/leaderboard.service.ts index 69a5539..9f2f645 100644 --- a/src/leaderboard/leaderboard.service.ts +++ b/src/leaderboard/leaderboard.service.ts @@ -1,21 +1,12 @@ import { AnalyticsDto } from '@/common/dto/leaderboard'; -import { - Leaderboard, - LeaderboardDocument, -} from '@/common/mongoose/schemas/leaderboard'; import getLeaderBoardDataFROMJSON from '@/common/utils/getLeaderBoardDataFROMJSON'; import { LeaderboardTypeAnalytics } from '@/types/leaderboard'; import { Injectable, OnModuleInit } from '@nestjs/common'; -import { InjectModel } from '@nestjs/mongoose'; import { Cron, CronExpression } from '@nestjs/schedule'; -import { Model } from 'mongoose'; @Injectable() export class LeaderboardService implements OnModuleInit { - constructor( - @InjectModel(Leaderboard.name) - private readonly languageModel: Model, - ) {} + constructor() {} // private readonly leaderboard: Model<>, // @InjectModel(Leaderboard.name) async getLeaderboardData(): Promise { const since = '2024-01-05T00:00:00Z';