diff --git a/.github/workflows/pr-slack-notify.yml b/.github/workflows/pr-slack-notify.yml index 0871dff1..14294d53 100644 --- a/.github/workflows/pr-slack-notify.yml +++ b/.github/workflows/pr-slack-notify.yml @@ -34,17 +34,24 @@ jobs: body='${{ github.event.pull_request.body }}' # Remove HTML comments and their content body=$(echo "$body" | sed 's///g') - # Remove empty lines and special characters - body=$(echo "$body" | grep -v '^$' | tr -d '\r') - # Replace newlines with actual newlines in Slack message - body=$(echo "$body" | tr '\n' ' ') + # Remove image markdown + body=$(echo "$body" | sed 's/]*>//g') + # Remove issue numbers + body=$(echo "$body" | sed 's/#[0-9]*//g') + # Clean up markdown headers and special characters + body=$(echo "$body" | sed 's/##/*/g' | tr -d '\r') + # Escape quotes and backslashes + body="${body//\\/\\\\}" + body="${body//\"/\\\"}" + # Convert newlines to spaces + body=$(echo "$body" | tr '\n' ' ' | sed 's/ */ /g') echo "body=${body}" >> $GITHUB_OUTPUT - name: Send Slack notification uses: 8398a7/action-slack@v3 with: status: custom - custom_payload: > + custom_payload: | { "blocks": [ { @@ -100,4 +107,4 @@ jobs: ] } env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} \ No newline at end of file diff --git a/frontend/package.json b/frontend/package.json index be0dad74..b7ac6ec8 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,6 +14,8 @@ "msw:init": "msw init public/" }, "dependencies": { + "@tanstack/react-query": "^5.59.20", + "axios": "^1.7.7", "eslint-plugin-react": "^7.37.2", "hls.js": "^1.5.17", "react": "^18.3.1", diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index e266b931..a7d2006f 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -3,22 +3,26 @@ import { ThemeProvider } from 'styled-components'; import { theme } from './styles/theme'; import { MainPage, ClientPage, HostPage } from './pages'; +import { QueryClientProvider } from '@tanstack/react-query'; +import { queryClient } from '@apis/index'; function App() { return ( - - - - } /> + + + + + } /> - } /> - } /> + } /> + } /> - } /> - } /> - - - + } /> + } /> + + + + ); } diff --git a/frontend/src/apis/index.ts b/frontend/src/apis/index.ts new file mode 100644 index 00000000..b39d2212 --- /dev/null +++ b/frontend/src/apis/index.ts @@ -0,0 +1,28 @@ +import { QueryClient, DefaultOptions } from '@tanstack/react-query'; +import axios from 'axios'; + +const BASE_URL = 'http://liboo.kr'; + +export const initFetchInstance = (baseURL: string) => + axios.create({ + baseURL, + timeout: 10000, + headers: { + Accept: 'application/json' + } + }); + +export const fetchInstance = () => initFetchInstance(BASE_URL); + +const defaultOptions: DefaultOptions = { + queries: { + retry: 3, + refetchOnMount: true, + refetchOnReconnect: true, + refetchOnWindowFocus: true + } +}; + +export const queryClient = new QueryClient({ + defaultOptions +}); diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json index 6a6e078f..bb22ab8b 100644 --- a/frontend/tsconfig.json +++ b/frontend/tsconfig.json @@ -16,7 +16,8 @@ "@pages/*": ["src/pages/*"], "@assets/*": ["src/assets/*"], "@styles/*": ["src/styles/*"], - "@type/*": ["src/type/*"] + "@type/*": ["src/type/*"], + "@apis/*": ["src/apis/*"] }, "types": ["vite/client"] }, diff --git a/yarn.lock b/yarn.lock index 4c6bd688..b2acd368 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2378,6 +2378,24 @@ __metadata: languageName: node linkType: hard +"@tanstack/query-core@npm:5.59.20": + version: 5.59.20 + resolution: "@tanstack/query-core@npm:5.59.20" + checksum: 10c0/c93a8d41e21db532e92c1c90916bec578729d32d1f39d655603b9e81a9d5aebc8588a4d6a75928e04d3ddc90e71a1f8dc066a61d0ba24108eaf60cc2ce024a2f + languageName: node + linkType: hard + +"@tanstack/react-query@npm:^5.59.20": + version: 5.59.20 + resolution: "@tanstack/react-query@npm:5.59.20" + dependencies: + "@tanstack/query-core": "npm:5.59.20" + peerDependencies: + react: ^18 || ^19 + checksum: 10c0/fc3342c3a26c51c866d54082d14f86b2f644847ea8f9051000e529a012ea5437e18e35f999fcc453b2eecb0faaf29bd1aaec0956587ade63ba02262d6737800a + languageName: node + linkType: hard + "@types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" @@ -2856,6 +2874,13 @@ __metadata: languageName: node linkType: hard +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + "available-typed-arrays@npm:^1.0.7": version: 1.0.7 resolution: "available-typed-arrays@npm:1.0.7" @@ -2883,6 +2908,17 @@ __metadata: languageName: node linkType: hard +"axios@npm:^1.7.7": + version: 1.7.7 + resolution: "axios@npm:1.7.7" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/4499efc89e86b0b49ffddc018798de05fab26e3bf57913818266be73279a6418c3ce8f9e934c7d2d707ab8c095e837fc6c90608fb7715b94d357720b5f568af7 + languageName: node + linkType: hard + "backend@workspace:backend": version: 0.0.0-use.local resolution: "backend@workspace:backend" @@ -3110,6 +3146,15 @@ __metadata: languageName: node linkType: hard +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -3297,6 +3342,13 @@ __metadata: languageName: node linkType: hard +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + "depd@npm:2.0.0": version: 2.0.0 resolution: "depd@npm:2.0.0" @@ -4100,6 +4152,16 @@ __metadata: languageName: node linkType: hard +"follow-redirects@npm:^1.15.6": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + languageName: node + linkType: hard + "for-each@npm:^0.3.3": version: 0.3.3 resolution: "for-each@npm:0.3.3" @@ -4119,6 +4181,17 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^4.0.0": + version: 4.0.1 + resolution: "form-data@npm:4.0.1" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8 + languageName: node + linkType: hard + "forwarded@npm:0.2.0": version: 0.2.0 resolution: "forwarded@npm:0.2.0" @@ -4138,6 +4211,7 @@ __metadata: resolution: "frontend@workspace:frontend" dependencies: "@eslint/js": "npm:^9.13.0" + "@tanstack/react-query": "npm:^5.59.20" "@types/react": "npm:^18.3.12" "@types/react-dom": "npm:^18.3.1" "@types/react-router-dom": "npm:^5.3.3" @@ -4145,6 +4219,7 @@ __metadata: "@typescript-eslint/eslint-plugin": "npm:^8.14.0" "@typescript-eslint/parser": "npm:^8.14.0" "@vitejs/plugin-react": "npm:^4.3.3" + axios: "npm:^1.7.7" eslint: "npm:^9.13.0" eslint-plugin-react: "npm:^7.37.2" eslint-plugin-react-hooks: "npm:^5.0.0" @@ -5141,7 +5216,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.12, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -5703,6 +5778,13 @@ __metadata: languageName: node linkType: hard +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + "punycode@npm:1.3.2": version: 1.3.2 resolution: "punycode@npm:1.3.2"