File tree Expand file tree Collapse file tree 5 files changed +37
-2
lines changed
Expand file tree Collapse file tree 5 files changed +37
-2
lines changed Original file line number Diff line number Diff line change 3939 "@types/multer" : " ^1.4.12" ,
4040 "class-transformer" : " ^0.5.1" ,
4141 "class-validator" : " ^0.14.1" ,
42- "ioredis" : " ^5.4.1" ,
4342 "cookie-parser" : " ^1.4.7" ,
43+ "ioredis" : " ^5.4.1" ,
4444 "lib0" : " ^0.2.98" ,
4545 "passport" : " ^0.7.0" ,
4646 "passport-kakao" : " ^1.0.1" ,
4747 "passport-naver" : " ^1.0.6" ,
4848 "path" : " ^0.12.7" ,
4949 "pg" : " ^8.13.1" ,
5050 "prosemirror-view" : " ^1.37.0" ,
51+ "redlock" : " ^5.0.0-beta.2" ,
5152 "reflect-metadata" : " ^0.1.13" ,
5253 "rxjs" : " ^7.8.1" ,
5354 "socket.io" : " ^4.8.1" ,
Original file line number Diff line number Diff line change @@ -22,6 +22,7 @@ import { WorkspaceModule } from './workspace/workspace.module';
2222import { RoleModule } from './role/role.module' ;
2323import { TasksModule } from './tasks/tasks.module' ;
2424import { ScheduleModule } from '@nestjs/schedule' ;
25+ import { RedLockModule } from './red-lock/red-lock.module' ;
2526
2627@Module ( {
2728 imports : [
@@ -60,6 +61,7 @@ import { ScheduleModule } from '@nestjs/schedule';
6061 WorkspaceModule ,
6162 RoleModule ,
6263 TasksModule ,
64+ RedLockModule ,
6365 ] ,
6466 controllers : [ AppController ] ,
6567 providers : [ AppService ] ,
Original file line number Diff line number Diff line change @@ -6,12 +6,14 @@ import { Page } from './page.entity';
66import { PageRepository } from './page.repository' ;
77import { NodeModule } from '../node/node.module' ;
88import { WorkspaceModule } from '../workspace/workspace.module' ;
9+ import { RedLockModule } from '../red-lock/red-lock.module' ;
910
1011@Module ( {
1112 imports : [
1213 TypeOrmModule . forFeature ( [ Page ] ) ,
1314 forwardRef ( ( ) => NodeModule ) ,
1415 WorkspaceModule ,
16+ RedLockModule ,
1517 ] ,
1618 controllers : [ PageController ] ,
1719 providers : [ PageService , PageRepository ] ,
Original file line number Diff line number Diff line change 1- import { Injectable } from '@nestjs/common' ;
1+ import { Injectable , Inject } from '@nestjs/common' ;
22import { NodeRepository } from '../node/node.repository' ;
33import { WorkspaceRepository } from '../workspace/workspace.repository' ;
44import { PageRepository } from './page.repository' ;
@@ -8,13 +8,16 @@ import { UpdatePageDto } from './dtos/updatePage.dto';
88import { UpdatePartialPageDto } from './dtos/updatePartialPage.dto' ;
99import { PageNotFoundException } from '../exception/page.exception' ;
1010import { WorkspaceNotFoundException } from '../exception/workspace.exception' ;
11+ import Redlock from 'redlock' ;
1112
13+ const RED_LOCK_TOKEN = 'RED_LOCK' ;
1214@Injectable ( )
1315export class PageService {
1416 constructor (
1517 private readonly pageRepository : PageRepository ,
1618 private readonly nodeRepository : NodeRepository ,
1719 private readonly workspaceRepository : WorkspaceRepository ,
20+ @Inject ( RED_LOCK_TOKEN ) private readonly redisLock : Redlock ,
1821 ) { }
1922
2023 async createPage ( dto : CreatePageDto ) : Promise < Page > {
Original file line number Diff line number Diff line change 1+ import { Module } from '@nestjs/common' ;
2+ import Redis from 'ioredis' ;
3+ import Redlock from 'redlock' ;
4+ import { RedisModule } from '../redis/redis.module' ;
5+ const RED_LOCK_TOKEN = 'RED_LOCK' ;
6+ const REDIS_CLIENT_TOKEN = 'REDIS_CLIENT' ;
7+
8+ @Module ( {
9+ imports : [ RedisModule ] ,
10+ providers : [
11+ {
12+ provide : RED_LOCK_TOKEN ,
13+ useFactory : ( redisClient : Redis ) => {
14+ return new Redlock ( [ redisClient ] , {
15+ driftFactor : 0.01 ,
16+ retryCount : 10 ,
17+ retryDelay : 200 ,
18+ retryJitter : 200 ,
19+ automaticExtensionThreshold : 500 ,
20+ } ) ;
21+ } ,
22+ inject : [ REDIS_CLIENT_TOKEN ] ,
23+ } ,
24+ ] ,
25+ exports : [ RED_LOCK_TOKEN ] ,
26+ } )
27+ export class RedLockModule { }
You can’t perform that action at this time.
0 commit comments