From 4776de6bbea13debfa87f5ba16b25550fddd333f Mon Sep 17 00:00:00 2001 From: Innei Date: Sat, 23 Mar 2024 11:53:51 +0800 Subject: [PATCH] fix: serverless update Signed-off-by: Innei --- apps/core/src/constants/cache.constant.ts | 3 +- .../serverless/serverless.controller.ts | 11 +++- .../modules/serverless/serverless.service.ts | 55 ++++++++++--------- .../core/src/modules/snippet/snippet.model.ts | 2 +- 4 files changed, 40 insertions(+), 31 deletions(-) diff --git a/apps/core/src/constants/cache.constant.ts b/apps/core/src/constants/cache.constant.ts index 485e7183..18d711d0 100644 --- a/apps/core/src/constants/cache.constant.ts +++ b/apps/core/src/constants/cache.constant.ts @@ -37,4 +37,5 @@ export enum CacheKeys { RSSXml = `${API_CACHE_PREFIX}rss_xml`, } -export const SERVERLESS_COMPLIE_CACHE_TTL = 60 * 10 // 10 分钟 +// 30 days +export const SERVERLESS_COMPLIE_CACHE_TTL = 60 * 60 * 24 * 30 diff --git a/apps/core/src/modules/serverless/serverless.controller.ts b/apps/core/src/modules/serverless/serverless.controller.ts index e7f31c03..9ba28efa 100644 --- a/apps/core/src/modules/serverless/serverless.controller.ts +++ b/apps/core/src/modules/serverless/serverless.controller.ts @@ -88,7 +88,14 @@ export class ServerlessController { name, reference, type: SnippetType.Function, - method: requestMethod, + $or: [ + { + method: 'ALL', + }, + { + method: requestMethod, + }, + ], }) .select('+secret') .lean({ @@ -101,7 +108,7 @@ export class ServerlessController { throw new NotFoundException(notExistMessage) } - if (snippet.method !== requestMethod || !snippet.enable) { + if (!snippet.enable) { throw new NotFoundException(notExistMessage) } diff --git a/apps/core/src/modules/serverless/serverless.service.ts b/apps/core/src/modules/serverless/serverless.service.ts index 5ef432e7..dedc87b3 100644 --- a/apps/core/src/modules/serverless/serverless.service.ts +++ b/apps/core/src/modules/serverless/serverless.service.ts @@ -100,30 +100,27 @@ export class ServerlessService implements OnModuleInit { return this.snippetModel } - private mockStorageCache() { - return { - get: async (key: string) => { - const client = this.cacheService.getClient() - return client - .get(getRedisKey(RedisKeys.ServerlessStorage, key)) - .then((string) => { - if (!string) return null - return JSON.safeParse(string) - }) - }, - set: async (key: string, value: object | string, ttl?: string) => { - const client = this.cacheService.getClient() - const cacheKey = getRedisKey(RedisKeys.ServerlessStorage, key) - await client.set(cacheKey, JSON.stringify(value)) - await client.expire(cacheKey, ttl || 60 * 60 * 24 * 7) - }, - del: async (key: string) => { - const client = this.cacheService.getClient() - return client.hdel(getRedisKey(RedisKeys.ServerlessStorage), key) - }, - } as const - } - + private mockStorageCache = Object.freeze({ + get: async (key: string) => { + const client = this.cacheService.getClient() + return client + .get(getRedisKey(RedisKeys.ServerlessStorage, key)) + .then((string) => { + if (!string) return null + return JSON.safeParse(string) + }) + }, + set: async (key: string, value: object | string, ttl?: string) => { + const client = this.cacheService.getClient() + const cacheKey = getRedisKey(RedisKeys.ServerlessStorage, key) + await client.set(cacheKey, JSON.stringify(value)) + await client.expire(cacheKey, ttl || 60 * 60 * 24 * 7) + }, + del: async (key: string) => { + const client = this.cacheService.getClient() + return client.hdel(getRedisKey(RedisKeys.ServerlessStorage), key) + }, + }) private async mockGetMaster() { const collection = this.databaseService.db.collection('users') const cur = collection.aggregate([ @@ -460,7 +457,10 @@ export class ServerlessService implements OnModuleInit { private async createScopeContext( scope: string, - context: any, + context: { + req: FunctionContextRequest + res: FunctionContextResponse + }, model: SnippetModel, logger: Logger, ) { @@ -480,7 +480,8 @@ export class ServerlessService implements OnModuleInit { query: context.req.query, headers: context.req.headers, // TODO wildcard params - params: { ...context.req.params }, + params: context.req.params || {}, + method: context.req.method, secret: secretObj, @@ -507,7 +508,7 @@ export class ServerlessService implements OnModuleInit { ...requestContext, storage: { - cache: this.mockStorageCache(), + cache: this.mockStorageCache, db: this.mockDb( `${model.reference || '#########debug######'}@${model.name}`, ), diff --git a/apps/core/src/modules/snippet/snippet.model.ts b/apps/core/src/modules/snippet/snippet.model.ts index 401204fc..507920de 100644 --- a/apps/core/src/modules/snippet/snippet.model.ts +++ b/apps/core/src/modules/snippet/snippet.model.ts @@ -89,7 +89,7 @@ export class SnippetModel extends BaseModel { // for function start @prop() - @IsEnum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH']) + @IsEnum(['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'ALL']) @IsOptional() method?: string