@jayfong/x-server 1.27.2 → 1.28.0

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.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ## [1.28.0](https://github.com/jfWorks/x-server/compare/v1.27.4...v1.28.0) (2022-05-15)
6
+
7
+
8
+ ### Features
9
+
10
+ * **cache:** add rememberMany ([d6460d3](https://github.com/jfWorks/x-server/commit/d6460d363000700745834c02d145ec86658400d1))
11
+
12
+ ### [1.27.4](https://github.com/jfWorks/x-server/compare/v1.27.3...v1.27.4) (2022-05-15)
13
+
14
+
15
+ ### Bug Fixes
16
+
17
+ * cache remove use batch ([1075902](https://github.com/jfWorks/x-server/commit/1075902984e09e766ec72b0289c4e4a5d16d5d16))
18
+
19
+ ### [1.27.3](https://github.com/jfWorks/x-server/compare/v1.27.2...v1.27.3) (2022-05-11)
20
+
21
+
22
+ ### Bug Fixes
23
+
24
+ * api gen ([5e0086f](https://github.com/jfWorks/x-server/commit/5e0086f166bf629f0a68ddea367816abf40197f0))
25
+
5
26
  ### [1.27.2](https://github.com/jfWorks/x-server/compare/v1.27.1...v1.27.2) (2022-05-11)
6
27
 
7
28
 
@@ -190,7 +190,6 @@ class ApiGenerator {
190
190
  method: handle.method.toUpperCase(),
191
191
  title: handle.name,
192
192
  path: handle.path,
193
- req_body_type: 'query',
194
193
  res_body_type: 'json',
195
194
  req_body_is_json_schema: false,
196
195
  res_body_is_json_schema: true,
@@ -115,6 +115,28 @@ class CacheService {
115
115
 
116
116
  return value;
117
117
  }
118
+
119
+ async rememberMany(raws, key, action, ttl = this.options.ttl) {
120
+ const keys = raws.map(key);
121
+ const values = await this.getMany(...keys);
122
+ const shouldUpdateIndexes = [];
123
+
124
+ for (let i = 0, len = values.length; i < len; i++) {
125
+ if (values[i] === null) {
126
+ shouldUpdateIndexes.push(i);
127
+ }
128
+ }
129
+
130
+ if (shouldUpdateIndexes.length) {
131
+ const nextValues = await action(shouldUpdateIndexes.map(i => raws[i]));
132
+ await Promise.all(nextValues.map(async (nextValue, index) => {
133
+ values[shouldUpdateIndexes[index]] = nextValue;
134
+ await this.set(keys[shouldUpdateIndexes[index]], nextValue, ttl);
135
+ }));
136
+ }
137
+
138
+ return values;
139
+ }
118
140
  /**
119
141
  * 自增。
120
142
  *
@@ -182,10 +204,7 @@ class CacheService {
182
204
 
183
205
 
184
206
  async remove(...keys) {
185
- return Promise.all(keys.map(async key => {
186
- const redisKey = this.toRedisKey(key);
187
- return _x.x.redis.del(redisKey);
188
- }));
207
+ return _x.x.redis.del(...keys.map(key => this.toRedisKey(key)));
189
208
  }
190
209
  /**
191
210
  * 清空全部缓存。
@@ -174,7 +174,6 @@ export class ApiGenerator {
174
174
  method: handle.method.toUpperCase(),
175
175
  title: handle.name,
176
176
  path: handle.path,
177
- req_body_type: 'query',
178
177
  res_body_type: 'json',
179
178
  req_body_is_json_schema: false,
180
179
  res_body_is_json_schema: true,
@@ -61,6 +61,7 @@ export declare class CacheService<TData extends Data = Data, TKey extends Key<TD
61
61
  * @returns 返回获取到的内容
62
62
  */
63
63
  remember<K extends TKeyPath, V extends Value<TData, K>>(key: K, action: () => V | Promise<V>, ttl?: MsValue | ((data: V, defaultTTL: MsValue) => MsValue)): Promise<V>;
64
+ rememberMany<T, K extends TKeyPath, V extends Value<TData, K>>(raws: T[], key: (raw: T) => K, action: (raws: T[]) => V[] | Promise<V[]>, ttl?: MsValue | ((data: V, defaultTTL: MsValue) => MsValue)): Promise<V[]>;
64
65
  /**
65
66
  * 自增。
66
67
  *
@@ -94,7 +95,7 @@ export declare class CacheService<TData extends Data = Data, TKey extends Key<TD
94
95
  *
95
96
  * @param keys 键列表
96
97
  */
97
- remove<K extends TKeyPath>(...keys: K[]): Promise<any>;
98
+ remove<K extends TKeyPath>(...keys: K[]): Promise<number>;
98
99
  /**
99
100
  * 清空全部缓存。
100
101
  */
@@ -105,6 +105,28 @@ export class CacheService {
105
105
 
106
106
  return value;
107
107
  }
108
+
109
+ async rememberMany(raws, key, action, ttl = this.options.ttl) {
110
+ const keys = raws.map(key);
111
+ const values = await this.getMany(...keys);
112
+ const shouldUpdateIndexes = [];
113
+
114
+ for (let i = 0, len = values.length; i < len; i++) {
115
+ if (values[i] === null) {
116
+ shouldUpdateIndexes.push(i);
117
+ }
118
+ }
119
+
120
+ if (shouldUpdateIndexes.length) {
121
+ const nextValues = await action(shouldUpdateIndexes.map(i => raws[i]));
122
+ await Promise.all(nextValues.map(async (nextValue, index) => {
123
+ values[shouldUpdateIndexes[index]] = nextValue;
124
+ await this.set(keys[shouldUpdateIndexes[index]], nextValue, ttl);
125
+ }));
126
+ }
127
+
128
+ return values;
129
+ }
108
130
  /**
109
131
  * 自增。
110
132
  *
@@ -172,10 +194,7 @@ export class CacheService {
172
194
 
173
195
 
174
196
  async remove(...keys) {
175
- return Promise.all(keys.map(async key => {
176
- const redisKey = this.toRedisKey(key);
177
- return x.redis.del(redisKey);
178
- }));
197
+ return x.redis.del(...keys.map(key => this.toRedisKey(key)));
179
198
  }
180
199
  /**
181
200
  * 清空全部缓存。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jayfong/x-server",
3
- "version": "1.27.2",
3
+ "version": "1.28.0",
4
4
  "license": "ISC",
5
5
  "sideEffects": false,
6
6
  "main": "lib/_cjs/index.js",