Update ReactionsBufferingService.ts
This commit is contained in:
parent
c7a0929072
commit
e9ba46c84e
|
@ -9,6 +9,8 @@ import { DI } from '@/di-symbols.js';
|
||||||
import type { MiNote } from '@/models/Note.js';
|
import type { MiNote } from '@/models/Note.js';
|
||||||
import { bindThis } from '@/decorators.js';
|
import { bindThis } from '@/decorators.js';
|
||||||
|
|
||||||
|
const REDIS_PREFIX = 'reactionsBuffer';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ReactionsBufferingService {
|
export class ReactionsBufferingService {
|
||||||
constructor(
|
constructor(
|
||||||
|
@ -19,17 +21,17 @@ export class ReactionsBufferingService {
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public async create(note: MiNote, reaction: string) {
|
public async create(note: MiNote, reaction: string) {
|
||||||
this.redisClient.hincrby(`reactionsBuffer:${note.id}`, reaction, 1);
|
this.redisClient.hincrby(`${REDIS_PREFIX}:${note.id}`, reaction, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public async delete(note: MiNote, reaction: string) {
|
public async delete(note: MiNote, reaction: string) {
|
||||||
this.redisClient.hincrby(`reactionsBuffer:${note.id}`, reaction, -1);
|
this.redisClient.hincrby(`${REDIS_PREFIX}:${note.id}`, reaction, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@bindThis
|
@bindThis
|
||||||
public async get(note: MiNote) {
|
public async get(note: MiNote) {
|
||||||
const result = await this.redisClient.hgetall(`reactionsBuffer:${note.id}`);
|
const result = await this.redisClient.hgetall(`${REDIS_PREFIX}:${note.id}`);
|
||||||
const delta = {};
|
const delta = {};
|
||||||
for (const [name, count] of Object.entries(result)) {
|
for (const [name, count] of Object.entries(result)) {
|
||||||
delta[name] = parseInt(count);
|
delta[name] = parseInt(count);
|
||||||
|
@ -43,7 +45,7 @@ export class ReactionsBufferingService {
|
||||||
|
|
||||||
const pipeline = this.redisClient.pipeline();
|
const pipeline = this.redisClient.pipeline();
|
||||||
for (const note of notes) {
|
for (const note of notes) {
|
||||||
pipeline.hgetall(`reactionsBuffer:${note.id}`);
|
pipeline.hgetall(`${REDIS_PREFIX}:${note.id}`);
|
||||||
}
|
}
|
||||||
const results = await pipeline.exec();
|
const results = await pipeline.exec();
|
||||||
|
|
||||||
|
@ -59,4 +61,17 @@ export class ReactionsBufferingService {
|
||||||
|
|
||||||
return deltas;
|
return deltas;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@bindThis
|
||||||
|
public async bake() {
|
||||||
|
const bufferedNoteIds = [];
|
||||||
|
let cursor = '0';
|
||||||
|
do {
|
||||||
|
const result = await this.redisClient.scan(cursor, 'MATCH', `${REDIS_PREFIX}:*`, 'COUNT', '1000');
|
||||||
|
cursor = result[0];
|
||||||
|
bufferedNoteIds.push(...result[1]);
|
||||||
|
} while (cursor !== '0');
|
||||||
|
|
||||||
|
console.log(bufferedNoteIds);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue