Skip to content

Commit ed5e97d

Browse files
committed
Merge remote-tracking branch 'origin/refactor/error-message' into development
2 parents d49516e + 9017dfc commit ed5e97d

File tree

4 files changed

+67
-49
lines changed

4 files changed

+67
-49
lines changed

Diff for: packages/velog-server/src/common/plugins/global/errorHandlerPlugin.ts

+16-21
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,14 @@ const errorHandlerPlugin: FastifyPluginCallback = (fastify, _, done) => {
1515
request.log.error(error, 'fastify onError')
1616
const discord = container.resolve(DiscordService)
1717
discord
18-
.sendMessage(
19-
'error',
20-
JSON.stringify({
21-
type: 'fastify OnError',
22-
requestbody: request?.body || 'none',
23-
query: request?.query || 'none',
24-
error,
25-
user: request?.user,
26-
ip: request?.ip,
27-
}),
28-
)
18+
.sendMessage('error', {
19+
type: 'fastify OnError',
20+
body: request?.body,
21+
query: request?.query,
22+
error,
23+
user: request?.user,
24+
ip: request?.ip,
25+
})
2926
.catch(console.error)
3027

3128
done()
@@ -50,16 +47,14 @@ const errorHandlerPlugin: FastifyPluginCallback = (fastify, _, done) => {
5047
} else {
5148
const discord = container.resolve(DiscordService)
5249
discord
53-
.sendMessage(
54-
'error',
55-
JSON.stringify({
56-
type: 'fastify handleError',
57-
requestbody: request?.body,
58-
error,
59-
user: request?.user,
60-
ip: request?.ip,
61-
}),
62-
)
50+
.sendMessage('error', {
51+
type: 'fastify handleError',
52+
body: request?.body,
53+
query: request?.query,
54+
error,
55+
user: request?.user,
56+
ip: request?.ip,
57+
})
6358
.catch(console.error)
6459
}
6560
})

Diff for: packages/velog-server/src/common/plugins/global/mercuriusPlugin.ts

+21-26
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const mercuriusPlugin: FastifyPluginAsync = async (fastify) => {
2323
},
2424
errorHandler: (error, request) => {
2525
const { name, message, code, stack, errors, statusCode } = error
26-
const result = {
26+
const errorData = {
2727
name,
2828
message,
2929
code,
@@ -38,43 +38,38 @@ const mercuriusPlugin: FastifyPluginAsync = async (fastify) => {
3838
const discord = container.resolve(DiscordService)
3939

4040
discord
41-
.sendMessage(
42-
'error',
43-
JSON.stringify({
44-
type: 'errorHandler',
45-
requestbody: request?.body,
46-
result,
47-
user: request?.user,
48-
ip: request?.ip,
49-
}),
50-
)
41+
.sendMessage('error', {
42+
type: 'errorHandler',
43+
body: request?.body,
44+
user: request?.user,
45+
ip: request?.ip,
46+
originError: error,
47+
error: errorData,
48+
})
5149
.catch(console.error)
5250
}
5351
},
54-
errorFormatter: (execution, ctx) => {
55-
const e = execution.errors?.[0]?.originalError
52+
errorFormatter: (error, ctx) => {
53+
const e = error.errors?.[0]?.originalError
5654

5755
if (!isHttpError(e)) {
5856
console.log('mecurius errorFormatter')
59-
;(ctx as any).request?.log?.error(execution, 'errorFormatter')
57+
;(ctx as any).request?.log?.error(error, 'errorFormatter')
6058
const discord = container.resolve(DiscordService)
6159
discord
62-
.sendMessage(
63-
'error',
64-
JSON.stringify({
65-
type: 'errorFormat',
66-
requestbody: (ctx as any).request?.body,
67-
execution,
68-
user: (ctx as any).request?.user,
69-
ip: (ctx as any).request?.ip,
70-
}),
71-
)
60+
.sendMessage('error', {
61+
type: 'errorFormat',
62+
body: (ctx as any).request?.body,
63+
error,
64+
user: (ctx as any).request?.user,
65+
ip: (ctx as any).request?.ip,
66+
})
7267
.catch(console.error)
7368

74-
return { statusCode: 500, response: execution }
69+
return { statusCode: 500, response: error }
7570
}
7671

77-
const errors = execution.errors?.map((error) =>
72+
const errors = error.errors?.map((error) =>
7873
Object.assign(error, {
7974
extensions: {
8075
name: e.name,

Diff for: packages/velog-server/src/lib/discord/DiscordService.ts

+28-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
import { injectable, singleton } from 'tsyringe'
1+
import { container, injectable, singleton } from 'tsyringe'
22
import { Client, GatewayIntentBits } from 'discord.js'
33
import { ENV } from '@env'
4+
import { RedisService } from '@lib/redis/RedisService'
5+
import { Time } from '@constants/TimeConstants'
46

57
@injectable()
68
@singleton()
@@ -22,9 +24,16 @@ export class DiscordService {
2224
this.client.login(ENV.discordBotToken)
2325
})
2426
}
25-
public async sendMessage(type: MessageType, message: string) {
27+
public async sendMessage(type: MessageType, payload: MessagePayload) {
2628
this.isSending = true
2729

30+
const metaData = Object.assign(payload, {
31+
body: payload.body ?? 'none',
32+
query: payload.query ?? 'none',
33+
})
34+
35+
const message = JSON.stringify(metaData)
36+
2837
const frequentWord = [
2938
'connection pool',
3039
'canceling statement',
@@ -44,6 +53,14 @@ export class DiscordService {
4453
return
4554
}
4655

56+
if (payload.body?.include('WritePost') && payload?.user?.id) {
57+
const redisService = container.resolve(RedisService)
58+
const key = redisService.generateKey.errorMessageCache(payload.type, payload?.user?.id)
59+
const exists = await redisService.exists(key)
60+
if (exists === 1) return
61+
await redisService.setex(key, Time.ONE_MINUTE_IN_S * 10, 'true')
62+
}
63+
4764
try {
4865
const isReady = this.client.isReady()
4966

@@ -82,3 +99,12 @@ export class DiscordService {
8299
}
83100

84101
type MessageType = 'error' | 'spam'
102+
type MessagePayload = {
103+
type: string
104+
body?: any
105+
query?: any
106+
user?: { id: string }
107+
ip?: string
108+
error?: any
109+
originError?: any
110+
}

Diff for: packages/velog-server/src/lib/redis/RedisService.ts

+2
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ export class RedisService extends Redis implements Service {
3434
changeEmail: (code: string) => `changeEmailCode:${code}`,
3535
trendingWriters: () => `trending:writers`,
3636
existsUser: (userId: string) => `exists:user:${userId}`,
37+
errorMessageCache: (type: string, userId: string) => `error:${type}:${userId}`,
3738
}
3839
}
3940

@@ -63,6 +64,7 @@ type GenerateRedisKey = {
6364
changeEmail: (code: string) => string
6465
trendingWriters: () => string
6566
existsUser: (userId: string) => string
67+
errorMessageCache: (type: string, userId: string) => string
6668
}
6769

6870
type QueueName = 'createFeed' | 'checkPostSpam'

0 commit comments

Comments
 (0)