├── packages ├── frontend │ ├── README.md │ ├── src │ │ ├── pages │ │ │ ├── home │ │ │ │ ├── index.ts │ │ │ │ └── Home.tsx │ │ │ ├── login │ │ │ │ └── index.ts │ │ │ ├── stocks │ │ │ │ ├── index.ts │ │ │ │ └── components │ │ │ │ │ ├── StockInfoCard.tsx │ │ │ │ │ └── StockIndexCard.tsx │ │ │ ├── my-page │ │ │ │ ├── index.ts │ │ │ │ ├── MyPage.tsx │ │ │ │ └── AlarmInfo.tsx │ │ │ └── stock-detail │ │ │ │ ├── components │ │ │ │ ├── index.ts │ │ │ │ ├── Title.tsx │ │ │ │ ├── MetricItem.tsx │ │ │ │ └── RadioButton.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── hooks │ │ │ │ ├── useChatOrder.ts │ │ │ │ └── useChartResize.ts │ │ │ │ └── NotificationPanel.tsx │ │ ├── components │ │ │ ├── ui │ │ │ │ ├── alarm │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Alarm.tsx │ │ │ │ ├── button │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── Button.stories.ts │ │ │ │ │ └── Button.tsx │ │ │ │ ├── input │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Input.tsx │ │ │ │ ├── loader │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Loader.tsx │ │ │ │ ├── modal │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Modal.tsx │ │ │ │ └── tooltip │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── Tooltip.tsx │ │ │ │ │ └── Tooltip.stories.tsx │ │ │ ├── layouts │ │ │ │ ├── alarm │ │ │ │ │ ├── index.ts │ │ │ │ │ └── Alarm.tsx │ │ │ │ ├── search │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── SearchResults.tsx │ │ │ │ │ └── Search.tsx │ │ │ │ ├── index.ts │ │ │ │ ├── Layout.tsx │ │ │ │ └── MenuList.tsx │ │ │ └── errors │ │ │ │ └── error.tsx │ │ ├── apis │ │ │ ├── queries │ │ │ │ ├── auth │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── useGetLoginStatus.ts │ │ │ │ │ ├── usePostLogout.ts │ │ │ │ │ ├── schema.ts │ │ │ │ │ └── useGetTestLogin.ts │ │ │ │ ├── chat │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── usePostChatLike.ts │ │ │ │ │ ├── schema.ts │ │ │ │ │ └── useGetChatList.ts │ │ │ │ ├── alarm │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── useGetAlarm.ts │ │ │ │ │ ├── usePostInitAlarm.ts │ │ │ │ │ ├── useGetStockAlarm.ts │ │ │ │ │ ├── usePostCreateAlarm.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── stocks │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── useGetSearchStocks.ts │ │ │ │ │ ├── useGetStocksByPrice.ts │ │ │ │ │ ├── useStockQueries.ts │ │ │ │ │ └── useGetStocksPriceSeries.ts │ │ │ │ ├── user │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── useGetUserInfo.ts │ │ │ │ │ ├── useGetUserTheme.ts │ │ │ │ │ ├── useGetUserStock.ts │ │ │ │ │ ├── usePostUserNickname.ts │ │ │ │ │ ├── usePatchUserTheme.ts │ │ │ │ │ └── schema.ts │ │ │ │ ├── stock-detail │ │ │ │ │ ├── index.ts │ │ │ │ │ ├── useGetStockDetail.ts │ │ │ │ │ ├── usePostStockUser.ts │ │ │ │ │ ├── useGetStockOwnership.ts │ │ │ │ │ ├── usePostStockView.ts │ │ │ │ │ ├── useDeleteStockUser.ts │ │ │ │ │ └── schema.ts │ │ │ │ └── errorSchema.ts │ │ │ ├── utils │ │ │ │ ├── formatZodError.ts │ │ │ │ ├── delete.ts │ │ │ │ ├── get.ts │ │ │ │ ├── post.ts │ │ │ │ └── patch.ts │ │ │ └── config │ │ │ │ └── index.ts │ │ ├── contexts │ │ │ ├── login │ │ │ │ ├── index.ts │ │ │ │ ├── loginContext.ts │ │ │ │ └── loginProvider.tsx │ │ │ └── theme │ │ │ │ ├── index.ts │ │ │ │ ├── themeContext.ts │ │ │ │ └── themeProvider.tsx │ │ ├── vite-env.d.ts │ │ ├── styles │ │ │ └── theme │ │ │ │ ├── index.ts │ │ │ │ ├── darkTheme.ts │ │ │ │ ├── lightTheme.ts │ │ │ │ └── types.ts │ │ ├── assets │ │ │ ├── kakao.png │ │ │ ├── naver.png │ │ │ ├── plus.svg │ │ │ ├── send.svg │ │ │ ├── down-arrow.svg │ │ │ ├── search.svg │ │ │ ├── stock.svg │ │ │ ├── user.svg │ │ │ ├── google.svg │ │ │ ├── theme.svg │ │ │ ├── home.svg │ │ │ ├── flag.svg │ │ │ ├── small-bell.svg │ │ │ ├── bell.svg │ │ │ └── date.svg │ │ ├── utils │ │ │ ├── formatDate.ts │ │ │ ├── cn.ts │ │ │ ├── getCurrentDate.ts │ │ │ ├── checkChatWriter.ts │ │ │ ├── getHistogramColorData.ts │ │ │ └── createChartOptions.ts │ │ ├── types │ │ │ ├── menu.ts │ │ │ └── metrics.ts │ │ ├── main.tsx │ │ ├── constants │ │ │ ├── alarmOptions.ts │ │ │ ├── timeUnit.ts │ │ │ ├── chatStatus.ts │ │ │ ├── modalMessage.ts │ │ │ ├── metricItem.ts │ │ │ └── menuItems.tsx │ │ ├── sockets │ │ │ ├── config.ts │ │ │ ├── useWebsocket.ts │ │ │ └── schema.ts │ │ ├── hooks │ │ │ ├── useOutsideClick.ts │ │ │ ├── useInfiniteScroll.ts │ │ │ └── useSubscribeAlarm.ts │ │ ├── App.tsx │ │ └── routes │ │ │ └── index.tsx │ ├── postcss.config.js │ ├── public │ │ ├── favicon.ico │ │ ├── logoTitle.png │ │ ├── logoCharacter.png │ │ └── serviceWorker.js │ ├── svg.d.ts │ ├── .storybook │ │ ├── preview.ts │ │ └── main.ts │ ├── tsconfig.json │ ├── Dockerfile │ ├── vite.config.ts │ ├── .gitignore │ ├── index.html │ ├── tsconfig.node.json │ ├── tailwind.config.ts │ ├── tsconfig.app.json │ └── eslint.config.js └── backend │ ├── src │ ├── user │ │ ├── domain │ │ │ ├── theme.ts │ │ │ ├── role.ts │ │ │ ├── ouathType.ts │ │ │ └── user.entity.ts │ │ ├── constants │ │ │ └── randomNickname.ts │ │ ├── dto │ │ │ ├── userTheme.response.ts │ │ │ ├── user.request.ts │ │ │ └── user.response.ts │ │ └── user.module.ts │ ├── chat │ │ ├── domain │ │ │ ├── chatType.enum.ts │ │ │ ├── mention.entity.ts │ │ │ ├── like.entity.ts │ │ │ └── chat.entity.ts │ │ ├── dto │ │ │ ├── like.request.ts │ │ │ ├── chat.response.ts │ │ │ ├── chat.request.ts │ │ │ └── like.response.ts │ │ ├── decorator │ │ │ └── like.decorator.ts │ │ ├── chat.service.spec.ts │ │ ├── chat.module.ts │ │ └── mention.service.ts │ ├── alarm │ │ ├── dto │ │ │ ├── subscribe.response.ts │ │ │ ├── subscribe.request.ts │ │ │ ├── alarm.request.ts │ │ │ └── alarm.response.ts │ │ ├── domain │ │ │ ├── subscription.entity.ts │ │ │ └── alarm.entity.ts │ │ ├── alarm.module.ts │ │ ├── decorator │ │ │ └── wrong.decorator.ts │ │ ├── push.controller.ts │ │ └── alarm.subscriber.ts │ ├── stock │ │ ├── constants │ │ │ └── timeunit.ts │ │ ├── dto │ │ │ ├── stock.request.ts │ │ │ ├── stockView.request.ts │ │ │ ├── userStock.request.ts │ │ │ ├── stockDetail.response.ts │ │ │ └── stockIndexRate.response.ts │ │ ├── domain │ │ │ ├── kospiStock.entity.ts │ │ │ ├── FluctuationRankStock.entity.ts │ │ │ ├── userStock.entity.ts │ │ │ ├── stockDetail.entity.ts │ │ │ ├── stockLiveData.entity.ts │ │ │ └── stockData.entity.ts │ │ ├── cache │ │ │ └── stockData.cache.ts │ │ ├── decorator │ │ │ ├── stockData.decorator.ts │ │ │ └── stock.decorator.ts │ │ ├── stockDetail.service.ts │ │ └── stockRateIndex.service.ts │ ├── scraper │ │ ├── korea-stock-info │ │ │ ├── korea-stock-info.module.ts │ │ │ ├── dto │ │ │ │ └── master-download.dto.ts │ │ │ └── korea-stock-info.service.spec.ts │ │ ├── openapi │ │ │ ├── util │ │ │ │ ├── openapiCustom.error.ts │ │ │ │ └── queue.spec.ts │ │ │ ├── type │ │ │ │ ├── openapiUtil.type.ts │ │ │ │ ├── openapiPeriodData.ts │ │ │ │ └── openapiPeriodData.type.ts │ │ │ ├── config │ │ │ │ └── openapi.config.ts │ │ │ ├── constants │ │ │ │ └── query.ts │ │ │ ├── parse │ │ │ │ └── openapi.parser.ts │ │ │ └── api │ │ │ │ ├── openapiRankView.api.ts │ │ │ │ └── openapi.abstract.ts │ │ ├── scraper.module.ts │ │ └── domain │ │ │ └── openapiToken.entity.ts │ ├── common │ │ ├── dateEmbedded.entity.ts │ │ ├── decorator │ │ │ └── user.decorator.ts │ │ └── cache │ │ │ └── localCache.ts │ ├── auth │ │ ├── tester │ │ │ ├── testerAuth.service.ts │ │ │ ├── guard │ │ │ │ └── tester.guard.ts │ │ │ ├── strategy │ │ │ │ └── tester.strategy.ts │ │ │ └── testerAuth.controller.ts │ │ ├── session │ │ │ ├── session.guard.ts │ │ │ ├── session.serializer.ts │ │ │ ├── cookieParser.ts │ │ │ ├── websocketSession.service.ts │ │ │ └── webSocketSession.guard.ts │ │ ├── session.module.ts │ │ ├── google │ │ │ ├── guard │ │ │ │ └── google.guard.ts │ │ │ ├── googleAuth.controller.ts │ │ │ ├── googleAuth.service.ts │ │ │ └── strategy │ │ │ │ └── google.strategy.ts │ │ ├── auth.module.ts │ │ └── auth.controller.ts │ ├── configs │ │ ├── session.config.ts │ │ ├── swagger.config.ts │ │ ├── typeormConfig.ts │ │ └── logger.config.ts │ ├── utils │ │ └── date.ts │ ├── middlewares │ │ └── filter │ │ │ └── webSocketException.filter.ts │ ├── app.module.ts │ └── main.ts │ ├── tsconfig.build.json │ ├── nest-cli.json │ ├── test │ ├── jest-e2e.json │ └── app.e2e-spec.ts │ ├── Dockerfile │ ├── tsconfig.json │ └── .gitignore ├── .husky ├── pre-commit └── commit-msg ├── .github ├── pull_request_template.md ├── ISSUE_TEMPLATE │ ├── bug-issue.md │ └── feature_request.md └── workflows │ ├── close-issue.yml │ └── storybook.yml ├── .prettierrc ├── commitlint.config.js ├── tsconfig.json ├── .gitignore ├── package.json └── cz-config.js /packages/frontend/README.md: -------------------------------------------------------------------------------- 1 | # juchumjuchum-fe 2 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/home/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Home'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/login/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Login'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/stocks/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Stocks'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/my-page/index.ts: -------------------------------------------------------------------------------- 1 | export * from './MyPage'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/ui/alarm/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Alarm'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/ui/button/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Button'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/ui/input/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Input'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/ui/loader/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Loader'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/ui/modal/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Modal'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/ui/tooltip/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Tooltip'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/layouts/alarm/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Alarm'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/components/layouts/search/index.ts: -------------------------------------------------------------------------------- 1 | export * from './Search'; 2 | -------------------------------------------------------------------------------- /packages/frontend/src/apis/queries/auth/index.ts: -------------------------------------------------------------------------------- 1 | export * from './useGetLoginStatus'; 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npx eslint --fix 5 | -------------------------------------------------------------------------------- /packages/frontend/src/pages/home/Home.tsx: -------------------------------------------------------------------------------- 1 | export const Home = () => { 2 | return
에러가 발생했어요. 주춤주춤 팀을 찾아주세요.
23 |13 | 1개의 알림이 있어요. 14 |
15 |21 | 삼성전자의 현재가는 00원이에요. 22 |
23 |{children}
23 | 검색 결과가 없어요.
; 25 | } 26 | 27 | if (data) { 28 | return ( 29 |24 | 로그인 후 이용 가능해요. 25 |
26 | ); 27 | } 28 | 29 | if (!data || data?.length === 0) { 30 | return ( 31 |32 | 현재 설정된 알림이 없어요. 33 |
34 | ); 35 | } 36 | 37 | return data.map((alarm) => ( 38 |26 | 주식을 검색하세요. 27 |
28 | 39 |{name}
25 |{name}
15 |로그인 후 이용 가능해요.
; 36 | } 37 | 38 | if (!data) { 39 | return알림 정보를 불러오는 데 실패했어요.
; 40 | } 41 | 42 | if (data.length === 0) { 43 | return현재 설정된 알림이 없어요.
; 44 | } 45 | 46 | return data.map((alarm) => ( 47 |61 | {text} 62 |
63 |