8f7744ca0d
- src/server/logger.ts 包一层 console.*,给后续 pino/otel 迁移留单点 - interceptors.ts 的 logError 改走 logger.error,业务侧禁止直接 console.* - /health 返回 'ok',纯 liveness(不查 DB),DB 挂时探活仍绿
28 lines
909 B
TypeScript
28 lines
909 B
TypeScript
import { ORPCError, ValidationError } from '@orpc/server'
|
|
import { z } from 'zod'
|
|
import { logger } from '@/server/logger'
|
|
|
|
export const logError = (error: unknown) => {
|
|
logger.error(error)
|
|
}
|
|
|
|
export const handleValidationError = (error: unknown) => {
|
|
if (error instanceof ORPCError && error.code === 'BAD_REQUEST' && error.cause instanceof ValidationError) {
|
|
// ORPC ValidationError.issues are Zod issues in this app.
|
|
const zodError = new z.ZodError(error.cause.issues as z.core.$ZodIssue[])
|
|
|
|
throw new ORPCError('INPUT_VALIDATION_FAILED', {
|
|
status: 422,
|
|
message: z.prettifyError(zodError),
|
|
data: z.flattenError(zodError),
|
|
cause: error.cause,
|
|
})
|
|
}
|
|
|
|
if (error instanceof ORPCError && error.code === 'INTERNAL_SERVER_ERROR' && error.cause instanceof ValidationError) {
|
|
throw new ORPCError('OUTPUT_VALIDATION_FAILED', {
|
|
cause: error.cause,
|
|
})
|
|
}
|
|
}
|