diff --git a/apps/core/package.json b/apps/core/package.json index 348ff5d8..5e375aed 100644 --- a/apps/core/package.json +++ b/apps/core/package.json @@ -77,7 +77,7 @@ "axios-retry": "3.5.0", "bcrypt": "5.1.0", "cache-manager": "5.2.3", - "cache-manager-ioredis": "2.1.0", + "cache-manager-ioredis-yet": "1.2.2", "class-transformer": "0.5.1", "class-validator": "0.13.2", "class-validator-jsonschema": "npm:@innei/class-validator-jsonschema@3.1.2", diff --git a/apps/core/src/app.module.ts b/apps/core/src/app.module.ts index 197623d3..ff44d593 100644 --- a/apps/core/src/app.module.ts +++ b/apps/core/src/app.module.ts @@ -14,7 +14,6 @@ import { CountingInterceptor } from './common/interceptors/counting.interceptor' import { DbQueryInterceptor } from './common/interceptors/db-query.interceptor' import { IdempotenceInterceptor } from './common/interceptors/idempotence.interceptor' import { JSONTransformInterceptor } from './common/interceptors/json-transform.interceptor' -import { ResponseFilterInterceptor } from './common/interceptors/response-filter.interceptor' import { ResponseInterceptor } from './common/interceptors/response.interceptor' import { AggregateModule } from './modules/aggregate/aggregate.module' import { AnalyzeModule } from './modules/analyze/analyze.module' @@ -111,15 +110,15 @@ import { RedisModule } from './processors/redis/redis.module' provide: APP_INTERCEPTOR, useClass: DbQueryInterceptor, }, - - { - provide: APP_INTERCEPTOR, - useClass: HttpCacheInterceptor, // 5 - }, { provide: APP_INTERCEPTOR, useClass: AnalyzeInterceptor, }, + { + provide: APP_INTERCEPTOR, + useClass: HttpCacheInterceptor, // 5 + }, + { provide: APP_INTERCEPTOR, useClass: CountingInterceptor, // 4 @@ -128,10 +127,7 @@ import { RedisModule } from './processors/redis/redis.module' provide: APP_INTERCEPTOR, useClass: JSONTransformInterceptor, // 3 }, - { - provide: APP_INTERCEPTOR, - useClass: ResponseFilterInterceptor, // 2 - }, + { provide: APP_INTERCEPTOR, useClass: ResponseInterceptor, // 1 diff --git a/apps/core/src/common/decorators/response-filter.decorator.ts b/apps/core/src/common/decorators/response-filter.decorator.ts deleted file mode 100644 index 27228a45..00000000 --- a/apps/core/src/common/decorators/response-filter.decorator.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { FastifyRequest } from 'fastify' - -import { SetMetadata } from '@nestjs/common' - -import { HTTP_RESPONSE_FILTER } from '~/constants/meta.constant' - -export const ResponseFilter: ( - fn: (data: any, request: FastifyRequest & KV, handler: Function) => any, -) => MethodDecorator = (type) => { - return (_, __, descriptor: any) => { - SetMetadata(HTTP_RESPONSE_FILTER, type)(descriptor.value) - } -} diff --git a/apps/core/src/common/interceptors/cache.interceptor.ts b/apps/core/src/common/interceptors/cache.interceptor.ts index c278e463..49f7987b 100644 --- a/apps/core/src/common/interceptors/cache.interceptor.ts +++ b/apps/core/src/common/interceptors/cache.interceptor.ts @@ -64,7 +64,8 @@ export class HttpCacheInterceptor implements NestInterceptor { if (isDisableCache) { return call$ } - const key = this.trackBy(context) || `${API_CACHE_PREFIX}${request.url}` + let key = this.trackBy(context) || `${API_CACHE_PREFIX}${request.url}` + if (request.user?.id) key = `${key}:logged-${request.user?.id}` const metaTTL = this.reflector.get(META.HTTP_CACHE_TTL_METADATA, handler) const ttl = metaTTL || REDIS.httpCacheTTL @@ -80,7 +81,7 @@ export class HttpCacheInterceptor implements NestInterceptor { : call$.pipe( tap( (response) => - response && this.cacheManager.set(key, response, { ttl }), + response && this.cacheManager.set(key, response, ttl * 1000), ), ) } catch (error) { diff --git a/apps/core/src/common/interceptors/response-filter.interceptor.ts b/apps/core/src/common/interceptors/response-filter.interceptor.ts deleted file mode 100644 index f9a80dc3..00000000 --- a/apps/core/src/common/interceptors/response-filter.interceptor.ts +++ /dev/null @@ -1,48 +0,0 @@ -/** - * 对响应体进行数据处理 - * @author Innei - */ -import { isFunction } from 'lodash' -import { map } from 'rxjs' -import type { - CallHandler, - ExecutionContext, - NestInterceptor, -} from '@nestjs/common' -import type { Observable } from 'rxjs' - -import { Injectable } from '@nestjs/common' -import { Reflector } from '@nestjs/core' - -import { HTTP_RESPONSE_FILTER } from '~/constants/meta.constant' - -@Injectable() -export class ResponseFilterInterceptor implements NestInterceptor { - constructor(private readonly reflector: Reflector) {} - intercept(context: ExecutionContext, next: CallHandler): Observable { - const handler = context.getHandler() - - // 请求数据过滤函数 - const responseFilterFn = this.reflector.getAllAndOverride( - HTTP_RESPONSE_FILTER, - [handler], - ) - - if (!isFunction(responseFilterFn)) { - return next.handle() - } - - const http = context.switchToHttp() - const request = http.getRequest() - - if (!http.getRequest()) { - return next.handle() - } - - return next.handle().pipe( - map((data) => { - return responseFilterFn(data, request, handler) - }), - ) - } -} diff --git a/apps/core/src/constants/meta.constant.ts b/apps/core/src/constants/meta.constant.ts index 6f49c743..1a748ae7 100755 --- a/apps/core/src/constants/meta.constant.ts +++ b/apps/core/src/constants/meta.constant.ts @@ -12,5 +12,3 @@ export const CRON_DESCRIPTION = '__cron:description__' export const HTTP_IDEMPOTENCE_OPTIONS = '__idempotence_options__' export const HTTP_IDEMPOTENCE_KEY = '__idempotence_key__' - -export const HTTP_RESPONSE_FILTER = '__response_filter__' diff --git a/apps/core/src/modules/pageproxy/pageproxy.controller.ts b/apps/core/src/modules/pageproxy/pageproxy.controller.ts index 2b9a958f..86e1b576 100644 --- a/apps/core/src/modules/pageproxy/pageproxy.controller.ts +++ b/apps/core/src/modules/pageproxy/pageproxy.controller.ts @@ -131,9 +131,11 @@ export class PageProxyController { }) })() - await this.cacheService.set(getRedisKey(RedisKeys.AdminPage), source.text, { - ttl: 10 * 60, - }) + await this.cacheService.set( + getRedisKey(RedisKeys.AdminPage), + source.text, + 10 * 60 * 1000, + ) const sessionInjectableData = debug === false diff --git a/apps/core/src/modules/serverless/serverless.service.ts b/apps/core/src/modules/serverless/serverless.service.ts index 0330f053..d49b993d 100644 --- a/apps/core/src/modules/serverless/serverless.service.ts +++ b/apps/core/src/modules/serverless/serverless.service.ts @@ -310,9 +310,7 @@ export class ServerlessService implements OnModuleInit { cached ?? (await this.complieTypescriptCode(functionString)) if (!cached && cacheKey) { - await this.cacheService.set(cacheKey, compliedCode, { - ttl: 60 * 10, - }) + await this.cacheService.set(cacheKey, compliedCode, 60 * 10 * 1000) } return await safeEval( diff --git a/apps/core/src/processors/redis/cache.service.ts b/apps/core/src/processors/redis/cache.service.ts index 534484e3..88190a18 100755 --- a/apps/core/src/processors/redis/cache.service.ts +++ b/apps/core/src/processors/redis/cache.service.ts @@ -26,8 +26,10 @@ export class CacheService { private cache!: Cache private logger = new Logger(CacheService.name) + private ioRedis!: Redis constructor(@Inject(CACHE_MANAGER) cache: Cache) { this.cache = cache + this.redisClient.on('ready', () => { this.logger.log('Redis 已准备好!') }) @@ -35,19 +37,15 @@ export class CacheService { private get redisClient(): Redis { // @ts-expect-error - return this.cache.store.getClient() + return this.cache.store.client } public get(key: TCacheKey): TCacheResult { return this.cache.get(key) } - public set( - key: TCacheKey, - value: any, - options?: { ttl: number }, - ): Promise { - return this.cache.set(key, value, options?.ttl) + public set(key: TCacheKey, value: any, milliseconds: number) { + return this.cache.set(key, value, milliseconds) } public getClient() { diff --git a/apps/core/src/processors/redis/redis.config.service.ts b/apps/core/src/processors/redis/redis.config.service.ts index fe3064d5..c486f082 100755 --- a/apps/core/src/processors/redis/redis.config.service.ts +++ b/apps/core/src/processors/redis/redis.config.service.ts @@ -1,10 +1,11 @@ /** * Cache config service. * @file Cache 配置器 - * @module processor/cache/config.service + * @module processor/redis/redis.config.service * @author Surmon + * @author Innei */ -import redisStore from 'cache-manager-ioredis' +import { redisStore } from 'cache-manager-ioredis-yet' import type { CacheModuleOptions, CacheOptionsFactory, diff --git a/package.json b/package.json index ac4f1e9c..87c6cd48 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,6 @@ }, "resolutions": { "semver": "7.5.1", - "cache-manager-ioredis>ioredis": "^5", "pino": "./external/pino", "get-pixels@^3>request": "./external/request", "typescript": "5.1.3" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4f657441..c9a33831 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,7 +6,6 @@ settings: overrides: semver: 7.5.1 - cache-manager-ioredis>ioredis: ^5 pino: ./external/pino get-pixels@^3>request: ./external/request typescript: 5.1.3 @@ -158,9 +157,9 @@ importers: cache-manager: specifier: 5.2.3 version: 5.2.3 - cache-manager-ioredis: - specifier: 2.1.0 - version: 2.1.0 + cache-manager-ioredis-yet: + specifier: 1.2.2 + version: 1.2.2 class-transformer: specifier: 0.5.1 version: 0.5.1 @@ -3997,10 +3996,11 @@ packages: engines: {node: '>=8'} dev: true - /cache-manager-ioredis@2.1.0: - resolution: {integrity: sha512-TCxbp9ceuFveTKWuNaCX8QjoC41rAlHen4s63u9Yd+iXlw3efYmimc/u935PKPxSdhkXpnMes4mxtK3/yb0L4g==} - engines: {node: '>=6.0.0'} + /cache-manager-ioredis-yet@1.2.2: + resolution: {integrity: sha512-o03N/tQxfFONZ1XLGgIxOFHuQQpjpRdnSAL1THG1YWZIVp1JMUfjU3ElSAjFN1LjbJXa55IpC8waG+VEoLUCUw==} + engines: {node: '>= 16.17.0'} dependencies: + cache-manager: 5.2.3 ioredis: 5.3.2 transitivePeerDependencies: - supports-color