From 8922b9a59d01f37854a7bcf84534d6b1e42724ff Mon Sep 17 00:00:00 2001 From: BHyeonKim Date: Sun, 8 Jun 2025 22:37:58 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20sonarqube=20issue=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/entry.client.tsx | 5 ----- src/app/entry.server.tsx | 4 ---- src/app/provider/StompProvider.tsx | 2 +- src/app/provider/UserInfoProvider.tsx | 4 +++- src/app/root.tsx | 2 +- src/app/routes/callback.tsx | 6 +++--- src/app/routes/trade.$ticker.tsx | 2 +- src/features/auth/ui/KakaoLoginButton/index.tsx | 1 - src/features/chat/ui/ChatButton/index.tsx | 5 ++++- src/features/chat/ui/ChatWindow/index.tsx | 2 +- src/features/chat/ui/MessageBox/index.tsx | 5 ++++- .../coin-search-list/ui/CoinListItem/index.tsx | 8 +++++--- .../ui/CoinListWithSearchBar/index.tsx | 2 +- .../ui/ExecutionList/index.tsx | 4 +++- src/features/order/models/form.machine.ts | 6 +++--- src/features/order/ui/OrderForm/index.tsx | 14 +++++++------- src/features/order/ui/OrderFormFallback/index.tsx | 4 +++- src/features/tradeview/ui/Orderbook/chart.tsx | 2 +- src/features/tradeview/ui/StockChart/index.tsx | 2 +- src/shared/ui/Backdrop/index.tsx | 2 +- src/shared/ui/CloseButton/index.tsx | 2 +- src/shared/ui/Container/index.tsx | 2 +- src/shared/ui/ContainerTitle/index.tsx | 4 +++- src/shared/ui/Logo/index.tsx | 2 +- src/shared/ui/MenuButton/index.tsx | 2 +- src/shared/ui/Modal/index.tsx | 2 +- src/shared/ui/NumberInput/index.tsx | 2 +- src/shared/ui/Switch/index.tsx | 2 +- src/widgets/navbar/ui/SideBar/index.tsx | 5 ++++- 29 files changed, 57 insertions(+), 48 deletions(-) diff --git a/src/app/entry.client.tsx b/src/app/entry.client.tsx index a22e392..ee80c88 100644 --- a/src/app/entry.client.tsx +++ b/src/app/entry.client.tsx @@ -4,11 +4,6 @@ import { hydrateRoot } from 'react-dom/client'; import { HydratedRouter } from 'react-router/dom'; async function prepareApp() { - // if (process.env.NODE_ENV === 'development') { - // const { worker } = await import('../mocks/browser'); - // return worker.start({ onUnhandledRequest: 'bypass' }); - // } - return Promise.resolve(); } diff --git a/src/app/entry.server.tsx b/src/app/entry.server.tsx index dd18deb..816b65b 100644 --- a/src/app/entry.server.tsx +++ b/src/app/entry.server.tsx @@ -10,10 +10,6 @@ import { ServerRouter } from 'react-router'; export const streamTimeout = 5_000; -// if (process.env.NODE_ENV === 'development') { -// server.listen({ onUnhandledRequest: 'bypass' }); -// } - export default function handleRequest( request: Request, responseStatusCode: number, diff --git a/src/app/provider/StompProvider.tsx b/src/app/provider/StompProvider.tsx index d711d3e..f10c64d 100644 --- a/src/app/provider/StompProvider.tsx +++ b/src/app/provider/StompProvider.tsx @@ -16,7 +16,7 @@ export const StompContext = createContext(null); export default function StompProvider({ children, brokerURL, -}: StompProviderProps) { +}: Readonly) { const [stompClient, setStompClient] = useState(null); const [isConnected, setIsConnected] = useState(false); diff --git a/src/app/provider/UserInfoProvider.tsx b/src/app/provider/UserInfoProvider.tsx index 105f07c..f19b3ed 100644 --- a/src/app/provider/UserInfoProvider.tsx +++ b/src/app/provider/UserInfoProvider.tsx @@ -18,7 +18,9 @@ type UserIdProviderProps = { export const UserIdContext = createContext(null); -export default function UserIdProvider({ children }: UserIdProviderProps) { +export default function UserIdProvider({ + children, +}: Readonly) { const [userId, setUserId] = useState( null, ); diff --git a/src/app/root.tsx b/src/app/root.tsx index 59e6163..fa725cd 100644 --- a/src/app/root.tsx +++ b/src/app/root.tsx @@ -57,7 +57,7 @@ export function meta() { ]; } -export function Layout({ children }: { children: React.ReactNode }) { +export function Layout({ children }: Readonly<{ children: React.ReactNode }>) { return ( diff --git a/src/app/routes/callback.tsx b/src/app/routes/callback.tsx index f55355b..77e2aba 100644 --- a/src/app/routes/callback.tsx +++ b/src/app/routes/callback.tsx @@ -8,8 +8,8 @@ import ApiClient from '~/shared/api/httpClient'; import { useUserId } from '../provider/UserInfoProvider'; export async function loader({ request }: LoaderFunctionArgs) { - const rawCookie = request.headers.get('Cookie'); - const cookies = cookie.parse(rawCookie || ''); + const rawCookie = request.headers.get('Cookie') ?? ''; + const cookies = cookie.parse(rawCookie); const isAccessTokenExists = !!cookies.access_token; if (!isAccessTokenExists) { @@ -18,7 +18,7 @@ export async function loader({ request }: LoaderFunctionArgs) { const response = await ApiClient.get('api/userinfo', { headers: { - Cookie: rawCookie || '', + Cookie: rawCookie, }, }); diff --git a/src/app/routes/trade.$ticker.tsx b/src/app/routes/trade.$ticker.tsx index 1325a3f..46406e5 100644 --- a/src/app/routes/trade.$ticker.tsx +++ b/src/app/routes/trade.$ticker.tsx @@ -44,7 +44,7 @@ export default function TradeRouteComponent({ loaderData, }: Route.ComponentProps) { const { userId } = useUserId(); - useTradeNotification(userId || 0); + useTradeNotification(userId ?? 0); const [isMenuOpen, setIsMenuOpen] = useState(false); const { coinInfo, coinList, isLoggedIn } = loaderData; const coinListWithIcon = coinList.map((coinInfo) => ({ diff --git a/src/features/auth/ui/KakaoLoginButton/index.tsx b/src/features/auth/ui/KakaoLoginButton/index.tsx index 0ad06da..202683a 100644 --- a/src/features/auth/ui/KakaoLoginButton/index.tsx +++ b/src/features/auth/ui/KakaoLoginButton/index.tsx @@ -1,7 +1,6 @@ import { IconKakao } from '~/assets/svgs'; export default function KakaoLoginButton() { - //TODO: 카카오 로그인 URL 교체할 것 return ( ) { return ( ) { const containerRef = useRef(null); const { height } = useDimensions(containerRef); const disabled = state === 'processing' || state === 'complete'; diff --git a/src/features/chat/ui/MessageBox/index.tsx b/src/features/chat/ui/MessageBox/index.tsx index d83cad6..aaac0ce 100644 --- a/src/features/chat/ui/MessageBox/index.tsx +++ b/src/features/chat/ui/MessageBox/index.tsx @@ -5,7 +5,10 @@ type MessageBoxProps = { message: string; }; -export default function MessageBox({ direction, message }: MessageBoxProps) { +export default function MessageBox({ + direction, + message, +}: Readonly) { return (
) { const currentPriceData = useCurrentPrice(ticker); const isBull = currentPriceData && currentPriceData.changeRate > 0; - const formatedPrice = `${formatCurrencyKR(+(currentPriceData?.currentPrice || 0).toFixed(2))}원`; + const formatedPrice = `${formatCurrencyKR( + +(currentPriceData?.currentPrice ?? 0).toFixed(2), + )}원`; return ( @@ -41,7 +43,7 @@ export default function CoinListItem({
- {(currentPriceData?.changeRate || 0).toFixed(2)}% + {(currentPriceData?.changeRate ?? 0).toFixed(2)}%
diff --git a/src/features/coin-search-list/ui/CoinListWithSearchBar/index.tsx b/src/features/coin-search-list/ui/CoinListWithSearchBar/index.tsx index 26873c6..2f394e5 100644 --- a/src/features/coin-search-list/ui/CoinListWithSearchBar/index.tsx +++ b/src/features/coin-search-list/ui/CoinListWithSearchBar/index.tsx @@ -10,7 +10,7 @@ export type CoinListWithSearchBarProps = { export default function CoinListWithSearchBar({ coinList, -}: CoinListWithSearchBarProps) { +}: Readonly) { const [searchQuery, setSearchQuery] = useState(''); const filteredCoinList = coinList.filter((coin) => diff --git a/src/features/order-execution-list/ui/ExecutionList/index.tsx b/src/features/order-execution-list/ui/ExecutionList/index.tsx index 646ce88..4e76fa8 100644 --- a/src/features/order-execution-list/ui/ExecutionList/index.tsx +++ b/src/features/order-execution-list/ui/ExecutionList/index.tsx @@ -6,7 +6,9 @@ type ExecutionListProps = { ticker: CoinTicker; }; -export default function ExecutionList({ ticker }: ExecutionListProps) { +export default function ExecutionList({ + ticker, +}: Readonly) { const executionList = useExecutionListData(ticker); const orderList = executionList.length ? ( diff --git a/src/features/order/models/form.machine.ts b/src/features/order/models/form.machine.ts index 4d4a598..d74643e 100644 --- a/src/features/order/models/form.machine.ts +++ b/src/features/order/models/form.machine.ts @@ -35,7 +35,7 @@ export const formMachine = setup({ const { data } = await response.json(); const holdings = Number( - data.wallets.find((wallet) => wallet.ticker === input.ticker)?.size || + data.wallets.find((wallet) => wallet.ticker === input.ticker)?.size ?? 0, ); @@ -100,7 +100,7 @@ export const formMachine = setup({ message: ({ event, context }) => { assertEvent(event, 'CHANGE_PRICE'); - const quantity = context.quantity || 0; + const quantity = context.quantity ?? 0; const price = event.price; if (context.tradeType === '매수') { @@ -213,7 +213,7 @@ export const formMachine = setup({ context: (params) => { const ticker = typeof params.input === 'object' && params.input - ? (params.input as { ticker?: string }).ticker || '' + ? ((params.input as { ticker?: string }).ticker ?? '') : ''; return { diff --git a/src/features/order/ui/OrderForm/index.tsx b/src/features/order/ui/OrderForm/index.tsx index e711bca..c360d18 100644 --- a/src/features/order/ui/OrderForm/index.tsx +++ b/src/features/order/ui/OrderForm/index.tsx @@ -12,7 +12,7 @@ type OrderFormProps = { ticker: string; }; -export default function OrderForm({ ticker }: OrderFormProps) { +export default function OrderForm({ ticker }: Readonly) { const [state, send, actorRef] = useMachine(formMachine, { input: { ticker, @@ -25,15 +25,15 @@ export default function OrderForm({ ticker }: OrderFormProps) { state.context.tradeType === '매수' ? '구매가능 금액' : '매도가능 수량'; const quantityValueText = state.context.tradeType === '매수' - ? `${formatCurrencyKR(state.context.deposit || 0)}원` - : `${state.context.holdings?.toFixed(2) || 0}개`; + ? `${formatCurrencyKR(state.context.deposit ?? 0)}원` + : `${state.context.holdings?.toFixed(2) ?? 0}개`; const totalOrderPriceText = state.context.tradeType === '매수' ? state.context.orderType === '지정가' - ? `${formatCurrencyKR((state.context.price || 0) * (state.context.quantity || 0))}원` + ? `${formatCurrencyKR((state.context.price ?? 0) * (state.context.quantity ?? 0))}원` : '시장가격에 매수' : state.context.orderType === '지정가' - ? `${formatCurrencyKR((state.context.price || 0) * (state.context.quantity || 0))}원` + ? `${formatCurrencyKR((state.context.price ?? 0) * (state.context.quantity ?? 0))}원` : '시장가격에 매도'; const handleTradeTypeChange = () => { @@ -142,7 +142,7 @@ export default function OrderForm({ ticker }: OrderFormProps) { onClickPlus={handlePricePlus} onChange={handlePriceChange} step={PRICE_STEP} - value={(state.context.price || '').toString()} + value={(state.context.price ?? '').toString()} min={0} onKeyDown={preventNonNumericInput} data-testid="price-input" @@ -167,7 +167,7 @@ export default function OrderForm({ ticker }: OrderFormProps) { onClickPlus={handleQuantityPlus} step={QUANTITY_STEP} onChange={handleQuantityChange} - value={(state.context.quantity || '').toString()} + value={(state.context.quantity ?? '').toString()} min={0} onKeyDown={preventNonNumericInput} data-testid="quantity-input" diff --git a/src/features/order/ui/OrderFormFallback/index.tsx b/src/features/order/ui/OrderFormFallback/index.tsx index a2a9051..54cc015 100644 --- a/src/features/order/ui/OrderFormFallback/index.tsx +++ b/src/features/order/ui/OrderFormFallback/index.tsx @@ -5,7 +5,9 @@ type OrderFormFallbackProps = { ticker: CoinTicker; }; -export default function OrderFormFallback({ ticker }: OrderFormFallbackProps) { +export default function OrderFormFallback({ + ticker, +}: Readonly) { return (
diff --git a/src/features/tradeview/ui/Orderbook/chart.tsx b/src/features/tradeview/ui/Orderbook/chart.tsx index 978c8c9..9bd424a 100644 --- a/src/features/tradeview/ui/Orderbook/chart.tsx +++ b/src/features/tradeview/ui/Orderbook/chart.tsx @@ -22,7 +22,7 @@ export type OrderbookChartProps = { export default function OrderbookChart({ data, type = 'bull', -}: OrderbookChartProps) { +}: Readonly) { const xAxisRef = useRef>(null); const yAxisRef = useRef>(null); const seriesRef = useRef(null); diff --git a/src/features/tradeview/ui/StockChart/index.tsx b/src/features/tradeview/ui/StockChart/index.tsx index 27cdec2..c60ed4e 100644 --- a/src/features/tradeview/ui/StockChart/index.tsx +++ b/src/features/tradeview/ui/StockChart/index.tsx @@ -99,7 +99,7 @@ function makeEvent( ); } -export default function StockChart({ ticker }: StockChartProps) { +export default function StockChart({ ticker }: Readonly) { const chartControlRef = useRef(null); const valueSeriesRef = useRef(null); const sbSeriesRef = useRef(null); diff --git a/src/shared/ui/Backdrop/index.tsx b/src/shared/ui/Backdrop/index.tsx index 68b3a05..47d996f 100644 --- a/src/shared/ui/Backdrop/index.tsx +++ b/src/shared/ui/Backdrop/index.tsx @@ -9,7 +9,7 @@ const backdropVariant = { exit: { opacity: 0 }, }; -export default function Backdrop({ children }: BackdropProps) { +export default function Backdrop({ children }: Readonly) { return ( void; }; -export default function CloseButton({ onClick }: CloseButtonProps) { +export default function CloseButton({ onClick }: Readonly) { return (