1
- import { Injectable } from '@nestjs/common' ;
1
+ import { Inject , Injectable } from '@nestjs/common' ;
2
2
import { FivemService } from 'src/fivem/fivem.service' ;
3
3
import { MinecraftService } from 'src/minecraft/minecraft.service' ;
4
4
import { SourceService } from 'src/source/source.service' ;
5
5
import LametricFrameDto from './dto/lametricFrameDto' ;
6
6
import LametricServerCheckedDto from './dto/lametricServerCheckedDto' ;
7
- import { LametricIconServer , LametricServerTypeParams } from 'src/utils/enums' ;
7
+ import {
8
+ CacheKeys ,
9
+ LametricIconServer ,
10
+ LametricServerTypeParams ,
11
+ } from 'src/utils/enums' ;
8
12
import LametricFrameTextDto from './dto/lametricFrameTextDto' ;
13
+ import { Cache , CACHE_MANAGER } from '@nestjs/cache-manager' ;
9
14
10
15
@Injectable ( )
11
16
export class LametricService {
12
17
constructor (
18
+ @Inject ( CACHE_MANAGER ) private cacheManager : Cache ,
13
19
private readonly minecraftService : MinecraftService ,
14
20
private readonly sourceService : SourceService ,
15
21
private readonly fivemService : FivemService ,
@@ -30,6 +36,16 @@ export class LametricService {
30
36
this . fivemService . trackServerByCfx ( { code : code } ) ,
31
37
} ;
32
38
39
+ readonly cacheDict : {
40
+ [ id in LametricServerTypeParams ] : string ;
41
+ } = {
42
+ Minecraft : CacheKeys . Minecraft ,
43
+ MinecraftBedrock : CacheKeys . MinecraftBedrock ,
44
+ Source : CacheKeys . Source ,
45
+ FiveM : CacheKeys . FiveM ,
46
+ FiveMCfxCode : CacheKeys . FiveMCfxCode ,
47
+ } ;
48
+
33
49
readonly serverIconDict : {
34
50
[ serverType in LametricServerTypeParams ] : LametricIconServer ;
35
51
} = {
@@ -44,13 +60,24 @@ export class LametricService {
44
60
serverChecked : LametricServerCheckedDto ,
45
61
) : Promise < LametricFrameDto > {
46
62
const icon : LametricIconServer = this . serverIconDict [ serverChecked . type ] ;
63
+ const cache : any = await this . cacheManager . get (
64
+ `${ this . cacheDict [ serverChecked . type ] } :${ serverChecked . address } ` ,
65
+ ) ;
47
66
const frame : LametricFrameDto = {
48
67
frames : [ new LametricFrameTextDto ( serverChecked . name , icon ) ] ,
49
68
} ;
69
+ let result : any ;
50
70
51
- let result = await this . actionDict [ serverChecked . type ] (
52
- serverChecked . address ,
53
- ) ;
71
+ if ( cache ) {
72
+ result = cache ;
73
+ } else {
74
+ result = await this . actionDict [ serverChecked . type ] ( serverChecked . address ) ;
75
+ this . cacheManager . set (
76
+ `${ this . cacheDict [ serverChecked . type ] } :${ serverChecked . address } ` ,
77
+ result ,
78
+ 5 * 60 * 1000 ,
79
+ ) ;
80
+ }
54
81
if ( ! result . online ) {
55
82
frame . frames . push ( new LametricFrameTextDto ( 'OFFLINE' , icon ) ) ;
56
83
return frame ;
0 commit comments