mormati-redis 0.1.1 → 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +15 -0
  3. package/dist/index.js.map +1 -1
  4. package/dist/modules/cache/cache.const.d.ts +3 -0
  5. package/dist/modules/cache/cache.const.js +7 -0
  6. package/dist/modules/cache/cache.const.js.map +1 -0
  7. package/dist/modules/cache/cache.controller.d.ts +11 -0
  8. package/dist/modules/cache/cache.controller.js +47 -0
  9. package/dist/modules/cache/cache.controller.js.map +1 -0
  10. package/dist/modules/cache/cache.decorator.d.ts +2 -0
  11. package/dist/modules/cache/cache.decorator.js +8 -0
  12. package/dist/modules/cache/cache.decorator.js.map +1 -0
  13. package/dist/modules/cache/cache.interceptor.d.ts +11 -0
  14. package/dist/modules/cache/cache.interceptor.js +76 -0
  15. package/dist/modules/cache/cache.interceptor.js.map +1 -0
  16. package/dist/modules/cache/cache.module.d.ts +2 -0
  17. package/dist/modules/cache/cache.module.js +32 -0
  18. package/dist/modules/cache/cache.module.js.map +1 -0
  19. package/dist/modules/cache/cache.service.d.ts +24 -0
  20. package/dist/modules/cache/cache.service.js +206 -0
  21. package/dist/modules/cache/cache.service.js.map +1 -0
  22. package/dist/modules/cache/cache.type.d.ts +33 -0
  23. package/dist/modules/cache/cache.type.js +3 -0
  24. package/dist/modules/cache/cache.type.js.map +1 -0
  25. package/dist/modules/cache/cache.utils.d.ts +1 -0
  26. package/dist/modules/cache/cache.utils.js +15 -0
  27. package/dist/modules/cache/cache.utils.js.map +1 -0
  28. package/dist/modules/cache/index.d.ts +8 -0
  29. package/dist/modules/cache/index.js +25 -0
  30. package/dist/modules/cache/index.js.map +1 -0
  31. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  32. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -2,4 +2,5 @@ export { RedisModule } from './modules/redis/redis.module';
2
2
  export { RedisConnection } from './modules/redis/redis.connection';
3
3
  export { RedisService } from './modules/redis/redis.service';
4
4
  export { IRedisModuleAsyncOptions } from './modules/redis/redis.type';
5
+ export * from './modules/cache';
5
6
  export { REDIS_CONFIG_SERVICE } from './const';
package/dist/index.js CHANGED
@@ -1,4 +1,18 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
2
16
  Object.defineProperty(exports, "__esModule", { value: true });
3
17
  exports.REDIS_CONFIG_SERVICE = exports.RedisService = exports.RedisConnection = exports.RedisModule = void 0;
4
18
  var redis_module_1 = require("./modules/redis/redis.module");
@@ -7,6 +21,7 @@ var redis_connection_1 = require("./modules/redis/redis.connection");
7
21
  Object.defineProperty(exports, "RedisConnection", { enumerable: true, get: function () { return redis_connection_1.RedisConnection; } });
8
22
  var redis_service_1 = require("./modules/redis/redis.service");
9
23
  Object.defineProperty(exports, "RedisService", { enumerable: true, get: function () { return redis_service_1.RedisService; } });
24
+ __exportStar(require("./modules/cache"), exports);
10
25
  var const_1 = require("./const");
11
26
  Object.defineProperty(exports, "REDIS_CONFIG_SERVICE", { enumerable: true, get: function () { return const_1.REDIS_CONFIG_SERVICE; } });
12
27
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/redis/src/index.ts"],"names":[],"mappings":";;;AAEA,6DAA2D;AAAlD,2GAAA,WAAW,OAAA;AACpB,qEAAmE;AAA1D,mHAAA,eAAe,OAAA;AACxB,+DAA6D;AAApD,6GAAA,YAAY,OAAA;AAIrB,iCAEiB;AADb,6GAAA,oBAAoB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/redis/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAEA,6DAA2D;AAAlD,2GAAA,WAAW,OAAA;AACpB,qEAAmE;AAA1D,mHAAA,eAAe,OAAA;AACxB,+DAA6D;AAApD,6GAAA,YAAY,OAAA;AAGrB,kDAAgC;AAGhC,iCAEiB;AADb,6GAAA,oBAAoB,OAAA"}
@@ -0,0 +1,3 @@
1
+ export declare const CACHE_CONFIG_KEY = "cache:config";
2
+ export declare const CACHE_HASH_PREFIX = "api:cache";
3
+ export declare const CACHE_DEFAULT_TTL = "no-ttl";
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CACHE_DEFAULT_TTL = exports.CACHE_HASH_PREFIX = exports.CACHE_CONFIG_KEY = void 0;
4
+ exports.CACHE_CONFIG_KEY = 'cache:config';
5
+ exports.CACHE_HASH_PREFIX = 'api:cache';
6
+ exports.CACHE_DEFAULT_TTL = 'no-ttl';
7
+ //# sourceMappingURL=cache.const.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.const.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.const.ts"],"names":[],"mappings":";;;AAAa,QAAA,gBAAgB,GAAG,cAAc,CAAC;AAClC,QAAA,iBAAiB,GAAG,WAAW,CAAC;AAChC,QAAA,iBAAiB,GAAG,QAAQ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { CacheService } from './cache.service';
2
+ import { CacheStats } from './cache.type';
3
+ export declare class CacheController {
4
+ private readonly cacheService;
5
+ constructor(cacheService: CacheService);
6
+ getCacheStats(): CacheStats;
7
+ resetCacheStats(): {
8
+ message: string;
9
+ stats: CacheStats;
10
+ };
11
+ }
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CacheController = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const cache_service_1 = require("./cache.service");
15
+ let CacheController = class CacheController {
16
+ constructor(cacheService) {
17
+ this.cacheService = cacheService;
18
+ }
19
+ getCacheStats() {
20
+ return this.cacheService.getCacheStats();
21
+ }
22
+ resetCacheStats() {
23
+ this.cacheService.resetCacheStats();
24
+ return {
25
+ message: 'Cache statistics have been reset successfully',
26
+ stats: this.cacheService.getCacheStats(),
27
+ };
28
+ }
29
+ };
30
+ exports.CacheController = CacheController;
31
+ __decorate([
32
+ (0, common_1.Get)('stats'),
33
+ __metadata("design:type", Function),
34
+ __metadata("design:paramtypes", []),
35
+ __metadata("design:returntype", Object)
36
+ ], CacheController.prototype, "getCacheStats", null);
37
+ __decorate([
38
+ (0, common_1.Get)('stats/reset'),
39
+ __metadata("design:type", Function),
40
+ __metadata("design:paramtypes", []),
41
+ __metadata("design:returntype", Object)
42
+ ], CacheController.prototype, "resetCacheStats", null);
43
+ exports.CacheController = CacheController = __decorate([
44
+ (0, common_1.Controller)('cache'),
45
+ __metadata("design:paramtypes", [cache_service_1.CacheService])
46
+ ], CacheController);
47
+ //# sourceMappingURL=cache.controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.controller.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAAuD;AACvD,mDAA+C;AAIxC,IAAM,eAAe,GAArB,MAAM,eAAe;IAC1B,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;IAAG,CAAC;IAO3D,aAAa;QACX,OAAO,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;IAC3C,CAAC;IAOD,eAAe;QACb,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,+CAA+C;YACxD,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;SACzC,CAAC;IACJ,CAAC;CACF,CAAA;AAxBY,0CAAe;AAQ1B;IADC,IAAA,YAAG,EAAC,OAAO,CAAC;;;;oDAGZ;AAOD;IADC,IAAA,YAAG,EAAC,aAAa,CAAC;;;;sDAOlB;0BAvBU,eAAe;IAD3B,IAAA,mBAAU,EAAC,OAAO,CAAC;qCAEyB,4BAAY;GAD5C,eAAe,CAwB3B"}
@@ -0,0 +1,2 @@
1
+ import { CacheDecoratorOptions } from './cache.type';
2
+ export declare const UseCache: (options: CacheDecoratorOptions) => import("@nestjs/common").CustomDecorator<string>;
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UseCache = void 0;
4
+ const common_1 = require("@nestjs/common");
5
+ const cache_const_1 = require("./cache.const");
6
+ const UseCache = (options) => (0, common_1.SetMetadata)(cache_const_1.CACHE_CONFIG_KEY, options);
7
+ exports.UseCache = UseCache;
8
+ //# sourceMappingURL=cache.decorator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.decorator.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA6C;AAC7C,+CAAiD;AAa1C,MAAM,QAAQ,GAAG,CAAC,OAA8B,EAAE,EAAE,CACzD,IAAA,oBAAW,EAAC,8BAAgB,EAAE,OAAO,CAAC,CAAC;AAD5B,QAAA,QAAQ,YACoB"}
@@ -0,0 +1,11 @@
1
+ import { NestInterceptor, ExecutionContext, CallHandler } from '@nestjs/common';
2
+ import { Reflector } from '@nestjs/core';
3
+ import { Observable } from 'rxjs';
4
+ import { CacheService } from './cache.service';
5
+ export declare class CacheInterceptor implements NestInterceptor {
6
+ private readonly reflector;
7
+ private readonly cacheService;
8
+ constructor(reflector: Reflector, cacheService: CacheService);
9
+ intercept(context: ExecutionContext, next: CallHandler): Promise<Observable<any>>;
10
+ private setCacheHeader;
11
+ }
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CacheInterceptor = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const core_1 = require("@nestjs/core");
15
+ const rxjs_1 = require("rxjs");
16
+ const operators_1 = require("rxjs/operators");
17
+ const cache_service_1 = require("./cache.service");
18
+ const cache_const_1 = require("./cache.const");
19
+ let CacheInterceptor = class CacheInterceptor {
20
+ constructor(reflector, cacheService) {
21
+ this.reflector = reflector;
22
+ this.cacheService = cacheService;
23
+ }
24
+ async intercept(context, next) {
25
+ const cacheConfig = this.reflector.get(cache_const_1.CACHE_CONFIG_KEY, context.getHandler());
26
+ if (!cacheConfig)
27
+ return next.handle();
28
+ const { service, module, ttl = cache_const_1.CACHE_DEFAULT_TTL } = cacheConfig;
29
+ const request = context.switchToHttp().getRequest();
30
+ const response = context.switchToHttp().getResponse();
31
+ const method = request.method || "";
32
+ const url = request.url || "";
33
+ const headers = request.headers || {};
34
+ const language = headers['accept-language'] || "en";
35
+ const cache = headers['cache'] || "";
36
+ const query = request.query || {};
37
+ const body = request.body || {};
38
+ if (cache == 'no-cache')
39
+ return next.handle();
40
+ const cacheKey = this.cacheService.generateCacheKey({
41
+ service,
42
+ module,
43
+ method,
44
+ url,
45
+ language,
46
+ query,
47
+ body,
48
+ });
49
+ const cacheResult = await this.cacheService.getCacheWithMetadata(cacheKey);
50
+ if (cacheResult && cache != "revalidate-cache") {
51
+ const { data, cachedAt, ttl } = cacheResult;
52
+ this.setCacheHeader(response, { type: 'HIT', ttl });
53
+ return (0, rxjs_1.of)(data);
54
+ }
55
+ this.setCacheHeader(response, { type: 'MISS', ttl });
56
+ return next.handle().pipe((0, operators_1.tap)(async (responseData) => {
57
+ const metaData = {
58
+ ttl,
59
+ cachedAt: Date.now(),
60
+ };
61
+ await this.cacheService.setCacheWithMetadata(cacheKey, responseData, metaData);
62
+ }));
63
+ }
64
+ setCacheHeader(response, options) {
65
+ const { type, ttl } = options;
66
+ response.setHeader('X-Cache', type);
67
+ response.setHeader('X-Cache-Expires-In', ttl.toString());
68
+ }
69
+ };
70
+ exports.CacheInterceptor = CacheInterceptor;
71
+ exports.CacheInterceptor = CacheInterceptor = __decorate([
72
+ (0, common_1.Injectable)(),
73
+ __metadata("design:paramtypes", [core_1.Reflector,
74
+ cache_service_1.CacheService])
75
+ ], CacheInterceptor);
76
+ //# sourceMappingURL=cache.interceptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.interceptor.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.interceptor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare class CacheModule {
2
+ }
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CacheModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const core_1 = require("@nestjs/core");
12
+ const cache_service_1 = require("./cache.service");
13
+ const cache_interceptor_1 = require("./cache.interceptor");
14
+ const cache_controller_1 = require("./cache.controller");
15
+ let CacheModule = class CacheModule {
16
+ };
17
+ exports.CacheModule = CacheModule;
18
+ exports.CacheModule = CacheModule = __decorate([
19
+ (0, common_1.Module)({
20
+ imports: [],
21
+ controllers: [cache_controller_1.CacheController],
22
+ providers: [
23
+ cache_service_1.CacheService,
24
+ {
25
+ provide: core_1.APP_INTERCEPTOR,
26
+ useClass: cache_interceptor_1.CacheInterceptor,
27
+ },
28
+ ],
29
+ exports: [cache_service_1.CacheService],
30
+ })
31
+ ], CacheModule);
32
+ //# sourceMappingURL=cache.module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.module.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,uCAA+C;AAC/C,mDAA+C;AAC/C,2DAAuD;AACvD,yDAAqD;AAc9C,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAI,CAAA;AAAf,kCAAW;sBAAX,WAAW;IAZvB,IAAA,eAAM,EAAC;QACJ,OAAO,EAAE,EAAE;QACX,WAAW,EAAE,CAAC,kCAAe,CAAC;QAC9B,SAAS,EAAE;YACP,4BAAY;YACZ;gBACI,OAAO,EAAE,sBAAe;gBACxB,QAAQ,EAAE,oCAAgB;aAC7B;SACJ;QACD,OAAO,EAAE,CAAC,4BAAY,CAAC;KAC1B,CAAC;GACW,WAAW,CAAI"}
@@ -0,0 +1,24 @@
1
+ import { RedisService } from '@mormati/redis';
2
+ import { CacheKeyProps, CacheMetadata, CacheResultWithMetadata, CacheStats } from './cache.type';
3
+ export declare class CacheService {
4
+ private readonly redisService;
5
+ private readonly hashPrefix;
6
+ private cacheHits;
7
+ private cacheMisses;
8
+ private cacheErrors;
9
+ constructor(redisService: RedisService);
10
+ generateCacheKey(props: CacheKeyProps): string;
11
+ setCache<T>(key: string, data: T): Promise<boolean>;
12
+ getCache<T>(key: string): Promise<T | null>;
13
+ getCacheKeys<T>(pattern: string): Promise<{
14
+ totalKeys: number;
15
+ keys: string[];
16
+ }>;
17
+ deleteCache(keys: string | string[]): Promise<boolean>;
18
+ deleteAllCacheByPattern(pattern: string): Promise<string[]>;
19
+ deleteAllCache(): Promise<string[]>;
20
+ setCacheWithMetadata<T>(key: string, data: T, metaData: CacheMetadata): Promise<boolean>;
21
+ getCacheWithMetadata<T>(key: string): Promise<CacheResultWithMetadata<T> | null>;
22
+ getCacheStats(): CacheStats;
23
+ resetCacheStats(): void;
24
+ }
@@ -0,0 +1,206 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.CacheService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const redis_1 = require("@mormati/redis");
15
+ const cache_utils_1 = require("./cache.utils");
16
+ const cache_const_1 = require("./cache.const");
17
+ let CacheService = class CacheService {
18
+ constructor(redisService) {
19
+ this.redisService = redisService;
20
+ this.hashPrefix = cache_const_1.CACHE_HASH_PREFIX;
21
+ this.cacheHits = 0;
22
+ this.cacheMisses = 0;
23
+ this.cacheErrors = 0;
24
+ }
25
+ generateCacheKey(props) {
26
+ const { service, module, method, url, language, query, body, } = props;
27
+ const hashs = [this.hashPrefix, service, module];
28
+ try {
29
+ if (method)
30
+ hashs.push(method);
31
+ if (url)
32
+ hashs.push(url);
33
+ if (language)
34
+ hashs.push(language);
35
+ if (query && Object.keys(query).length > 0) {
36
+ const queryHash = (0, cache_utils_1.hashObject)(query);
37
+ hashs.push(queryHash);
38
+ }
39
+ if (body && Object.keys(body).length > 0) {
40
+ const bodyHash = (0, cache_utils_1.hashObject)(body);
41
+ hashs.push(bodyHash);
42
+ }
43
+ return hashs.join(':');
44
+ }
45
+ catch (error) {
46
+ console.log("## Error: 'generateCacheKey' in CacheService", error);
47
+ this.cacheErrors++;
48
+ return `${this.hashPrefix}:error:${Date.now()}:${hashs.join(':')}`;
49
+ }
50
+ }
51
+ async setCache(key, data) {
52
+ try {
53
+ const serialized = JSON.stringify(data);
54
+ await this.redisService.set(key, serialized);
55
+ return true;
56
+ }
57
+ catch (error) {
58
+ console.log("## Error: 'setCache' in CacheService", error);
59
+ this.cacheErrors++;
60
+ return false;
61
+ }
62
+ }
63
+ async getCache(key) {
64
+ try {
65
+ const cached = await this.redisService.get(key);
66
+ if (!cached)
67
+ return null;
68
+ return JSON.parse(cached);
69
+ }
70
+ catch (error) {
71
+ console.log("## Error: 'getCache' in CacheService", error);
72
+ this.cacheErrors++;
73
+ return null;
74
+ }
75
+ }
76
+ async getCacheKeys(pattern) {
77
+ const result = {
78
+ totalKeys: 0,
79
+ keys: [],
80
+ };
81
+ try {
82
+ const keys = await this.redisService.keys(pattern);
83
+ const totalKeys = keys.length;
84
+ if (totalKeys == 0)
85
+ return result;
86
+ result.keys = keys;
87
+ result.totalKeys = totalKeys;
88
+ return result;
89
+ }
90
+ catch (error) {
91
+ console.log("## Error: 'getCacheKeys' in CacheService", error);
92
+ this.cacheErrors++;
93
+ return result;
94
+ }
95
+ }
96
+ async deleteCache(keys) {
97
+ try {
98
+ const keyArray = Array.isArray(keys) ? keys : [keys];
99
+ if (keyArray.length === 0) {
100
+ return false;
101
+ }
102
+ for (const key of keyArray) {
103
+ await this.redisService.del(key);
104
+ }
105
+ return true;
106
+ }
107
+ catch (error) {
108
+ console.log("## Error: 'deleteCache' in CacheService", error);
109
+ this.cacheErrors++;
110
+ return false;
111
+ }
112
+ }
113
+ async deleteAllCacheByPattern(pattern) {
114
+ try {
115
+ const hashPattern = `${this.hashPrefix}:${pattern}`;
116
+ const response = await this.getCacheKeys(hashPattern);
117
+ await this.deleteCache(response.keys);
118
+ return response.keys;
119
+ }
120
+ catch (error) {
121
+ console.log("## Error: 'deleteAllCacheByPattern' in CacheService", error);
122
+ this.cacheErrors++;
123
+ return [];
124
+ }
125
+ }
126
+ async deleteAllCache() {
127
+ try {
128
+ const hashPattern = `${this.hashPrefix}:*`;
129
+ const response = await this.getCacheKeys(hashPattern);
130
+ await this.deleteCache(response.keys);
131
+ return response.keys;
132
+ }
133
+ catch (error) {
134
+ console.log("## Error: 'deleteAllCache' in CacheService", error);
135
+ this.cacheErrors++;
136
+ return [];
137
+ }
138
+ }
139
+ async setCacheWithMetadata(key, data, metaData) {
140
+ try {
141
+ const dataWithMetaData = {
142
+ data,
143
+ ...metaData
144
+ };
145
+ return await this.setCache(key, dataWithMetaData);
146
+ }
147
+ catch (error) {
148
+ console.log("## Error: 'setCacheWithMetadata' in CacheService", error);
149
+ this.cacheErrors++;
150
+ return false;
151
+ }
152
+ }
153
+ async getCacheWithMetadata(key) {
154
+ try {
155
+ const dataWithMetaData = await this.getCache(key);
156
+ if (!dataWithMetaData) {
157
+ this.cacheMisses++;
158
+ return null;
159
+ }
160
+ const { data, ...metadata } = dataWithMetaData;
161
+ const ttl = metadata.ttl;
162
+ if (ttl == 'no-ttl') {
163
+ this.cacheHits++;
164
+ return dataWithMetaData;
165
+ }
166
+ const timeElapsed = Math.floor((Date.now() - metadata.cachedAt) / 1000);
167
+ if (!ttl || timeElapsed > ttl) {
168
+ this.cacheMisses++;
169
+ await this.deleteCache(key);
170
+ return null;
171
+ }
172
+ this.cacheHits++;
173
+ dataWithMetaData.ttl = Math.max(0, ttl - timeElapsed);
174
+ return dataWithMetaData;
175
+ }
176
+ catch (error) {
177
+ console.log("## Error: 'getCacheWithMetadata' in CacheService", error);
178
+ this.cacheErrors++;
179
+ return null;
180
+ }
181
+ }
182
+ getCacheStats() {
183
+ const totalRequests = this.cacheHits + this.cacheMisses;
184
+ const missRate = totalRequests > 0 ? this.cacheMisses / totalRequests : 0;
185
+ const hitRate = totalRequests > 0 ? this.cacheHits / totalRequests : 0;
186
+ return {
187
+ totalRequests,
188
+ misses: this.cacheMisses,
189
+ missRate: Math.round(missRate * 10000) / 100,
190
+ hits: this.cacheHits,
191
+ hitRate: Math.round(hitRate * 10000) / 100,
192
+ errors: this.cacheErrors,
193
+ };
194
+ }
195
+ resetCacheStats() {
196
+ this.cacheHits = 0;
197
+ this.cacheMisses = 0;
198
+ this.cacheErrors = 0;
199
+ }
200
+ };
201
+ exports.CacheService = CacheService;
202
+ exports.CacheService = CacheService = __decorate([
203
+ (0, common_1.Injectable)(),
204
+ __metadata("design:paramtypes", [redis_1.RedisService])
205
+ ], CacheService);
206
+ //# sourceMappingURL=cache.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.service.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ export interface CacheDecoratorOptions {
2
+ service: string;
3
+ module: string;
4
+ ttl?: number | 'no-ttl';
5
+ }
6
+ export interface CacheKeyProps {
7
+ service: string;
8
+ module: string;
9
+ method: string;
10
+ url: string;
11
+ language: string;
12
+ query?: Record<string, any>;
13
+ body?: Record<string, any>;
14
+ }
15
+ export interface CacheMetadata {
16
+ cachedAt: number;
17
+ ttl: number | 'no-ttl';
18
+ }
19
+ export interface CacheResultWithMetadata<T = any> extends CacheMetadata {
20
+ data: T;
21
+ }
22
+ export interface CacheStats {
23
+ totalRequests: number;
24
+ misses: number;
25
+ missRate: number;
26
+ hits: number;
27
+ hitRate: number;
28
+ errors: number;
29
+ }
30
+ export interface SetCacheHeaderOption {
31
+ type: 'HIT' | 'MISS';
32
+ ttl: number | 'no-ttl';
33
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=cache.type.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.type.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.type.ts"],"names":[],"mappings":""}
@@ -0,0 +1 @@
1
+ export declare const hashObject: (obj: Record<string, any>) => string;
@@ -0,0 +1,15 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.hashObject = void 0;
4
+ const crypto_1 = require("crypto");
5
+ const hashObject = (obj) => {
6
+ const sortedKeys = Object.keys(obj).sort();
7
+ const parts = sortedKeys.map(key => `${key}=${JSON.stringify(obj[key])}`);
8
+ const str = parts.join('&');
9
+ return (0, crypto_1.createHash)('sha256')
10
+ .update(str)
11
+ .digest('hex')
12
+ .substring(0, 16);
13
+ };
14
+ exports.hashObject = hashObject;
15
+ //# sourceMappingURL=cache.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.utils.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/cache.utils.ts"],"names":[],"mappings":";;;AAAA,mCAAoC;AAM7B,MAAM,UAAU,GAAG,CAAC,GAAwB,EAAU,EAAE;IAE3D,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAG5B,OAAO,IAAA,mBAAU,EAAC,QAAQ,CAAC;SACtB,MAAM,CAAC,GAAG,CAAC;SACX,MAAM,CAAC,KAAK,CAAC;SACb,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC,CAAA;AAXY,QAAA,UAAU,cAWtB"}
@@ -0,0 +1,8 @@
1
+ export * from './cache.module';
2
+ export * from './cache.service';
3
+ export * from './cache.controller';
4
+ export * from './cache.decorator';
5
+ export * from './cache.interceptor';
6
+ export * from './cache.utils';
7
+ export * from './cache.const';
8
+ export * from './cache.type';
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./cache.module"), exports);
18
+ __exportStar(require("./cache.service"), exports);
19
+ __exportStar(require("./cache.controller"), exports);
20
+ __exportStar(require("./cache.decorator"), exports);
21
+ __exportStar(require("./cache.interceptor"), exports);
22
+ __exportStar(require("./cache.utils"), exports);
23
+ __exportStar(require("./cache.const"), exports);
24
+ __exportStar(require("./cache.type"), exports);
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/redis/src/modules/cache/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,kDAAgC;AAChC,qDAAmC;AACnC,oDAAkC;AAClC,sDAAoC;AACpC,gDAA8B;AAC9B,gDAA8B;AAC9B,+CAA6B"}