Skip to content

Commit 7aa8272

Browse files
committed
refactor: websocket 디렉토리 내부 setField 모두 setFields로 변경
1 parent 15781ae commit 7aa8272

File tree

4 files changed

+94
-49
lines changed

4 files changed

+94
-49
lines changed

apps/backend/.eslintrc.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,10 @@ module.exports = {
2222
'@typescript-eslint/explicit-module-boundary-types': 'off',
2323
'@typescript-eslint/no-explicit-any': 'off',
2424
},
25+
'prettier/prettier': [
26+
'error',
27+
{
28+
endOfLine: 'auto',
29+
},
30+
],
2531
};

apps/websocket/.eslintrc.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,10 @@ module.exports = {
2222
'@typescript-eslint/explicit-module-boundary-types': 'off',
2323
'@typescript-eslint/no-explicit-any': 'off',
2424
},
25+
'prettier/prettier': [
26+
'error',
27+
{
28+
endOfLine: 'auto',
29+
},
30+
],
2531
};

apps/websocket/src/redis/redis.service.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,29 @@ export class RedisService {
4242
}
4343
}
4444

45-
async setField(key: string, field: string, value: string) {
45+
// async setField(key: string, field: string, value: string) {
46+
// // 락을 획득할 때까지 기다린다.
47+
// const lock = await this.redisLock.acquire([`user:${key}`], 1000);
48+
// try {
49+
// return await this.redisClient.hset(key, field, value);
50+
// } finally {
51+
// lock.release();
52+
// }
53+
// }
54+
55+
async setFields(key: string, map: Record<string, string>) {
4656
// 락을 획득할 때까지 기다린다.
4757
const lock = await this.redisLock.acquire([`user:${key}`], 1000);
4858
try {
49-
return await this.redisClient.hset(key, field, value);
59+
// return await this.redisClient.hset(key, );
60+
// fieldValueArr 배열을 평탄화하여 [field, value, field, value, ...] 형태로 변환
61+
const flattenedFields = Object.entries(map).flatMap(([field, value]) => [
62+
field,
63+
value,
64+
]);
65+
66+
// hset을 통해 한 번에 여러 필드를 설정
67+
return await this.redisClient.hset(key, ...flattenedFields);
5068
} finally {
5169
lock.release();
5270
}

apps/websocket/src/yjs/yjs.service.ts

Lines changed: 62 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -247,20 +247,18 @@ export class YjsService
247247
private async observeTitle(event: Y.YEvent<any>[]) {
248248
// path가 존재할 때만 페이지 갱신
249249
event[0].path.toString().split('_')[1] &&
250-
this.redisService.setField(
250+
(await this.redisService.setFields(
251251
`page:${event[0].path.toString().split('_')[1]}`,
252-
'title',
253-
event[0].target.toString(),
254-
);
252+
{ title: event[0].target.toString() },
253+
));
255254
}
256255

257256
private async observeEmoji(event: Y.YEvent<any>[]) {
258257
// path가 존재할 때만 페이지 갱신
259258
event[0].path.toString().split('_')[1] &&
260-
this.redisService.setField(
259+
this.redisService.setFields(
261260
`page:${event[0].path.toString().split('_')[1]}`,
262-
'emoji',
263-
event[0].target.toString(),
261+
{ emoji: event[0].target.toString() },
264262
);
265263
}
266264

@@ -288,15 +286,20 @@ export class YjsService
288286

289287
const findPage = pageResponse.data.page;
290288

291-
await Promise.all([
292-
this.redisService.setField(`node:${findPage.node.id}`, 'x', x),
293-
this.redisService.setField(`node:${findPage.node.id}`, 'y', y),
294-
this.redisService.setField(
295-
`node:${findPage.node.id}`,
296-
'color',
297-
color,
298-
),
299-
]);
289+
await this.redisService.setFields(`node:${findPage.node.id}`, {
290+
x,
291+
y,
292+
color,
293+
});
294+
// await Promise.all([
295+
// this.redisService.setField(`node:${findPage.node.id}`, 'x', x),
296+
// this.redisService.setField(`node:${findPage.node.id}`, 'y', y),
297+
// this.redisService.setField(
298+
// `node:${findPage.node.id}`,
299+
// 'color',
300+
// color,
301+
// ),
302+
// ]);
300303
} catch (error) {
301304
this.logger.error(
302305
`노드 업데이트 중 오류 발생 (nodeId: ${id}): ${error.message}`,
@@ -319,39 +322,48 @@ export class YjsService
319322

320323
if (change.action === 'add') {
321324
// 연결된 노드가 없을 때만 edge 생성
322-
this.redisService.setField(
323-
`edge:${edge.source}-${edge.target}`,
324-
'fromNode',
325-
edge.source,
326-
);
327-
this.redisService.setField(
325+
await this.redisService.setFields(
328326
`edge:${edge.source}-${edge.target}`,
329-
'toNode',
330-
edge.target,
331-
);
332-
this.redisService.setField(
333-
`edge:${edge.source}-${edge.target}`,
334-
'type',
335-
'add',
327+
{ fromNode: edge.source, toNode: edge.target, type: 'add' },
336328
);
329+
// this.redisService.setField(
330+
// `edge:${edge.source}-${edge.target}`,
331+
// 'fromNode',
332+
// edge.source,
333+
// );
334+
// this.redisService.setField(
335+
// `edge:${edge.source}-${edge.target}`,
336+
// 'toNode',
337+
// edge.target,
338+
// );
339+
// this.redisService.setField(
340+
// `edge:${edge.source}-${edge.target}`,
341+
// 'type',
342+
// 'add',
343+
// );
337344
}
338345
if (change.action === 'delete') {
339346
// 엣지가 존재하면 삭제
340-
this.redisService.setField(
341-
`edge:${fromNode}-${toNode}`,
342-
'fromNode',
347+
await this.redisService.setFields(`edge:${fromNode}-${toNode}`, {
343348
fromNode,
344-
);
345-
this.redisService.setField(
346-
`edge:${fromNode}-${toNode}`,
347-
'toNode',
348349
toNode,
349-
);
350-
this.redisService.setField(
351-
`edge:${fromNode}-${toNode}`,
352-
'type',
353-
'delete',
354-
);
350+
type: 'delete',
351+
});
352+
// this.redisService.setField(
353+
// `edge:${fromNode}-${toNode}`,
354+
// 'fromNode',
355+
// fromNode,
356+
// );
357+
// this.redisService.setField(
358+
// `edge:${fromNode}-${toNode}`,
359+
// 'toNode',
360+
// toNode,
361+
// );
362+
// this.redisService.setField(
363+
// `edge:${fromNode}-${toNode}`,
364+
// 'type',
365+
// 'delete',
366+
// );
355367
}
356368
}
357369
}
@@ -361,11 +373,14 @@ export class YjsService
361373
try {
362374
const pageId = parseInt(document.name.split('-')[1]);
363375

364-
await this.redisService.setField(
365-
`page:${pageId.toString()}`,
366-
'content',
367-
JSON.stringify(yXmlFragmentToProsemirrorJSON(editorDoc)),
368-
);
376+
await this.redisService.setFields(`page:${pageId.toString()}`, {
377+
content: JSON.stringify(yXmlFragmentToProsemirrorJSON(editorDoc)),
378+
});
379+
// await this.redisService.setField(
380+
// `page:${pageId.toString()}`,
381+
// 'content',
382+
// JSON.stringify(yXmlFragmentToProsemirrorJSON(editorDoc)),
383+
// );
369384
} catch (error) {
370385
this.logger.error(
371386
`에디터 내용 저장 중 오류 발생 (pageId: ${document?.name}): ${error.message}`,

0 commit comments

Comments
 (0)