File size: 3,461 Bytes
303c85f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
"use strict";
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    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;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
    return function (target, key) { decorator(target, key, paramIndex); }
};
var CacheService_1;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CacheService = void 0;
const common_1 = require("@nestjs/common");
const common_2 = require("@nestjs/common");
const redis_constants_1 = require("../redis.constants");
let CacheService = CacheService_1 = class CacheService {
    logger = new common_1.Logger(CacheService_1.name);
    PREFIX = "mic:cache:";
    redis = null;
    constructor(redisClient) {
        this.redis = redisClient;
    }
    onModuleInit() {
        this.logger.log("CacheService initialized (Redis-backed)");
    }
    onModuleDestroy() {
        this.redis = null;
    }
    key(name, ...parts) {
        return this.PREFIX + [name, ...parts.map(String).filter(Boolean)].join(":");
    }
    async get(name, ...parts) {
        if (!this.redis)
            return null;
        try {
            const raw = await this.redis.get(this.key(name, ...parts));
            if (!raw)
                return null;
            return JSON.parse(raw);
        }
        catch (err) {
            this.logger.warn(`Cache get failed for ${this.key(name, ...parts)}: ${err.message}`);
            return null;
        }
    }
    async set(name, value, parts = [], ttlSeconds = 300) {
        if (!this.redis)
            return;
        try {
            await this.redis.setEx(this.key(name, ...parts), ttlSeconds, JSON.stringify(value));
        }
        catch (err) {
            this.logger.warn(`Cache set failed for ${this.key(name, ...parts)}: ${err.message}`);
        }
    }
    async del(name, ...parts) {
        if (!this.redis)
            return;
        try {
            await this.redis.del(this.key(name, ...parts));
        }
        catch (err) {
            this.logger.warn(`Cache del failed for ${this.key(name, ...parts)}: ${err.message}`);
        }
    }
    async delPattern(pattern) {
        if (!this.redis)
            return;
        try {
            const keys = await this.redis.keys(this.PREFIX + pattern);
            if (keys.length > 0) {
                await this.redis.del(keys);
            }
        }
        catch (err) {
            this.logger.warn(`Cache delPattern failed for ${pattern}: ${err.message}`);
        }
    }
};
exports.CacheService = CacheService;
exports.CacheService = CacheService = CacheService_1 = __decorate([
    (0, common_1.Injectable)(),
    __param(0, (0, common_2.Inject)(redis_constants_1.REDIS_CLIENT)),
    __metadata("design:paramtypes", [Object])
], CacheService);
//# sourceMappingURL=cache.service.js.map