diff --git a/.github/auto_assign.yml b/.github/auto_assign.yml index 1acf262..d95e8fd 100644 --- a/.github/auto_assign.yml +++ b/.github/auto_assign.yml @@ -8,7 +8,6 @@ addAssignees: author reviewers: - cskime - gummmmmy0v0 - - KIMJUNHYEOK169 - nidor022 - onesiin diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 435f85d..82a02d5 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,15 +1,25 @@ -## #️⃣연관된 이슈 +## 📝 작업 내용 -> ex) #이슈번호, #이슈번호 +> 이번 PR에서 작업한 내용을 간략히 설명해주세요. -## 📝작업 내용 +## 📷 스크린샷 (선택) -> 이번 PR에서 작업한 내용을 간략히 설명해주세요(이미지 첨부 가능) +> 이번 PR에서 작업한 내용이 UI를 변경했다면 작업 결과물을 스크린샷으로 첨부해주세요. +> 스크린샷으로 작업한 결과물을 잘 보여주면 리뷰어가 프로젝트를 직접 실행해서 결과를 확인해야하는 수고를 줄여줄 수도 있습니다. -### 스크린샷 (선택) +## 🧐 해결해야 하는 문제 (선택) -## 💬리뷰 요구사항(선택) +> 이번 PR에서 구현하지 못했거나 개발하면서 어려움을 겪은 내용을 공유해주세요. +> 리뷰어와 겪은 문제를 공유하면 혼자 고민하는 것 보다 빠르게 문제를 해결할 수도 있습니다. -> 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요 +## 👀 새로 알게 된 내용 (선택) + +> 이번 PR을 작업하면서 새로 알게 된 내용을 간략하게 리뷰어와 공유해주세요. +> 리뷰어도 몰랐던 내용이라면 도움이 될 수 있고, 글로 작성하는 과정을 통해 기억에 더 오래 남길 수 있습니다. + +## 💬 리뷰어에게 남길 말 (선택) + +> 리뷰어가 특별히 봐주었으면 하는 부분이 있다면 작성해주세요. +> 위 4가지 항목 어디에도 해당되지 않는 애매한 내용은 여기에 작성해주세요. > > ex) 메서드 XXX의 이름을 더 잘 짓고 싶은데 혹시 좋은 명칭이 있을까요? diff --git a/.github/workflows/sync.yaml b/.github/workflows/sync.yaml new file mode 100644 index 0000000..737c68d --- /dev/null +++ b/.github/workflows/sync.yaml @@ -0,0 +1,31 @@ +name: Synchronize to forked repo +on: + push: + branches: + - develop +jobs: + sync: + name: Sync forked repo + runs-on: ubuntu-latest + + steps: + - name: Checkout develop + uses: actions/checkout@v4 + with: + token: ${{ secrets.AUTO_ACTIONS }} + fetch-depth: 0 + ref: develop + + - name: Add remote-url + run: | + git remote add forked-repo https://cskime:${{ secrets.AUTO_ACTIONS }}@github.com/cskime/rolling + git config user.name cskime + git config user.email ${{ secrets.EMAIL }} + + - name: Push changes to forked-repo + run: | + git push -f forked-repo develop + + - name: Clean up + run: | + git remote remove forked-repo diff --git a/index.html b/index.html index 010885c..6a716f4 100644 --- a/index.html +++ b/index.html @@ -3,10 +3,42 @@ + + + + + + + + Rolling
+ +
+ + + + diff --git a/package-lock.json b/package-lock.json index d001ce6..c9389d3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,8 +8,14 @@ "name": "rolling", "version": "0.0.0", "dependencies": { + "axios": "^1.11.0", + "emoji-picker-react": "^4.13.2", "react": "^19.1.1", - "react-dom": "^19.1.1" + "react-dom": "^19.1.1", + "react-quill-new": "^3.6.0", + "react-router": "^7.8.0", + "react-router-dom": "^7.8.0", + "styled-components": "^6.1.19" }, "devDependencies": { "@eslint/js": "^9.32.0", @@ -319,6 +325,27 @@ "node": ">=6.9.0" } }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.2.2.tgz", + "integrity": "sha512-uNsoYd37AFmaCdXlg6EYD1KaPOaRWRByMCYzbKUX4+hhMfrxdVSelShywL4JVaAeM/eHUOSprYBQls+/neX3pw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.8.1" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.8.1.tgz", + "integrity": "sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==", + "license": "MIT" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==", + "license": "MIT" + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.25.8", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", @@ -1386,6 +1413,12 @@ "@types/react": "^19.0.0" } }, + "node_modules/@types/stylis": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/@types/stylis/-/stylis-4.2.5.tgz", + "integrity": "sha512-1Xve+NMN7FWjY14vLoY5tL3BVEQ/n42YLwaqJIPYhotZ9uBHt87VceMwWQpzmdEt2TNXIorIFG+YeCUUW7RInw==", + "license": "MIT" + }, "node_modules/@vitejs/plugin-react": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.7.0.tgz", @@ -1470,6 +1503,23 @@ "dev": true, "license": "Python-2.0" }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.11.0.tgz", + "integrity": "sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1521,6 +1571,19 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1531,6 +1594,15 @@ "node": ">=6" } }, + "node_modules/camelize": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz", + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/caniuse-lite": { "version": "1.0.30001733", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001733.tgz", @@ -1589,6 +1661,18 @@ "dev": true, "license": "MIT" }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -1603,6 +1687,15 @@ "dev": true, "license": "MIT" }, + "node_modules/cookie": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.2.tgz", + "integrity": "sha512-9Kr/j4O16ISv8zBBhJoi4bXOYNTkFLOqSL3UDB0njXxCXNezjeyVrJyGOWtgfs/q2km1gwBcfH8q1yEGoMYunA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -1618,11 +1711,30 @@ "node": ">= 8" } }, + "node_modules/css-color-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz", + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/css-to-react-native": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz", + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==", + "license": "MIT", + "dependencies": { + "camelize": "^1.0.0", + "css-color-keywords": "^1.0.0", + "postcss-value-parser": "^4.0.2" + } + }, "node_modules/csstype": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", - "dev": true, "license": "MIT" }, "node_modules/debug": { @@ -1650,6 +1762,29 @@ "dev": true, "license": "MIT" }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/electron-to-chromium": { "version": "1.5.199", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.199.tgz", @@ -1657,6 +1792,66 @@ "dev": true, "license": "ISC" }, + "node_modules/emoji-picker-react": { + "version": "4.13.2", + "resolved": "https://registry.npmjs.org/emoji-picker-react/-/emoji-picker-react-4.13.2.tgz", + "integrity": "sha512-azaJQLTshEOZVhksgU136izJWJyZ4Clx6xQ6Vctzk1gOdPPAUbTa/JYDwZJ8rh97QxnjpyeftXl99eRlYr3vNA==", + "license": "MIT", + "dependencies": { + "flairup": "1.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { "version": "0.25.8", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", @@ -1900,6 +2095,12 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", @@ -1907,6 +2108,12 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "license": "Apache-2.0" + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -1966,6 +2173,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flairup": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/flairup/-/flairup-1.0.0.tgz", + "integrity": "sha512-IKlE+pNvL2R+kVL1kEhUYqRxVqeFnjiIvHWDMLFXNaqyUdFXQM2wte44EfMYJNHkW16X991t2Zg8apKkhv7OBA==", + "license": "MIT" + }, "node_modules/flat-cache": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", @@ -1987,6 +2200,42 @@ "dev": true, "license": "ISC" }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -2002,6 +2251,15 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -2012,6 +2270,43 @@ "node": ">=6.9.0" } }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -2038,6 +2333,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2048,6 +2355,45 @@ "node": ">=8" } }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ignore": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", @@ -2222,6 +2568,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -2239,6 +2604,36 @@ "yallist": "^3.0.2" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2263,7 +2658,6 @@ "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "dev": true, "funding": [ { "type": "github", @@ -2342,6 +2736,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parchment": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/parchment/-/parchment-3.0.0.tgz", + "integrity": "sha512-HUrJFQ/StvgmXRcQ1ftY6VEZUq3jA2t9ncFN4F84J/vN0/FPpQF+8FKXb3l6fLces6q0uOHj6NJn+2xvZnxO6A==", + "license": "BSD-3-Clause" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2379,7 +2779,6 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", - "dev": true, "license": "ISC" }, "node_modules/picomatch": { @@ -2424,6 +2823,12 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2434,6 +2839,12 @@ "node": ">= 0.8.0" } }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -2444,6 +2855,35 @@ "node": ">=6" } }, + "node_modules/quill": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/quill/-/quill-2.0.3.tgz", + "integrity": "sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==", + "license": "BSD-3-Clause", + "dependencies": { + "eventemitter3": "^5.0.1", + "lodash-es": "^4.17.21", + "parchment": "^3.0.0", + "quill-delta": "^5.1.0" + }, + "engines": { + "npm": ">=8.2.3" + } + }, + "node_modules/quill-delta": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/quill-delta/-/quill-delta-5.1.0.tgz", + "integrity": "sha512-X74oCeRI4/p0ucjb5Ma8adTXd9Scumz367kkMK5V/IatcX6A0vlgLgKbzXWy5nZmCGeNJm2oQX0d2Eqj+ZIlCA==", + "license": "MIT", + "dependencies": { + "fast-diff": "^1.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.isequal": "^4.5.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, "node_modules/react": { "version": "19.1.1", "resolved": "https://registry.npmjs.org/react/-/react-19.1.1.tgz", @@ -2465,6 +2905,21 @@ "react": "^19.1.1" } }, + "node_modules/react-quill-new": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/react-quill-new/-/react-quill-new-3.6.0.tgz", + "integrity": "sha512-weU6YfB2+7Cujw5Hjgmi0aN/qJd3B6ADWrxgUJMp2MO3tEvKX5kfB0sg3P0UdOVfU0z8icsKFzlnEIpeW1mLhw==", + "license": "MIT", + "dependencies": { + "lodash-es": "^4.17.21", + "quill": "~2.0.2" + }, + "peerDependencies": { + "quill-delta": "^5.1.0", + "react": "^16 || ^17 || ^18 || ^19", + "react-dom": "^16 || ^17 || ^18 || ^19" + } + }, "node_modules/react-refresh": { "version": "0.17.0", "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.17.0.tgz", @@ -2475,6 +2930,44 @@ "node": ">=0.10.0" } }, + "node_modules/react-router": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.8.0.tgz", + "integrity": "sha512-r15M3+LHKgM4SOapNmsH3smAizWds1vJ0Z9C4mWaKnT9/wD7+d/0jYcj6LmOvonkrO4Rgdyp4KQ/29gWN2i1eg==", + "license": "MIT", + "dependencies": { + "cookie": "^1.0.1", + "set-cookie-parser": "^2.6.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + } + } + }, + "node_modules/react-router-dom": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-7.8.0.tgz", + "integrity": "sha512-ntInsnDVnVRdtSu6ODmTQ41cbluak/ENeTif7GBce0L6eztFg6/e1hXAysFQI8X25C8ipKmT9cClbJwxx3Kaqw==", + "license": "MIT", + "dependencies": { + "react-router": "7.8.0" + }, + "engines": { + "node": ">=20.0.0" + }, + "peerDependencies": { + "react": ">=18", + "react-dom": ">=18" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2541,6 +3034,18 @@ "semver": "bin/semver.js" } }, + "node_modules/set-cookie-parser": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" + }, + "node_modules/shallowequal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -2568,7 +3073,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -2587,6 +3091,68 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/styled-components": { + "version": "6.1.19", + "resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.19.tgz", + "integrity": "sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==", + "license": "MIT", + "dependencies": { + "@emotion/is-prop-valid": "1.2.2", + "@emotion/unitless": "0.8.1", + "@types/stylis": "4.2.5", + "css-to-react-native": "3.2.0", + "csstype": "3.1.3", + "postcss": "8.4.49", + "shallowequal": "1.1.0", + "stylis": "4.3.2", + "tslib": "2.6.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/styled-components" + }, + "peerDependencies": { + "react": ">= 16.8.0", + "react-dom": ">= 16.8.0" + } + }, + "node_modules/styled-components/node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/stylis": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.2.tgz", + "integrity": "sha512-bhtUjWd/z6ltJiQwg0dUfxEJ+W+jdqQd8TbWLWyeIJHlnsqmGLRFFd8e5mA0AZi/zx90smXRlN66YMTcaSFifg==", + "license": "MIT" + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -2617,6 +3183,12 @@ "url": "https://github.com/sponsors/SuperchupuDev" } }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", diff --git a/package.json b/package.json index 3653c72..e5304ea 100644 --- a/package.json +++ b/package.json @@ -10,8 +10,14 @@ "preview": "vite preview" }, "dependencies": { + "axios": "^1.11.0", + "emoji-picker-react": "^4.13.2", "react": "^19.1.1", - "react-dom": "^19.1.1" + "react-dom": "^19.1.1", + "react-quill-new": "^3.6.0", + "react-router": "^7.8.0", + "react-router-dom": "^7.8.0", + "styled-components": "^6.1.19" }, "devDependencies": { "@eslint/js": "^9.32.0", diff --git a/src/api/client.js b/src/api/client.js new file mode 100644 index 0000000..896de2d --- /dev/null +++ b/src/api/client.js @@ -0,0 +1,15 @@ +import axios from "axios"; + +const timeout = 5000; + +const baseClient = axios.create({ + baseURL: import.meta.env.VITE_API_BASE_URL, + timeout, +}); + +const apiClient = axios.create({ + baseURL: `${import.meta.env.VITE_API_BASE_URL}/18-3`, + timeout, +}); + +export { apiClient, baseClient }; diff --git a/src/app.jsx b/src/app.jsx index 2580dee..e056436 100644 --- a/src/app.jsx +++ b/src/app.jsx @@ -1,5 +1,68 @@ +import { BrowserRouter, Route, Routes } from "react-router-dom"; +import PortalProvider from "./components/portal/portal-provider"; +import ContentLayout from "./layouts/content-layout"; +import OnboardingLayout from "./layouts/onboarding-layout"; +import CreatePostPage from "./pages/create-post-page"; +import MainPage from "./pages/main-page"; +import RollingPaperListPage from "./pages/rolling-paper-list-page"; +import MessagesPage from "./pages/messages-page"; +import SendMessagePage from "./pages/send-message-page"; +import TestApiPage from "./tests/test-api-page"; +import TestComponentsPage from "./tests/test-components-page"; + +function Provider({ children }) { + return {children}; +} + function App() { - return

Hello, world!

; + return ( + + + + + + + } + /> + + + + } + /> + + + + + } + /> + + } /> + } /> + + + + } + /> + + + } /> + } /> + + + + ); } export default App; diff --git a/src/assets/ic-check-circle-green.svg b/src/assets/ic-check-circle-green.svg new file mode 100644 index 0000000..18be8ec --- /dev/null +++ b/src/assets/ic-check-circle-green.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/ic-check.svg b/src/assets/ic-check.svg new file mode 100644 index 0000000..e5806ba --- /dev/null +++ b/src/assets/ic-check.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/ic-chevron-down.svg b/src/assets/ic-chevron-down.svg new file mode 100644 index 0000000..412d030 --- /dev/null +++ b/src/assets/ic-chevron-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/ic-chevron-left.svg b/src/assets/ic-chevron-left.svg new file mode 100644 index 0000000..eb1b8f6 --- /dev/null +++ b/src/assets/ic-chevron-left.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/ic-chevron-right.svg b/src/assets/ic-chevron-right.svg new file mode 100644 index 0000000..16a36c8 --- /dev/null +++ b/src/assets/ic-chevron-right.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/ic-chevron-up.svg b/src/assets/ic-chevron-up.svg new file mode 100644 index 0000000..536315f --- /dev/null +++ b/src/assets/ic-chevron-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/ic-face-smile-add.svg b/src/assets/ic-face-smile-add.svg new file mode 100644 index 0000000..be50156 --- /dev/null +++ b/src/assets/ic-face-smile-add.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/ic-person.svg b/src/assets/ic-person.svg new file mode 100644 index 0000000..9aa412e --- /dev/null +++ b/src/assets/ic-person.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/ic-plus.svg b/src/assets/ic-plus.svg new file mode 100644 index 0000000..27c0fd4 --- /dev/null +++ b/src/assets/ic-plus.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/assets/ic-share.svg b/src/assets/ic-share.svg new file mode 100644 index 0000000..f1a707c --- /dev/null +++ b/src/assets/ic-share.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/ic-trash.svg b/src/assets/ic-trash.svg new file mode 100644 index 0000000..3735eb8 --- /dev/null +++ b/src/assets/ic-trash.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/ic-xmark.svg b/src/assets/ic-xmark.svg new file mode 100644 index 0000000..c490a80 --- /dev/null +++ b/src/assets/ic-xmark.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 0000000..43d1c8e --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/src/components/avatar/avatar-size.js b/src/components/avatar/avatar-size.js new file mode 100644 index 0000000..9bb1492 --- /dev/null +++ b/src/components/avatar/avatar-size.js @@ -0,0 +1,8 @@ +const AVATAR_SIZE = Object.freeze({ + large: 80, + medium: 56, + small: 40, + extraSmall: 28, +}); + +export default AVATAR_SIZE; diff --git a/src/components/avatar/avatar.jsx b/src/components/avatar/avatar.jsx new file mode 100644 index 0000000..d5146e8 --- /dev/null +++ b/src/components/avatar/avatar.jsx @@ -0,0 +1,59 @@ +import styled, { css } from "styled-components"; +import defaultAvatarImage from "../../assets/ic-person.svg"; +import Colors from "../color/colors"; +import AVATAR_SIZE from "./avatar-size"; + +const borderWidth = { + [AVATAR_SIZE.large]: 0, + [AVATAR_SIZE.medium]: 1, + [AVATAR_SIZE.small]: 1, + [AVATAR_SIZE.extraSmall]: 1.5, +}; + +const avatarStyle = css` + width: ${({ $size }) => $size}px; + height: ${({ $size }) => $size}px; + border-radius: ${({ $size }) => $size / 2}px; + overflow: hidden; +`; + +const StyledAvatar = styled.div` + ${avatarStyle} + border: ${({ $size }) => borderWidth[`${$size}`]}px solid ${({ $color }) => + $color}; + + img { + width: 100%; + height: 100%; + } +`; + +const StyledDefaultAvatar = styled.div` + ${avatarStyle} + background-color: ${Colors.gray(300)}; + display: flex; + justify-content: center; + align-items: center; + + img { + width: ${({ $size }) => $size * 0.4}px; + height: ${({ $size }) => $size * 0.4}px; + } +`; + +function Avatar({ + source, + size = AVATAR_SIZE.medium, + color = Colors.gray(200), +}) { + const img = 사용자 사진; + return source ? ( + + {img} + + ) : ( + {img} + ); +} + +export default Avatar; diff --git a/src/components/badge/badge-type.js b/src/components/badge/badge-type.js new file mode 100644 index 0000000..c5580bd --- /dev/null +++ b/src/components/badge/badge-type.js @@ -0,0 +1,8 @@ +const BADGE_TYPE = Object.freeze({ + 지인: "지인", + 동료: "동료", + 가족: "가족", + 친구: "친구", +}); + +export default BADGE_TYPE; diff --git a/src/components/badge/badge.jsx b/src/components/badge/badge.jsx new file mode 100644 index 0000000..a206aff --- /dev/null +++ b/src/components/badge/badge.jsx @@ -0,0 +1,38 @@ +import styled from "styled-components"; +import Colors from "../color/colors"; +import BADGE_TYPE from "./badge-type"; + +const styles = { + [BADGE_TYPE.지인]: { + backgroundColor: Colors.beige(100), + color: Colors.beige(500), + }, + [BADGE_TYPE.동료]: { + backgroundColor: Colors.purple(100), + color: Colors.purple(600), + }, + [BADGE_TYPE.가족]: { + backgroundColor: Colors.green(100), + color: Colors.green(500), + }, + [BADGE_TYPE.친구]: { + backgroundColor: Colors.blue(100), + color: Colors.blue(500), + }, +}; + +const StyledBadge = styled.div` + background-color: ${({ $type }) => styles[$type].backgroundColor}; + color: ${({ $type }) => styles[$type].color}; + border-radius: 4px; + padding: 0 8px; + font-size: 14px; + font-weight: 400; + line-height: 20px; +`; + +function Badge({ type }) { + return {type}; +} + +export default Badge; diff --git a/src/components/badge/emoji-badge.jsx b/src/components/badge/emoji-badge.jsx new file mode 100644 index 0000000..45c3bba --- /dev/null +++ b/src/components/badge/emoji-badge.jsx @@ -0,0 +1,40 @@ +import styled from "styled-components"; +import { media } from "../../utils/media"; + +const StyledEmojiBadge = styled.div` + background-color: rgba(0, 0, 0, 0.54); + color: white; + padding: 8px 12px; + border-radius: 32px; + + ${media.mobile} { + padding: 4px 8px; + } +`; + +const Content = styled.div` + display: flex; + gap: 4px; + font-size: 16px; + font-weight: 400; + line-height: 20px; + + ${media.mobile} { + gap: 6px; + font-size: 14px; + line-height: 20px; + } +`; + +function EmojiBadge({ emoji, count }) { + return ( + + + {emoji} + {count} + + + ); +} + +export default EmojiBadge; diff --git a/src/components/button/arrow-button-direction.js b/src/components/button/arrow-button-direction.js new file mode 100644 index 0000000..bf595af --- /dev/null +++ b/src/components/button/arrow-button-direction.js @@ -0,0 +1,6 @@ +const ARROW_BUTTON_DIRECTION = Object.freeze({ + left: "left", + right: "right", +}); + +export default ARROW_BUTTON_DIRECTION; diff --git a/src/components/button/arrow-button.jsx b/src/components/button/arrow-button.jsx new file mode 100644 index 0000000..6adcf64 --- /dev/null +++ b/src/components/button/arrow-button.jsx @@ -0,0 +1,36 @@ +import styled from "styled-components"; +import arrowLeftImage from "../../assets/ic-chevron-left.svg"; +import arrowRightImage from "../../assets/ic-chevron-right.svg"; +import Colors from "../color/colors"; +import ARROW_BUTTON_DIRECTION from "./arrow-button-direction"; + +const arrowImg = { + [ARROW_BUTTON_DIRECTION.left]: arrowLeftImage, + [ARROW_BUTTON_DIRECTION.right]: arrowRightImage, +}; + +const StyledArrowButton = styled.button` + background: #ffffff; + border: 1px solid ${Colors.gray(300)}; + width: 40px; + height: 40px; + border-radius: 20px; + padding: 12px; + box-shadow: 0 4px 8px 0px rgba(0, 0, 0, 0.08); + cursor: pointer; + + img { + width: 100%; + height: 100%; + } +`; + +function ArrowButton({ direction }) { + return ( + + 화살표 + + ); +} + +export default ArrowButton; diff --git a/src/components/button/button-size.js b/src/components/button/button-size.js new file mode 100644 index 0000000..c2aed8a --- /dev/null +++ b/src/components/button/button-size.js @@ -0,0 +1,8 @@ +const BUTTON_SIZE = Object.freeze({ + large: "large", + medium: "medium", + small: "small", + extraSmall: "extraSmall", +}); + +export default BUTTON_SIZE; diff --git a/src/components/button/button.jsx b/src/components/button/button.jsx new file mode 100644 index 0000000..51a75dd --- /dev/null +++ b/src/components/button/button.jsx @@ -0,0 +1,251 @@ +import styled from "styled-components"; +import Colors from "../color/colors"; +import BUTTON_SIZE from "./button-size"; + +const styles = { + minWidth: { + [BUTTON_SIZE.large]: "160px", + [BUTTON_SIZE.medium]: "90px", + [BUTTON_SIZE.small]: "90px", + [BUTTON_SIZE.extraSmall]: "90px", + }, + height: (hasIcon) => ({ + [BUTTON_SIZE.large]: "56px", + [BUTTON_SIZE.medium]: "40px", + [BUTTON_SIZE.small]: "36px", + [BUTTON_SIZE.extraSmall]: hasIcon ? "32px" : "28px", + }), + fontSize: { + [BUTTON_SIZE.large]: "18px", + [BUTTON_SIZE.medium]: "16px", + [BUTTON_SIZE.small]: "16px", + [BUTTON_SIZE.extraSmall]: "14px", + }, + fontWeight: { + [BUTTON_SIZE.large]: "700", + [BUTTON_SIZE.medium]: "400", + [BUTTON_SIZE.small]: "400", + [BUTTON_SIZE.extraSmall]: "400", + }, + lineHeight: { + [BUTTON_SIZE.large]: "28px", + [BUTTON_SIZE.medium]: "26px", + [BUTTON_SIZE.small]: "24px", + [BUTTON_SIZE.extraSmall]: "20px", + }, + borderRadius: { + [BUTTON_SIZE.large]: "12px", + [BUTTON_SIZE.medium]: "6px", + [BUTTON_SIZE.small]: "6px", + [BUTTON_SIZE.extraSmall]: "6px", + }, +}; + +const BaseButton = styled.button` + border: none; + cursor: ${({ disabled }) => (disabled ? "default" : "pointer")}; + padding: 0 16px; + font-size: ${({ $size }) => styles.fontSize[$size]}; + font-weight: ${({ $size }) => styles.fontWeight[$size]}; + line-height: ${({ $size }) => styles.lineHeight[$size]}; + border-radius: ${({ $size }) => styles.borderRadius[$size]}; + height: ${({ $size, $icon }) => styles.height($icon)[$size]}; + + span { + display: block; + min-width: ${({ $size }) => styles.minWidth[$size]}; + } +`; + +/* Primary Button */ + +const StyledPrimaryButton = styled(BaseButton)` + padding: 0 24px; + background-color: ${Colors.purple(600)}; + color: white; + + &:hover { + background-color: ${Colors.purple(700)}; + } + + &:active { + background-color: ${Colors.purple(800)}; + } + + &:focus { + background-color: ${Colors.purple(800)}; + box-shadow: 0 0 0 1px ${Colors.purple(900)} inset; + } + + &:disabled { + background-color: ${Colors.gray(300)}; + } +`; + +function PrimaryButton({ title, size, ...props }) { + return ( + + {title} + + ); +} + +/* Secondary Button */ + +const StyledSecondaryButton = styled(BaseButton)` + background-color: white; + color: ${Colors.purple(700)}; + box-shadow: 0 0 0 1px ${Colors.purple(600)} inset; + + &:hover { + background-color: ${Colors.purple(100)}; + color: ${Colors.purple(600)}; + box-shadow: 0 0 0 1px ${Colors.purple(700)} inset; + } + + &:active { + background-color: ${Colors.purple(100)}; + color: ${Colors.purple(600)}; + box-shadow: 0 0 0 1px ${Colors.purple(800)} inset; + } + + &:focus { + box-shadow: 0 0 0 1px ${Colors.purple(800)} inset; + } + + &:disabled { + background-color: ${Colors.gray(300)}; + color: white; + box-shadow: none; + } +`; + +function SecondaryButton({ title, size, ...props }) { + return ( + + {title} + + ); +} + +/* Outlined Button */ + +const StyledOutlinedButton = styled(BaseButton)` + background-color: white; + color: ${Colors.gray(900)}; + box-shadow: 0 0 0 1px ${Colors.gray(300)} inset; + padding: ${({ $title }) => ($title ? "0 16px" : "0 6px")}; + width: ${({ $icon, $size, $title }) => + $title ? "auto" : styles.height($icon)[$size]}; + + &:hover { + background-color: ${Colors.gray(100)}; + } + + &:active { + background-color: ${Colors.gray(100)}; + } + + &:focus { + box-shadow: 0 0 0 1px ${Colors.gray(500)} inset; + } + + &:disabled { + background-color: ${Colors.gray(300)}; + color: white; + box-shadow: none; + } +`; + +const stylesWithIcon = { + iconSize: { + [BUTTON_SIZE.medium]: "24px", + [BUTTON_SIZE.small]: "24px", + [BUTTON_SIZE.extraSmall]: "20px", + }, + gap: { + [BUTTON_SIZE.medium]: "10px", + [BUTTON_SIZE.small]: "4px", + [BUTTON_SIZE.extraSmall]: "4px", + }, +}; + +const IconTitleContent = styled.div` + display: flex; + justify-content: center; + align-items: center; + gap: ${({ $size }) => stylesWithIcon.gap[$size]}; +`; + +const Icon = styled.div` + width: ${({ $size }) => stylesWithIcon.iconSize[$size]}; + height: ${({ $size }) => stylesWithIcon.iconSize[$size]}; + + img { + width: 100%; + height: 100%; + + ${({ $disabled }) => + $disabled + ? "filter: invert(100%) sepia(0%) saturate(1%) hue-rotate(5deg) brightness(105%) contrast(101%);" + : ""} + } +`; + +function OutlinedButton({ className, title, icon, size, ...props }) { + return ( + + {icon && size !== BUTTON_SIZE.large ? ( + + + 버튼 아이콘 + + {title &&
{title}
} +
+ ) : ( + {title} + )} +
+ ); +} + +/* Dangerous Button */ + +const StyledDangerousButton = styled(BaseButton)` + padding: 0 24px; + background-color: ${Colors.red(600)}; + color: white; + + &:hover { + background-color: ${Colors.red(700)}; + } + + &:active { + background-color: ${Colors.red(800)}; + } + + &:focus { + background-color: ${Colors.red(800)}; + box-shadow: 0 0 0 1px ${Colors.red(900)} inset; + } + + &:disabled { + background-color: ${Colors.gray(300)}; + } +`; + +function DangerousButton({ title, size, ...props }) { + return ( + + {title} + + ); +} + +export { DangerousButton, OutlinedButton, PrimaryButton, SecondaryButton }; diff --git a/src/components/button/toggle-button.jsx b/src/components/button/toggle-button.jsx new file mode 100644 index 0000000..cf805d2 --- /dev/null +++ b/src/components/button/toggle-button.jsx @@ -0,0 +1,58 @@ +import { useState } from "react"; +import styled from "styled-components"; +import Colors from "../color/colors"; + +const StyledToggleButton = styled.div` + background-color: ${Colors.gray(100)}; + border-radius: 6px; +`; + +const ToggleItem = styled.button` + background: ${({ $selected }) => ($selected ? "white" : "none")}; + border: none; + color: ${({ $selected }) => + $selected ? Colors.purple(700) : Colors.gray(900)}; + box-shadow: ${({ $selected }) => + $selected ? `0 0 0 2px ${Colors.purple(600)} inset` : "none"}; + border-radius: 6px; + padding: 0 16px; + height: 40px; + cursor: pointer; + + span { + display: block; + min-width: 90px; + font-size: 16px; + font-weight: ${({ $selected }) => ($selected ? 700 : 400)}; + } +`; + +function ToggleButton({ value, options = [], onChange }) { + const [selected, setSelected] = useState(value); + + const handleOptionClick = (option, index) => { + setSelected(option); + + if (onChange) { + onChange(option, index); + } + }; + + return ( + + {options.map((option, index) => ( + + handleOptionClick(event.target.textContent, index) + } + > + {option} + + ))} + + ); +} + +export default ToggleButton; diff --git a/src/components/color/background-color.js b/src/components/color/background-color.js new file mode 100644 index 0000000..8c996ab --- /dev/null +++ b/src/components/color/background-color.js @@ -0,0 +1,10 @@ +import Colors from "./colors"; + +const BACKGROUND_COLOR = Object.freeze({ + beige: Colors.beige(200), + purple: Colors.purple(200), + blue: Colors.blue(200), + green: Colors.green(200), +}); + +export default BACKGROUND_COLOR; diff --git a/src/components/color/colors.js b/src/components/color/colors.js new file mode 100644 index 0000000..3560f9c --- /dev/null +++ b/src/components/color/colors.js @@ -0,0 +1,28 @@ +const shade = ({ min = 100, max = 900, value }) => { + return Math.min(Math.max(min, value), max); +}; + +const Colors = { + purple: function (value) { + return `var(--color-purple-${shade({ value })})`; + }, + beige: function (value) { + return `var(--color-beige-${shade({ max: 500, value })})`; + }, + blue: function (value) { + return `var(--color-blue-${shade({ max: 500, value })})`; + }, + green: function (value) { + return `var(--color-green-${shade({ max: 500, value })})`; + }, + gray: function (value) { + return `var(--color-gray-${shade({ value })})`; + }, + red: function (value) { + return `var(--color-red-${shade({ value })})`; + }, + error: "var(--color-error)", + surface: "var(--color-surface)", +}; + +export default Colors; diff --git a/src/components/header/header.jsx b/src/components/header/header.jsx new file mode 100644 index 0000000..3d3fe46 --- /dev/null +++ b/src/components/header/header.jsx @@ -0,0 +1,37 @@ +import styled from "styled-components"; +import logoImage from "../../assets/logo.svg"; +import { media } from "../../utils/media"; + +const HeaderContent = styled.div` + width: 100%; + max-width: 1200px; + display: flex; + justify-content: space-between; + align-items: center; +`; + +const StyledHeader = styled.header` + display: flex; + justify-content: center; + align-items: center; + height: 64px; + border-bottom: 1px solid #ededed; + padding: 0 24px; + + ${media.mobile} { + padding: 0 16px; + } +`; + +function Header({ className, children }) { + return ( + + + 로고 +
{children}
+
+
+ ); +} + +export default Header; diff --git a/src/components/image/card-background.jsx b/src/components/image/card-background.jsx new file mode 100644 index 0000000..6f9cb15 --- /dev/null +++ b/src/components/image/card-background.jsx @@ -0,0 +1,55 @@ +import React from "react"; +import styled from "styled-components"; +import SpinnerOverlay from "../loading/loading"; +import { useImageLodeChecker } from "../../hooks/use-image-loader"; + +const backgroundColors = { + beige: "#FFE2AD", + purple: "#ECD9FF", + green: "#D0F5C3", + blue: "#B1E4FF", +}; + +const getBackground = ($imageURL, $color, $overlayOn) => { + return $imageURL + ? `${ + $overlayOn ? "linear-gradient(rgba(0,0,0,0.4), rgba(0,0,0,0.4)), " : "" + }url(${$imageURL}) center/cover no-repeat` + : backgroundColors[$color] || "white"; +}; + +const CardContainer = styled.div` + position: relative; + width: 100%; + height: 100%; +`; + +const CardImage = styled.div` + background: ${({ $imageURL, $color, $overlayOn }) => + getBackground($imageURL, $color, $overlayOn)}; + z-index: 0; +`; + +const CardBackground = ({ + backgroundImageURL, + backgroundColor, + overlayOn = false, + ...props +}) => { + const noNeedToLoad = !backgroundImageURL ? true : false; + const isImageLoaded = useImageLodeChecker(backgroundImageURL, noNeedToLoad); + + return ( + + {!isImageLoaded && } + + + ); +}; + +export default CardBackground; diff --git a/src/components/loading/loading.jsx b/src/components/loading/loading.jsx new file mode 100644 index 0000000..bca7802 --- /dev/null +++ b/src/components/loading/loading.jsx @@ -0,0 +1,29 @@ +import React from "react"; +import styled, { keyframes } from "styled-components"; + +const spin = keyframes` + 0% { transform: rotate(0deg); } + 100% { transform: rotate(360deg); } +`; + +const Spinner = styled.div` + width: ${({ size }) => size || "50px"}; + height: ${({ size }) => size || "50px"}; + border: ${({ thickness }) => thickness || "4px"} solid #f3f3f313; + border-top: ${({ thickness }) => thickness || "4px"} solid + var(--color-purple-700); + + border-radius: 50%; + animation: ${spin} 1s linear infinite; + position: absolute; + justify-self: anchor-center; + align-self: anchor-center; + transform: translate(-50%, -50%); + z-index: 9999; +`; + +const SpinnerOverlay = ({ size, thickness }) => { + return ; +}; + +export default SpinnerOverlay; diff --git a/src/components/modal/modal-dialog.jsx b/src/components/modal/modal-dialog.jsx new file mode 100644 index 0000000..45a9ddc --- /dev/null +++ b/src/components/modal/modal-dialog.jsx @@ -0,0 +1,40 @@ +import styled from "styled-components"; +import { PrimaryButton } from "../button/button"; +import BUTTON_SIZE from "../button/button-size"; +import Colors from "../color/colors"; + +const Title = styled.h2` + margin: 0; + color: ${Colors.gray(600)}; +`; + +const Content = styled.p` + margin: 0; + color: ${Colors.gray(600)}; +`; + +const Action = styled.div` + display: flex; + justify-content: flex-end; + gap: 16px; +`; + +const StyledAlertDialog = styled.div` + display: flex; + flex-direction: column; + gap: 24px; +`; + +function ModalDialog({ title, content, action }) { + return ( + + {title} + {content && {content}} + + {action ?? } + + + ); +} + +export default ModalDialog; diff --git a/src/components/modal/modal.jsx b/src/components/modal/modal.jsx new file mode 100644 index 0000000..631f61a --- /dev/null +++ b/src/components/modal/modal.jsx @@ -0,0 +1,50 @@ +import styled from "styled-components"; +import Portal from "../portal/portal"; + +const Content = styled.div` + width: 100%; + display: flex; + flex-direction: column; + gap: 24px; +`; + +const StyledModal = styled.div` + background-color: white; + width: 600px; + border-radius: 16px; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.08); + padding: 40px; + display: flex; + flex-direction: column; + align-items: center; +`; + +const ModalContainer = styled.div` + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.6); + display: flex; + justify-content: center; + align-items: center; +`; + +function Modal({ shows, children }) { + return ( + <> + {shows && ( + + + + {children} + + + + )} + + ); +} + +export default Modal; diff --git a/src/components/option/background-select.jsx b/src/components/option/background-select.jsx new file mode 100644 index 0000000..0e734cb --- /dev/null +++ b/src/components/option/background-select.jsx @@ -0,0 +1,100 @@ +import { useEffect, useState } from "react"; +import styled from "styled-components"; +import CheckImage from "../../assets/ic-check.svg"; +import { OutlinedButton } from "../button/button"; +import BUTTON_SIZE from "../button/button-size"; +import { media } from "../../utils/media"; +import BACKGROUND_COLOR from "../color/background-color"; +import Colors from "../color/colors"; + +const BackgroundWrapper = styled.div` + padding-top: 50px; + width: 100%; + max-width: 720px; + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 16px; + + ${media.mobile} { + max-width: 100%; + grid-template-columns: repeat(2, 1fr); + } +`; + +const OptionItem = styled.div` + width: 100%; + aspect-ratio: 1 / 1; + cursor: pointer; + position: relative; +`; + +const CheckedIcon = styled.img` + background-color: ${Colors.gray(500)}; + box-shadow: none; + border-radius: 50%; + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + padding: 5px; + } +`; + +const BackgroundOverlay = styled.div` + height: 100%; + border-radius: 8px; + background-color: ${({ type, color }) => + type === "color" ? color : "transparent"}; + background-image: ${({ type, url }) => + type === "image" ? `url(${url})` : "none"}; + background-position: center; + background-size: cover; + background-repeat: no-repeat; + opacity: ${({ selected }) => (selected ? 0.3 : 1)}; +`; + +function BackgroundSelect({ type, selected, onSelect }) { + const [backgroundUrls, setBackgroundUrls] = useState([]); + + const colorOptions = [ + { color: BACKGROUND_COLOR.beige }, + { color: BACKGROUND_COLOR.purple }, + { color: BACKGROUND_COLOR.blue }, + { color: BACKGROUND_COLOR.green }, + ]; + + useEffect(() => { + if (type !== "image") return; + + const imageUrls = [ + "https://picsum.photos/id/683/3840/2160", + "https://picsum.photos/id/24/3840/2160", + "https://picsum.photos/id/599/3840/2160", + "https://picsum.photos/id/1058/3840/2160", + ]; + setBackgroundUrls(imageUrls || []); + }, [type]); + + const options = + type === "color" + ? colorOptions + : backgroundUrls.map((url, index) => ({ label: `${index}`, url })); + + return ( + + {options.map((option, index) => ( + onSelect(index)}> + + {selected === index && } + + ))} + + ); +} + +export default BackgroundSelect; diff --git a/src/components/popover/popover-alignment.js b/src/components/popover/popover-alignment.js new file mode 100644 index 0000000..a08fdf5 --- /dev/null +++ b/src/components/popover/popover-alignment.js @@ -0,0 +1,6 @@ +const POPOVER_ALIGNMENT = Object.freeze({ + left: "left", + right: "right", +}); + +export default POPOVER_ALIGNMENT; diff --git a/src/components/popover/popover.jsx b/src/components/popover/popover.jsx new file mode 100644 index 0000000..156e457 --- /dev/null +++ b/src/components/popover/popover.jsx @@ -0,0 +1,60 @@ +import styled from "styled-components"; +import { usePopover } from "../../hooks/use-popover"; +import Portal from "../portal/portal"; + +const Container = styled.div` + position: fixed; + top: 0; + right: 0; + bottom: 0; + left: 0; +`; + +const StyledPopover = styled.div` + position: absolute; + top: ${({ $position }) => $position.top}px; + ${({ $position }) => ($position.left ? `left: ${$position.left}px` : "")}; + ${({ $position }) => ($position.right ? `right: ${$position.right}px` : "")}; + border-radius: 8px; + border: 1px solid #b6b6b6; + background-color: white; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.08); + overflow: hidden; +`; + +function Popover({ id, alignment, action, children }) { + const { + targetRef, + position, + showsPopover, + setShowsPopover, + handleTargetClick, + } = usePopover({ + id, + type: "popover", + alignment, + }); + + const handleClick = () => handleTargetClick(true); + const handleBackdropClick = () => setShowsPopover(false); + const handlePopoverClick = (event) => event.stopPropagation(); + + return ( + <> +
+ {action} +
+ {showsPopover && ( + + + + {children} + + + + )} + + ); +} + +export default Popover; diff --git a/src/components/portal/portal-context.js b/src/components/portal/portal-context.js new file mode 100644 index 0000000..23b1a3b --- /dev/null +++ b/src/components/portal/portal-context.js @@ -0,0 +1,5 @@ +import { createContext } from "react"; + +const PortalContext = createContext({}); + +export default PortalContext; diff --git a/src/components/portal/portal-provider.jsx b/src/components/portal/portal-provider.jsx new file mode 100644 index 0000000..7d1a5df --- /dev/null +++ b/src/components/portal/portal-provider.jsx @@ -0,0 +1,10 @@ +import { useState } from "react"; +import PortalContext from "./portal-context"; + +function PortalProvider({ children }) { + const [portalState, setPortalState] = useState({}); + const value = { portalState, setPortalState }; + return {children}; +} + +export default PortalProvider; diff --git a/src/components/portal/portal.jsx b/src/components/portal/portal.jsx new file mode 100644 index 0000000..06a182b --- /dev/null +++ b/src/components/portal/portal.jsx @@ -0,0 +1,7 @@ +import { createPortal } from "react-dom"; + +function Portal({ children, id }) { + return createPortal(children, document.getElementById(id)); +} + +export default Portal; diff --git a/src/components/text-editor/text-editor.tsx b/src/components/text-editor/text-editor.tsx new file mode 100644 index 0000000..52aeb7b --- /dev/null +++ b/src/components/text-editor/text-editor.tsx @@ -0,0 +1,55 @@ +import { useEffect, useRef, useState } from "react"; +import ReactQuill, { Quill } from "react-quill-new"; +import "react-quill-new/dist/quill.snow.css"; + +interface TextEditorProps { + style?: any; + value?: string; + onChange: (value: string) => void; + font?: string; +} + +const Font: any = Quill.import("formats/font"); +Font.whitelist = [ + "Noto Sans", + "Pretendard", + "Nanum Gothic", + "Nanum Pen Script", +]; +Quill.register(Font, true); + +function TextEditor({ style, value, onChange, font }: TextEditorProps) { + const editorRef = useRef(null); + + useEffect(() => { + if (editorRef.current) { + const editor = editorRef.current.getEditor(); + editor.root.style.fontFamily = font || "Noto Sans"; + editor.root.style.fontSize = "20px"; + } + }, [font]); + + const modules = { + toolbar: { + container: [ + ["bold", "italic", "underline"], + [{ align: "center" }, { align: "right" }, { align: "justify" }], + [{ list: "bullet" }, { list: "ordered" }], + [{ background: [] }, { color: [] }], + [{ size: [] }], + ], + }, + }; + + return ( + + ); +} + +export default TextEditor; diff --git a/src/components/text-field/dropdown-input/dropdown-input.jsx b/src/components/text-field/dropdown-input/dropdown-input.jsx new file mode 100644 index 0000000..775710c --- /dev/null +++ b/src/components/text-field/dropdown-input/dropdown-input.jsx @@ -0,0 +1,146 @@ +import styled from "styled-components"; +import arrowDownImage from "../../../assets/ic-chevron-down.svg"; +import arrowUpImage from "../../../assets/ic-chevron-up.svg"; +import { useDropdown } from "../../../hooks/use-dropdown"; +import INPUT_STYLES from "../input-styles"; +import Dropdown from "./dropdown"; +import DropdownOption from "./dropdown-option"; + +const PlaceholderText = styled.span` + ${INPUT_STYLES.font} + color: ${INPUT_STYLES.textColor.placeholder}; + flex-grow: 1; + text-align: left; +`; + +const InputText = styled.span` + ${INPUT_STYLES.font} + color: ${INPUT_STYLES.textColor.normal}; + flex-grow: 1; + text-align: left; +`; + +function Text({ value, placeholder }) { + return value ? ( + {value} + ) : ( + {placeholder} + ); +} + +const Icon = styled.div` + width: 16px; + height: 16px; + + img { + width: 100%; + height: 100%; + } +`; + +const StyledDropdownInput = styled.button` + background-color: ${INPUT_STYLES.backgroundColor.normal}; + border: none; + border-radius: 8px; + box-shadow: 0 0 0 1px + ${({ $error }) => INPUT_STYLES.borderColor.normal($error)} inset; + padding: 12px 16px; + min-width: 320px; + display: flex; + align-items: center; + gap: 8px; + cursor: pointer; + position: relative; + + &:hover { + box-shadow: 0 0 0 1px + ${({ $error }) => INPUT_STYLES.borderColor.hover($error)} inset; + } + + &:active { + box-shadow: 0 0 0 2px + ${({ $error }) => INPUT_STYLES.borderColor.active($error)} inset; + } + + &:focus { + box-shadow: 0 0 0 2px + ${({ $error }) => INPUT_STYLES.borderColor.focus($error)} inset; + } + + &:disabled { + background-color: ${INPUT_STYLES.backgroundColor.disabled}; + box-shadow: 0 0 0 1px ${INPUT_STYLES.borderColor.disabled} inset; + cursor: default; + } +`; + +function DropdownInput({ + dropdownId, + error, + placeholder, + value, + options, + onSelect, + ...props +}) { + const { + targetRef, + dropdownRect, + showsDropdown, + setShowsDropdown, + handleTargetClick, + } = useDropdown({ + id: dropdownId, + type: "dropdown-input", + }); + + const handleInputClick = () => { + handleTargetClick(!showsDropdown); + }; + + const handleOptionClick = (event) => { + onSelect(event.target.textContent); + }; + + const handleDropdownClose = () => { + setShowsDropdown(false); + }; + + return ( + <> + + + + Dropdown 화살표 + + {showsDropdown && ( + + {options.map((option, index) => ( + + {option.title ?? option} + + ))} + + )} + + + ); +} + +export default DropdownInput; diff --git a/src/components/text-field/dropdown-input/dropdown-option.jsx b/src/components/text-field/dropdown-input/dropdown-option.jsx new file mode 100644 index 0000000..2f976cd --- /dev/null +++ b/src/components/text-field/dropdown-input/dropdown-option.jsx @@ -0,0 +1,25 @@ +import styled from "styled-components"; +import Colors from "../../color/colors"; + +const StyledDropdownOption = styled.div` + width: calc(100% - 2px); + border: none; + background: none; + padding: 12px 16px; + ${({ style }) => style?.fontFamily ?? ""} + font-size: 16px; + font-weight: 400; + line-height: 26px; + color: ${Colors.gray(900)}; + cursor: pointer; + + &:hover { + background-color: ${Colors.gray(100)}; + } +`; + +function DropdownOption({ children, ...props }) { + return {children}; +} + +export default DropdownOption; diff --git a/src/components/text-field/dropdown-input/dropdown.jsx b/src/components/text-field/dropdown-input/dropdown.jsx new file mode 100644 index 0000000..a2c5774 --- /dev/null +++ b/src/components/text-field/dropdown-input/dropdown.jsx @@ -0,0 +1,62 @@ +import styled from "styled-components"; +import Colors from "../../color/colors"; +import Portal from "../../portal/portal"; + +const BACKDROP_CLASS_NAME = "dropdown-backdrop"; + +const DropdownContainer = styled.div` + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + z-index: 111; + + & > *:not(.${BACKDROP_CLASS_NAME}) { + z-index: 114; + } +`; + +const DropdownBackdrop = styled(DropdownContainer)` + z-index: 112; + position: fixed; +`; + +const DropdownContent = styled(DropdownContainer)` + z-index: 113; + position: relative; + height: 100%; +`; + +const StyledDropdown = styled.div` + background-color: white; + box-shadow: 0 0 0 1px ${Colors.gray(300)} inset, + 0 2px 12px 0 rgba(0, 0, 0, 0.08); + border-radius: 8px; + display: flex; + flex-direction: column; + align-items: center; + padding: 10px 0; + position: absolute; + top: ${({ $origin }) => $origin.y}px; + left: ${({ $origin }) => $origin.x}px; + width: ${({ $size }) => $size.width}px; +`; + +function Dropdown({ children, origin, size, onClose }) { + return ( + + + + + + {children} + + + + + + ); +} + +export default Dropdown; diff --git a/src/components/text-field/input-styles.js b/src/components/text-field/input-styles.js new file mode 100644 index 0000000..24b7b4c --- /dev/null +++ b/src/components/text-field/input-styles.js @@ -0,0 +1,27 @@ +import { css } from "styled-components"; +import Colors from "../color/colors"; + +const INPUT_STYLES = Object.freeze({ + font: css` + font-size: 16px; + font-weight: 400; + line-height: 26px; + `, + borderColor: { + normal: (error) => (error ? Colors.error : Colors.gray(300)), + hover: (error) => (error ? Colors.error : Colors.gray(500)), + active: (error) => (error ? Colors.error : Colors.gray(700)), + focus: (error) => (error ? Colors.error : Colors.gray(500)), + disabled: Colors.gray(300), + }, + textColor: { + normal: Colors.gray(900), + placeholder: Colors.gray(500), + }, + backgroundColor: { + normal: "#ffffff", + disabled: Colors.gray(100), + }, +}); + +export default INPUT_STYLES; diff --git a/src/components/text-field/text-field-type.js b/src/components/text-field/text-field-type.js new file mode 100644 index 0000000..80da361 --- /dev/null +++ b/src/components/text-field/text-field-type.js @@ -0,0 +1,6 @@ +const TEXT_FIELD_TYPE = Object.freeze({ + input: "input", + dropdown: "dropdown", +}); + +export default TEXT_FIELD_TYPE; diff --git a/src/components/text-field/text-field.jsx b/src/components/text-field/text-field.jsx new file mode 100644 index 0000000..36656d6 --- /dev/null +++ b/src/components/text-field/text-field.jsx @@ -0,0 +1,34 @@ +import styled from "styled-components"; +import Colors from "../color/colors"; +import DropdownInput from "./dropdown-input/dropdown-input"; +import TEXT_FIELD_TYPE from "./text-field-type"; +import TextInput from "./text-input/text-input"; + +const StyledTextField = styled.div` + display: flex; + flex-direction: column; + gap: 4px; +`; + +const ErrorMessage = styled.p` + margin: 0; + font-size: 12px; + font-weight: 400; + line-height: 18px; + color: ${Colors.error}; +`; + +function TextField({ type, error, dropdownId, ...props }) { + return ( + + {type === TEXT_FIELD_TYPE.input ? ( + + ) : ( + + )} + {error && {error}} + + ); +} + +export default TextField; diff --git a/src/components/text-field/text-input/text-input.jsx b/src/components/text-field/text-input/text-input.jsx new file mode 100644 index 0000000..5687c6e --- /dev/null +++ b/src/components/text-field/text-input/text-input.jsx @@ -0,0 +1,46 @@ +import styled from "styled-components"; +import INPUT_STYLES from "../input-styles"; + +const StyledTextInput = styled.input` + background-color: ${INPUT_STYLES.backgroundColor.normal}; + outline: none; + border: none; + border-radius: 8px; + box-shadow: 0 0 0 1px + ${({ $error }) => INPUT_STYLES.borderColor.normal($error)} inset; + padding: 12px 16px; + ${INPUT_STYLES.font} + color: ${INPUT_STYLES.textColor.normal}; + min-width: 320px; + + &::placeholder { + ${INPUT_STYLES.font} + color: ${INPUT_STYLES.textColor.placeholder}; + } + + &:hover { + box-shadow: 0 0 0 1px + ${({ $error }) => INPUT_STYLES.borderColor.hover($error)} inset; + } + + &:active { + box-shadow: 0 0 0 2px + ${({ $error }) => INPUT_STYLES.borderColor.active($error)} inset; + } + + &:focus { + box-shadow: 0 0 0 2px + ${({ $error }) => INPUT_STYLES.borderColor.focus($error)} inset; + } + + &:disabled { + background-color: ${INPUT_STYLES.backgroundColor.disabled}; + box-shadow: 0 0 0 1px ${INPUT_STYLES.borderColor.disabled} inset; + } +`; + +function TextInput({ error, ...props }) { + return ; +} + +export default TextInput; diff --git a/src/components/toast/toast.jsx b/src/components/toast/toast.jsx new file mode 100644 index 0000000..9a276ea --- /dev/null +++ b/src/components/toast/toast.jsx @@ -0,0 +1,73 @@ +import styled from "styled-components"; +import checkImage from "../../assets/ic-check-circle-green.svg"; +import closeImage from "../../assets/ic-xmark.svg"; + +const StyledToast = styled.div` + background-color: rgba(0, 0, 0, 0.8); + border-radius: 8px; + min-width: 524px; + height: 64px; + padding: 0 30px; + display: flex; + align-items: center; + gap: 12px; + font-size: 16px; + font-weight: 400; + line-height: 26px; + color: white; + white-space: nowrap; + position: fixed; + left: 50%; + bottom: 70px; + transform: translateX(-50%); + + p { + margin: 0; + flex-grow: 1; + } + + @media (max-width: 1199px) { + bottom: 50px; + } + + @media (max-width: 767px) { + min-width: 0; + transform: none; + left: 20px; + right: 20px; + bottom: 88px; + } +`; + +const Icon = styled.div` + width: 24px; + height: 24px; + + img { + width: 100%; + height: 100%; + } +`; + +const IconButton = styled(Icon)` + background: none; + border: none; + padding: 0; + cursor: pointer; +`; + +function Toast({ message, onDismiss }) { + return ( + + + 확인 + +

{message}

+ + 닫기 + +
+ ); +} + +export default Toast; diff --git a/src/features/message/api/messages.js b/src/features/message/api/messages.js new file mode 100644 index 0000000..2b12e78 --- /dev/null +++ b/src/features/message/api/messages.js @@ -0,0 +1,47 @@ +import axios from "axios"; +import { apiClient } from "../../../api/client"; + +let nextPage; + +async function getMessages({ recipientId, limit, page = 1 }) { + const searchParams = new URLSearchParams(); + searchParams.append("page", page); + if (limit) { + searchParams.append("limit", limit); + } + + const response = await apiClient.get( + `recipients/${recipientId}/messages/?${searchParams.toString()}` + ); + if (response.status !== 200) { + throw new Error("Message data를 가져오는데 실패했습니다."); + } + + const data = response.data; + nextPage = data.next; + + return data.results; +} + +async function getNextPageMessages() { + if (!nextPage) return; + + const response = await axios.get(nextPage); + if (response.status !== 200) { + throw new Error("Message data를 가져오는데 실패했습니다."); + } + + const data = response.data; + nextPage = data.next; + + return data.results; +} + +async function deleteMessage({ id }) { + const response = await apiClient.delete(`messages/${id}/`); + if (response.status !== 204) { + throw new Error("Message를 삭제하는데 실패했습니다."); + } +} + +export { deleteMessage, getMessages, getNextPageMessages }; diff --git a/src/features/message/components/message-card-add.jsx b/src/features/message/components/message-card-add.jsx new file mode 100644 index 0000000..9fbeb23 --- /dev/null +++ b/src/features/message/components/message-card-add.jsx @@ -0,0 +1,46 @@ +import styled from "styled-components"; +import plusImage from "../../../assets/ic-plus.svg"; +import Colors from "../../../components/color/colors"; +import { media } from "../../../utils/media"; + +const AddCircle = styled.div` + width: 56px; + height: 56px; + border-radius: 28px; + background-color: ${Colors.gray(500)}; + display: flex; + justify-content: center; + align-items: center; +`; + +const StyledMessageCardAdd = styled.button` + border: none; + display: flex; + justify-content: center; + align-items: center; + border-radius: 16px; + background-color: white; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.08); + min-height: 280px; + cursor: pointer; + + ${media.tablet} { + min-height: 284px; + } + + ${media.mobile} { + min-height: 230px; + } +`; + +function MessageCardAdd({ onClick }) { + return ( + + + Message 추가 + + + ); +} + +export default MessageCardAdd; diff --git a/src/features/message/components/message-card-detail.jsx b/src/features/message/components/message-card-detail.jsx new file mode 100644 index 0000000..68f8ad0 --- /dev/null +++ b/src/features/message/components/message-card-detail.jsx @@ -0,0 +1,81 @@ +import styled from "styled-components"; +import { PrimaryButton } from "../../../components/button/button"; +import BUTTON_SIZE from "../../../components/button/button-size"; +import Colors from "../../../components/color/colors"; +import { formatDate } from "../../../utils/formatter"; +import MessageSender from "./message-sender"; + +const Header = styled.header` + width: 100%; + display: flex; + justify-content: space-between; + align-items: center; + padding-bottom: 19px; + border-bottom: 1px solid ${Colors.gray(200)}; +`; + +const Content = styled.div` + width: 100%; + margin-top: 16px; + font-size: 18px; + font-weight: 400; + line-height: 28px; + color: #5a5a5a; + max-height: 240px; + overflow: scroll; + + &::-webkit-scrollbar { + width: 4px; + } + + &::-webkit-scrollbar-thumb { + background-color: ${Colors.gray(300)}; + border-radius: 2px; + + &:hover { + background-color: ${Colors.gray(400)}; + } + } +`; + +const Action = styled.div` + padding-top: 24px; +`; + +const CreatedDate = styled.span` + font-size: 14px; + font-weight: 400; + line-height: 20px; + color: ${Colors.gray(400)}; +`; + +const StyledMessageCardDetail = styled.div` + display: flex; + flex-direction: column; + align-items: center; +`; + +function MessageCardDetail({ message, onConfirm }) { + return ( + +
+ + {formatDate(message.createdAt, ".")} +
+ {message.content} + + + +
+ ); +} + +export default MessageCardDetail; diff --git a/src/features/message/components/message-card.jsx b/src/features/message/components/message-card.jsx new file mode 100644 index 0000000..1400b3c --- /dev/null +++ b/src/features/message/components/message-card.jsx @@ -0,0 +1,89 @@ +import styled from "styled-components"; +import deleteImage from "../../../assets/ic-trash.svg"; +import { OutlinedButton } from "../../../components/button/button"; +import BUTTON_SIZE from "../../../components/button/button-size"; +import Colors from "../../../components/color/colors"; +import { formatDate } from "../../../utils/formatter"; +import { media } from "../../../utils/media"; +import MessageSender from "./message-sender"; + +const Header = styled.header` + padding-bottom: 16px; + border-bottom: 1px solid ${Colors.gray(200)}; + display: flex; + justify-content: space-between; + align-items: center; +`; + +const Content = styled.div` + margin: 16px 0; + font-size: 18px; + font-weight: 400; + line-height: 28px; + color: ${Colors.gray(600)}; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 4; + -webkit-box-orient: vertical; + min-height: 112px; /* line-height x 4 */ + + ${media.mobile} { + font-size: 15px; + line-height: 22px; + -webkit-line-clamp: 3; + min-height: 66px; /* line-height x 3 */ + } +`; + +const CreatedDate = styled.span` + font-size: 12px; + font-weight: 400; + line-height: 18px; + color: ${Colors.gray(400)}; +`; + +const StyledMessageCard = styled.article` + display: flex; + flex-direction: column; + padding: 24px; + border-radius: 16px; + background-color: white; + box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.08); + cursor: ${({ $isEditing }) => ($isEditing ? "default" : "pointer")}; +`; + +function MessageCard({ isEditing, message, onClick, onDelete }) { + const handleClick = () => { + if (isEditing) return; + onClick(message); + }; + + const handleDeleteClick = (event) => { + event.stopPropagation(); + onDelete(message); + }; + + return ( + +
+ + {isEditing && ( + + )} +
+ {message.content} + {formatDate(message.createdAt, ".")} +
+ ); +} + +export default MessageCard; diff --git a/src/features/message/components/message-sender.jsx b/src/features/message/components/message-sender.jsx new file mode 100644 index 0000000..7ce9d28 --- /dev/null +++ b/src/features/message/components/message-sender.jsx @@ -0,0 +1,54 @@ +import styled from "styled-components"; +import Avatar from "../../../components/avatar/avatar"; +import Badge from "../../../components/badge/badge"; +import BADGE_TYPE from "../../../components/badge/badge-type"; +import { media } from "../../../utils/media"; + +const SenderName = styled.span` + font-size: 20px; + font-weight: 400; + line-height: 24px; + + span { + font-weight: 700; + } + + ${media.mobile} { + font-size: 16px; + line-height: 26px; + } +`; + +const StyledSenderInfo = styled.div` + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 6px; +`; + +function SenderInfo({ name, type }) { + return ( + + + From.{` ${name}`} + + + + ); +} +const StyledMessageSender = styled.div` + display: flex; + align-items: center; + gap: 14px; +`; + +function MessageSender({ profileImageUrl, relationship, name }) { + return ( + + + + + ); +} + +export default MessageSender; diff --git a/src/features/message/components/messages-grid.jsx b/src/features/message/components/messages-grid.jsx new file mode 100644 index 0000000..7aae610 --- /dev/null +++ b/src/features/message/components/messages-grid.jsx @@ -0,0 +1,86 @@ +import { useRef, useState } from "react"; +import { useNavigate, useParams } from "react-router"; +import styled from "styled-components"; +import Modal from "../../../components/modal/modal.jsx"; +import { useIntersectionObserver } from "../../../hooks/use-intersection-observer.jsx"; +import { useModal } from "../../../hooks/use-modal.jsx"; +import { media } from "../../../utils/media.js"; +import MessageCardAdd from "./message-card-add.jsx"; +import MessageCardDetail from "./message-card-detail.jsx"; +import MessageCard from "./message-card.jsx"; + +const StyledRollingPaperMessagesGrid = styled.div` + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 24px; + row-gap: 28px; + + @media (max-width: 1248px) { + grid-template-columns: repeat(2, 1fr); + gap: 16px; + } + + ${media.mobile} { + grid-template-columns: repeat(1, 1fr); + } +`; + +function MessagesGrid({ isEditing, messages, onDelete, onInfiniteScroll }) { + const navigate = useNavigate(); + const { id } = useParams(); + const infiniteScrollTargetRef = useRef(); + const { showsModal, setShowsModal } = useModal({ + key: "message-modal", + }); + const [modalMessage, setModalMessage] = useState(null); + + const observerCallback = (entry) => { + if (!entry.isIntersecting) return; + onInfiniteScroll(); + }; + useIntersectionObserver(infiniteScrollTargetRef, observerCallback); + + const handleAddClick = () => { + navigate(`/post/${id}/message`); + }; + + const handleMessageClick = (message) => { + setShowsModal(true); + setModalMessage(message); + }; + + const handleDeleteClick = (message) => { + onDelete(message); + }; + + const handleModalConfirm = () => { + setShowsModal(false); + setModalMessage(null); + }; + + return ( + <> + + + {messages.map((message) => ( + + ))} +
+
+ + + + + ); +} + +export default MessagesGrid; diff --git a/src/features/reaction/api/reaction.js b/src/features/reaction/api/reaction.js new file mode 100644 index 0000000..3494677 --- /dev/null +++ b/src/features/reaction/api/reaction.js @@ -0,0 +1,29 @@ +import { apiClient } from "../../../api/client"; + +async function getReactions({ recipientId }) { + const response = await apiClient.get(`recipients/${recipientId}/reactions/`); + if (response.status !== 200) { + throw new Error("Reactions data를 가져오는데 실패했습니다."); + } + + const data = response.data; + return data.results; +} + +async function addReaction({ recipientId, emoji }) { + const response = await apiClient.post( + `recipients/${recipientId}/reactions/`, + { + emoji, + type: "increase", + } + ); + if (response.status !== 201) { + throw new Error("Reaction을 추가하는데 실패했습니다."); + } + + const data = response.data; + return data; +} + +export { addReaction, getReactions }; diff --git a/src/features/reaction/components/add-reaction-popover.jsx b/src/features/reaction/components/add-reaction-popover.jsx new file mode 100644 index 0000000..b191d66 --- /dev/null +++ b/src/features/reaction/components/add-reaction-popover.jsx @@ -0,0 +1,45 @@ +import EmojiPicker from "emoji-picker-react"; +import styled from "styled-components"; +import addImage from "../../../assets/ic-face-smile-add.svg"; +import { OutlinedButton } from "../../../components/button/button"; +import BUTTON_SIZE from "../../../components/button/button-size"; +import Popover from "../../../components/popover/popover"; +import POPOVER_ALIGNMENT from "../../../components/popover/popover-alignment"; +import { useMedia } from "../../../hooks/use-media"; +import { media } from "../../../utils/media"; + +const StyledPopoverAction = styled(OutlinedButton)` + ${media.mobile} { + padding: 0 8px; + } +`; + +function PopoverAction() { + const { isMobile } = useMedia(); + + return ( + + ); +} + +function AddReactionPopover({ onSelect }) { + const handleEmojiClick = (data) => { + onSelect(data.emoji); + }; + + return ( + } + > + + + ); +} + +export default AddReactionPopover; diff --git a/src/features/reaction/components/all-reactions-popover.jsx b/src/features/reaction/components/all-reactions-popover.jsx new file mode 100644 index 0000000..cd8d3b4 --- /dev/null +++ b/src/features/reaction/components/all-reactions-popover.jsx @@ -0,0 +1,53 @@ +import styled from "styled-components"; +import arrowDownImage from "../../../assets/ic-chevron-down.svg"; +import EmojiBadge from "../../../components/badge/emoji-badge"; +import Popover from "../../../components/popover/popover"; +import POPOVER_ALIGNMENT from "../../../components/popover/popover-alignment"; +import { media } from "../../../utils/media"; + +const StyledPopoverAction = styled.button` + background: none; + border: none; + width: 36px; + height: 36px; + cursor: pointer; + padding: 0; +`; + +function PopoverAction() { + return ( + + 전체 리액션 보기 + + ); +} + +const StyledAllReactions = styled.div` + padding: 24px; + display: grid; + grid-template-columns: repeat(4, min-content); + row-gap: 10px; + column-gap: 8px; + + ${media.mobile} { + grid-template-columns: repeat(3, min-content); + } +`; + +function AllReactionsPopover({ reactions }) { + return ( + } + > + + {reactions.map(({ id, emoji, count }) => ( + + ))} + + + ); +} + +export default AllReactionsPopover; diff --git a/src/features/reaction/components/received-reactions.jsx b/src/features/reaction/components/received-reactions.jsx new file mode 100644 index 0000000..cafdcef --- /dev/null +++ b/src/features/reaction/components/received-reactions.jsx @@ -0,0 +1,23 @@ +import styled from "styled-components"; +import { useMedia } from "../../../hooks/use-media"; +import AllReactionsPopover from "./all-reactions-popover"; +import TopReactions from "./top-reactions"; + +const StyledRollingPaperReactions = styled.div` + display: flex; + gap: 2px; + align-items: center; +`; + +function ReceivedReactions({ reactions }) { + const { isMobile } = useMedia(); + + return ( + + + + + ); +} + +export default ReceivedReactions; diff --git a/src/features/reaction/components/top-reactions-layout.js b/src/features/reaction/components/top-reactions-layout.js new file mode 100644 index 0000000..c95413b --- /dev/null +++ b/src/features/reaction/components/top-reactions-layout.js @@ -0,0 +1,6 @@ +const TOP_REACTIONS_LAYOUT = Object.freeze({ + normal: "normal", + compact: "compact", +}); + +export default TOP_REACTIONS_LAYOUT; diff --git a/src/features/reaction/components/top-reactions.jsx b/src/features/reaction/components/top-reactions.jsx new file mode 100644 index 0000000..594fc9f --- /dev/null +++ b/src/features/reaction/components/top-reactions.jsx @@ -0,0 +1,25 @@ +import styled from "styled-components"; +import EmojiBadge from "../../../components/badge/emoji-badge"; +import TOP_REACTIONS_LAYOUT from "./top-reactions-layout"; + +const gap = { + [TOP_REACTIONS_LAYOUT.normal]: "8px", + [TOP_REACTIONS_LAYOUT.compact]: "4px", +}; + +const StyledTopReactions = styled.div` + display: flex; + gap: ${({ $layout }) => gap[$layout]}; +`; + +function TopReactions({ reactions, layout = TOP_REACTIONS_LAYOUT.normal }) { + return ( + + {reactions.map(({ id, emoji, count }) => ( + + ))} + + ); +} + +export default TopReactions; diff --git a/src/features/rolling-paper/api/mock-recipient.json b/src/features/rolling-paper/api/mock-recipient.json new file mode 100644 index 0000000..3423c1b --- /dev/null +++ b/src/features/rolling-paper/api/mock-recipient.json @@ -0,0 +1,353 @@ +{ + "id": 2, + "name": "강영훈", + "backgroundColor": "#FFE2AD", + "backgroundImageURL": "https://picsum.photos/id/1058/3840/2160", + "createdAt": "2023-10-26T13:19:31.401765Z", + "messageCount": 30, + "recentMessages": [ + { + "id": 1, + "recipientId": 2, + "sender": "김하은", + "profileImageURL": "https://fastly.picsum.photos/id/311/200/200.jpg?hmac=CHiYGYQ3Xpesshw5eYWH7U0Kyl9zMTZLQuRDU4OtyH8", + "relationship": "가족", + "content": "열심히 일하는 모습 멋있습니다.", + "font": "Pretendard", + "createdAt": "2023-11-01T08:05:25.399056Z" + }, + { + "id": 2, + "recipientId": 2, + "sender": "이영준", + "profileImageURL": "https://fastly.picsum.photos/id/312/200/200.jpg?hmac=XYZ123ABC456DEF", + "relationship": "지인", + "content": "항상 응원합니다", + "font": "Noto Sans", + "createdAt": "2023-11-01T08:04:12.852691Z" + }, + { + "id": 3, + "recipientId": 2, + "sender": "박민지", + "profileImageURL": "https://fastly.picsum.photos/id/313/200/200.jpg?hmac=ABC789XYZ123GHI", + "relationship": "친구", + "content": "오늘도 좋은 하루 보내세요!", + "font": "Pretendard", + "createdAt": "2023-11-01T07:58:45.123456Z" + }, + { + "id": 4, + "recipientId": 2, + "sender": "최수현", + "profileImageURL": "https://fastly.picsum.photos/id/314/200/200.jpg?hmac=DEF456GHI789JKL", + "relationship": "동료", + "content": "프로젝트 성공을 기원합니다", + "font": "Noto Sans", + "createdAt": "2023-11-01T07:42:18.987654Z" + }, + { + "id": 5, + "recipientId": 2, + "sender": "정다은", + "profileImageURL": "https://fastly.picsum.photos/id/315/200/200.jpg?hmac=GHI123JKL456MNO", + "relationship": "친구", + "content": "건강 챙기시고 화이팅!", + "font": "Pretendard", + "createdAt": "2023-11-01T07:30:22.654321Z" + }, + { + "id": 6, + "recipientId": 2, + "sender": "윤서준", + "profileImageURL": "https://fastly.picsum.photos/id/316/200/200.jpg?hmac=JKL789MNO123PQR", + "relationship": "지인", + "content": "좋은 결과 있길 바래요", + "font": "Noto Sans", + "createdAt": "2023-11-01T07:15:33.111111Z" + }, + { + "id": 7, + "recipientId": 2, + "sender": "강예원", + "profileImageURL": "https://fastly.picsum.photos/id/317/200/200.jpg?hmac=MNO456PQR789STU", + "relationship": "가족", + "content": "항상 자랑스러워요", + "font": "Pretendard", + "createdAt": "2023-11-01T06:58:47.222222Z" + }, + { + "id": 8, + "recipientId": 2, + "sender": "임하늘", + "profileImageURL": "https://fastly.picsum.photos/id/318/200/200.jpg?hmac=PQR123STU456VWX", + "relationship": "동료", + "content": "멋진 하루 되세요!", + "font": "Noto Sans", + "createdAt": "2023-11-01T06:45:12.333333Z" + }, + { + "id": 9, + "recipientId": 2, + "sender": "신지우", + "profileImageURL": "https://fastly.picsum.photos/id/319/200/200.jpg?hmac=STU789VWX123YZA", + "relationship": "친구", + "content": "언제나 응원할게요", + "font": "Pretendard", + "createdAt": "2023-11-01T06:32:55.444444Z" + }, + { + "id": 10, + "recipientId": 2, + "sender": "배소영", + "profileImageURL": "https://fastly.picsum.photos/id/320/200/200.jpg?hmac=VWX456YZA789BCD", + "relationship": "지인", + "content": "오늘도 힘내세요!", + "font": "Noto Sans", + "createdAt": "2023-11-01T06:18:41.555555Z" + }, + { + "id": 11, + "recipientId": 2, + "sender": "한민수", + "profileImageURL": "https://fastly.picsum.photos/id/321/200/200.jpg?hmac=YZA123BCD456EFG", + "relationship": "동료", + "content": "성공적인 하루 보내시길", + "font": "Pretendard", + "createdAt": "2023-11-01T06:05:28.666666Z" + }, + { + "id": 12, + "recipientId": 2, + "sender": "조아름", + "profileImageURL": "https://fastly.picsum.photos/id/322/200/200.jpg?hmac=BCD789EFG123HIJ", + "relationship": "친구", + "content": "늘 감사해요", + "font": "Noto Sans", + "createdAt": "2023-11-01T05:52:16.777777Z" + }, + { + "id": 13, + "recipientId": 2, + "sender": "송태현", + "profileImageURL": "https://fastly.picsum.photos/id/323/200/200.jpg?hmac=EFG456HIJ789KLM", + "relationship": "가족", + "content": "건강이 최고에요", + "font": "Pretendard", + "createdAt": "2023-11-01T05:38:53.888888Z" + }, + { + "id": 14, + "recipientId": 2, + "sender": "오지현", + "profileImageURL": "https://fastly.picsum.photos/id/324/200/200.jpg?hmac=HIJ123KLM456NOP", + "relationship": "지인", + "content": "좋은 일만 가득하세요", + "font": "Noto Sans", + "createdAt": "2023-11-01T05:25:39.999999Z" + }, + { + "id": 15, + "recipientId": 2, + "sender": "남도윤", + "profileImageURL": "https://fastly.picsum.photos/id/325/200/200.jpg?hmac=KLM789NOP123QRS", + "relationship": "동료", + "content": "멋진 성과 기대합니다", + "font": "Pretendard", + "createdAt": "2023-11-01T05:12:14.101010Z" + }, + { + "id": 16, + "recipientId": 2, + "sender": "유채린", + "profileImageURL": "https://fastly.picsum.photos/id/326/200/200.jpg?hmac=NOP456QRS789TUV", + "relationship": "친구", + "content": "화이팅!! 잘 하고 계세요", + "font": "Noto Sans", + "createdAt": "2023-11-01T04:58:27.121212Z" + }, + { + "id": 17, + "recipientId": 2, + "sender": "서준호", + "profileImageURL": "https://fastly.picsum.photos/id/327/200/200.jpg?hmac=QRS123TUV456WXY", + "relationship": "가족", + "content": "항상 믿고 있어요", + "font": "Pretendard", + "createdAt": "2023-11-01T04:45:51.131313Z" + }, + { + "id": 18, + "recipientId": 2, + "sender": "문예진", + "profileImageURL": "https://fastly.picsum.photos/id/328/200/200.jpg?hmac=TUV789WXY123ZAB", + "relationship": "지인", + "content": "좋은 소식 기다려요", + "font": "Noto Sans", + "createdAt": "2023-11-01T04:32:38.141414Z" + }, + { + "id": 19, + "recipientId": 2, + "sender": "홍승우", + "profileImageURL": "https://fastly.picsum.photos/id/329/200/200.jpg?hmac=WXY456ZAB789CDE", + "relationship": "동료", + "content": "오늘도 수고 많으셨어요", + "font": "Pretendard", + "createdAt": "2023-11-01T04:19:22.151515Z" + }, + { + "id": 20, + "recipientId": 2, + "sender": "전소민", + "profileImageURL": "https://fastly.picsum.photos/id/330/200/200.jpg?hmac=ZAB123CDE456FGH", + "relationship": "친구", + "content": "멋진 하루 만들어가세요", + "font": "Noto Sans", + "createdAt": "2023-11-01T04:06:47.161616Z" + }, + { + "id": 21, + "recipientId": 2, + "sender": "황지아", + "profileImageURL": "https://fastly.picsum.photos/id/331/200/200.jpg?hmac=CDE789FGH123IJK", + "relationship": "가족", + "content": "언제나 응원해요", + "font": "Pretendard", + "createdAt": "2023-11-01T03:53:15.171717Z" + }, + { + "id": 22, + "recipientId": 2, + "sender": "김도현", + "profileImageURL": "https://fastly.picsum.photos/id/332/200/200.jpg?hmac=FGH456IJK789LMN", + "relationship": "지인", + "content": "좋은 결과가 있길 바라요", + "font": "Noto Sans", + "createdAt": "2023-11-01T03:40:33.181818Z" + }, + { + "id": 23, + "recipientId": 2, + "sender": "이서연", + "profileImageURL": "https://fastly.picsum.photos/id/333/200/200.jpg?hmac=IJK123LMN456OPQ", + "relationship": "동료", + "content": "항상 최고입니다", + "font": "Pretendard", + "createdAt": "2023-11-01T03:27:49.191919Z" + }, + { + "id": 24, + "recipientId": 2, + "sender": "박준영", + "profileImageURL": "https://fastly.picsum.photos/id/334/200/200.jpg?hmac=LMN789OPQ123RST", + "relationship": "친구", + "content": "건강하고 행복하세요", + "font": "Noto Sans", + "createdAt": "2023-11-01T03:14:26.202020Z" + }, + { + "id": 25, + "recipientId": 2, + "sender": "최은지", + "profileImageURL": "https://fastly.picsum.photos/id/335/200/200.jpg?hmac=OPQ456RST789UVW", + "relationship": "가족", + "content": "오늘도 화이팅!", + "font": "Pretendard", + "createdAt": "2023-11-01T03:01:44.212121Z" + }, + { + "id": 26, + "recipientId": 2, + "sender": "정민호", + "profileImageURL": "https://fastly.picsum.photos/id/336/200/200.jpg?hmac=RST123UVW456XYZ", + "relationship": "지인", + "content": "좋은 에너지 전해드려요", + "font": "Noto Sans", + "createdAt": "2023-11-01T02:48:57.222222Z" + }, + { + "id": 27, + "recipientId": 2, + "sender": "윤하영", + "profileImageURL": "https://fastly.picsum.photos/id/337/200/200.jpg?hmac=UVW789XYZ123ABC", + "relationship": "동료", + "content": "성공을 위해 응원합니다", + "font": "Pretendard", + "createdAt": "2023-11-01T02:35:31.232323Z" + }, + { + "id": 28, + "recipientId": 2, + "sender": "강시우", + "profileImageURL": "https://fastly.picsum.photos/id/338/200/200.jpg?hmac=XYZ456ABC789DEF", + "relationship": "친구", + "content": "멋진 모습 항상 보기 좋아요", + "font": "Noto Sans", + "createdAt": "2023-11-01T02:22:18.242424Z" + }, + { + "id": 29, + "recipientId": 2, + "sender": "임수빈", + "profileImageURL": "https://fastly.picsum.photos/id/339/200/200.jpg?hmac=ABC123DEF456GHI", + "relationship": "가족", + "content": "늘 자랑스럽습니다", + "font": "Pretendard", + "createdAt": "2023-11-01T02:09:42.252525Z" + }, + { + "id": 30, + "recipientId": 2, + "sender": "신예린", + "profileImageURL": "https://fastly.picsum.photos/id/340/200/200.jpg?hmac=DEF789GHI123JKL", + "relationship": "지인", + "content": "오늘도 좋은 하루 되시길!", + "font": "Noto Sans", + "createdAt": "2023-11-01T01:56:27.262626Z" + } + ], + "reactionCount": 8, + "topReactions": [ + { + "id": 1, + "emoji": "😀", + "count": 247 + }, + { + "id": 2, + "emoji": "🥹", + "count": 189 + }, + { + "id": 3, + "emoji": "❤️", + "count": 156 + }, + { + "id": 4, + "emoji": "👍", + "count": 98 + }, + { + "id": 5, + "emoji": "🎉", + "count": 67 + }, + { + "id": 6, + "emoji": "💪", + "count": 34 + }, + { + "id": 7, + "emoji": "🙏", + "count": 23 + }, + { + "id": 8, + "emoji": "✨", + "count": 8 + } + ] +} diff --git a/src/features/rolling-paper/api/mock-rolling-paper-list.json b/src/features/rolling-paper/api/mock-rolling-paper-list.json new file mode 100644 index 0000000..8c3cd67 --- /dev/null +++ b/src/features/rolling-paper/api/mock-rolling-paper-list.json @@ -0,0 +1,14014 @@ +[ + { + "id": 7024, + "name": "Sowon Kim", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-10-22T19:15:11Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 90163, + "recipientId": 7024, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/142/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 50", + "font": "Roboto", + "createdAt": "2023-08-18T21:20:29Z" + } + ], + "reactionCount": 77, + "topReactions": [ + { + "emoji": "🥹", + "count": 2 + }, + { + "emoji": "😁", + "count": 923 + } + ] + }, + { + "id": 71200, + "name": "박서준", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/71200/600/400", + "createdAt": "2023-01-03T05:35:33Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 42811, + "recipientId": 71200, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/51/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 25", + "font": "Roboto", + "createdAt": "2023-06-23T06:13:02Z" + }, + { + "id": 32677, + "recipientId": 71200, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/435/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 28", + "font": "Roboto", + "createdAt": "2023-01-27T19:16:37Z" + }, + { + "id": 19164, + "recipientId": 71200, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/54/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 73", + "font": "Nanum Gothic", + "createdAt": "2024-01-13T10:43:25Z" + } + ], + "reactionCount": 66, + "topReactions": [ + { + "emoji": "😁", + "count": 962 + } + ] + }, + { + "id": 43558, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-12-11T02:38:21Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 30238, + "recipientId": 43558, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/340/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 32", + "font": "Nanum Gothic", + "createdAt": "2023-06-17T00:31:29Z" + }, + { + "id": 87763, + "recipientId": 43558, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/259/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 96", + "font": "Pretendard", + "createdAt": "2023-08-07T07:41:19Z" + }, + { + "id": 67784, + "recipientId": 43558, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/300/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 73", + "font": "Nanum Gothic", + "createdAt": "2024-01-17T09:44:31Z" + } + ], + "reactionCount": 13, + "topReactions": [ + { + "emoji": "😀", + "count": 333 + }, + { + "emoji": "🎉", + "count": 333 + }, + { + "emoji": "😁", + "count": 311 + } + ] + }, + { + "id": 90454, + "name": "김하은", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/90454/600/400", + "createdAt": "2023-01-25T17:12:55Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 3505, + "recipientId": 90454, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/239/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 17", + "font": "Nanum Gothic", + "createdAt": "2023-06-17T18:32:49Z" + }, + { + "id": 38476, + "recipientId": 90454, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/13/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 89", + "font": "Pretendard", + "createdAt": "2023-01-20T02:06:16Z" + } + ], + "reactionCount": 84, + "topReactions": [ + { + "emoji": "🥹", + "count": 570 + } + ] + }, + { + "id": 18499, + "name": "차은우 차은우 차은우 차은우 차은우 차은우 차은우", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/18499/600/400", + "createdAt": "2023-06-03T04:15:47Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 48979, + "recipientId": 18499, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/11/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 77", + "font": "Nanum Gothic", + "createdAt": "2023-08-25T00:15:25Z" + }, + { + "id": 99385, + "recipientId": 18499, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/287/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 15", + "font": "Pretendard", + "createdAt": "2023-10-12T13:55:45Z" + }, + { + "id": 35753, + "recipientId": 18499, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/173/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 67", + "font": "Nanum Gothic", + "createdAt": "2023-07-23T23:14:30Z" + } + ], + "reactionCount": 61, + "topReactions": [ + { + "emoji": "❤️", + "count": 888 + }, + { + "emoji": "😀", + "count": 12 + }, + { + "emoji": "👍", + "count": 33 + } + ] + }, + { + "id": 84206, + "name": "정우성", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-11-30T22:40:21Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 5762, + "recipientId": 84206, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/474/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 31", + "font": "Pretendard", + "createdAt": "2023-04-24T12:23:57Z" + }, + { + "id": 45324, + "recipientId": 84206, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/264/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 84", + "font": "Pretendard", + "createdAt": "2023-09-30T14:29:23Z" + }, + { + "id": 14049, + "recipientId": 84206, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/406/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 15", + "font": "Noto Sans", + "createdAt": "2023-04-15T06:15:06Z" + } + ], + "reactionCount": 14, + "topReactions": [ + { + "emoji": "🥹", + "count": 800 + }, + { + "emoji": "😁", + "count": 262 + } + ] + }, + { + "id": 97449, + "name": "송혜교", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-05-27T18:06:58Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 64517, + "recipientId": 97449, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/180/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 39", + "font": "Roboto", + "createdAt": "2023-03-11T02:20:57Z" + }, + { + "id": 95376, + "recipientId": 97449, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/443/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 29", + "font": "Nanum Gothic", + "createdAt": "2023-03-18T20:25:35Z" + }, + { + "id": 7602, + "recipientId": 97449, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/18/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 57", + "font": "Roboto", + "createdAt": "2023-12-04T21:16:03Z" + } + ], + "reactionCount": 87, + "topReactions": [ + { + "emoji": "😀", + "count": 846 + }, + { + "emoji": "😁", + "count": 901 + }, + { + "emoji": "❤️", + "count": 921 + } + ] + }, + { + "id": 13425, + "name": "차은우", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/13425/600/400", + "createdAt": "2023-07-06T20:30:52Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 74302, + "recipientId": 13425, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/244/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 69", + "font": "Pretendard", + "createdAt": "2023-04-09T12:19:23Z" + } + ], + "reactionCount": 33, + "topReactions": [ + { + "emoji": "❤️", + "count": 865 + }, + { + "emoji": "😁", + "count": 198 + } + ] + }, + { + "id": 35155, + "name": "박서준", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-05-11T22:06:17Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 34211, + "recipientId": 35155, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/477/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 43", + "font": "Noto Sans", + "createdAt": "2024-01-05T06:58:56Z" + }, + { + "id": 60206, + "recipientId": 35155, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/343/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 54", + "font": "Roboto", + "createdAt": "2023-03-30T16:06:27Z" + }, + { + "id": 88132, + "recipientId": 35155, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/325/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 68", + "font": "Noto Sans", + "createdAt": "2023-08-09T19:25:45Z" + } + ], + "reactionCount": 61, + "topReactions": [ + { + "emoji": "🥹", + "count": 403 + } + ] + }, + { + "id": 97436, + "name": "정우성", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/97436/600/400", + "createdAt": "2023-10-03T12:44:17Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 34424, + "recipientId": 97436, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/141/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 6", + "font": "Nanum Gothic", + "createdAt": "2023-06-01T12:35:35Z" + }, + { + "id": 41272, + "recipientId": 97436, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/162/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 19", + "font": "Roboto", + "createdAt": "2023-05-07T04:01:58Z" + }, + { + "id": 36494, + "recipientId": 97436, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/307/200/200", + "relationship": "친구", + "content": "박서준님의 메세지 내용 71", + "font": "Noto Sans", + "createdAt": "2023-07-14T08:50:29Z" + } + ], + "reactionCount": 61, + "topReactions": [ + { + "emoji": "😀", + "count": 264 + }, + { + "emoji": "😁", + "count": 580 + }, + { + "emoji": "🥹", + "count": 8 + } + ] + }, + { + "id": 22932, + "name": "차은우", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/22932/600/400", + "createdAt": "2023-12-21T05:29:02Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 5965, + "recipientId": 22932, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/368/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 41", + "font": "Roboto", + "createdAt": "2023-10-30T21:49:17Z" + } + ], + "reactionCount": 54, + "topReactions": [ + { + "emoji": "👍", + "count": 983 + } + ] + }, + { + "id": 93316, + "name": "전지현", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-09-26T09:48:47Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 15981, + "recipientId": 93316, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/29/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 23", + "font": "Nanum Gothic", + "createdAt": "2023-07-01T10:41:23Z" + }, + { + "id": 88647, + "recipientId": 93316, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/391/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 91", + "font": "Pretendard", + "createdAt": "2023-09-23T14:40:50Z" + }, + { + "id": 36796, + "recipientId": 93316, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/485/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 69", + "font": "Nanum Gothic", + "createdAt": "2023-08-22T23:41:19Z" + } + ], + "reactionCount": 67, + "topReactions": [ + { + "emoji": "😁", + "count": 882 + } + ] + }, + { + "id": 25223, + "name": "전지현", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-12-10T04:25:18Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 55898, + "recipientId": 25223, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/377/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 97", + "font": "Pretendard", + "createdAt": "2023-03-28T00:32:15Z" + }, + { + "id": 28874, + "recipientId": 25223, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/338/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 71", + "font": "Roboto", + "createdAt": "2023-08-06T08:16:58Z" + }, + { + "id": 21132, + "recipientId": 25223, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/259/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 53", + "font": "Noto Sans", + "createdAt": "2024-02-01T12:33:31Z" + } + ], + "reactionCount": 29, + "topReactions": [ + { + "emoji": "🎉", + "count": 137 + } + ] + }, + { + "id": 2194, + "name": "송혜교", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-10-16T00:02:43Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 97432, + "recipientId": 2194, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/140/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 42", + "font": "Pretendard", + "createdAt": "2023-02-14T20:58:12Z" + }, + { + "id": 57885, + "recipientId": 2194, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/496/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 39", + "font": "Roboto", + "createdAt": "2023-10-19T16:47:29Z" + }, + { + "id": 88963, + "recipientId": 2194, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/317/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 81", + "font": "Nanum Gothic", + "createdAt": "2023-03-12T08:38:10Z" + } + ], + "reactionCount": 32, + "topReactions": [ + { + "emoji": "❤️", + "count": 58 + }, + { + "emoji": "😁", + "count": 334 + } + ] + }, + { + "id": 93426, + "name": "박서준", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-10-25T18:47:40Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 59310, + "recipientId": 93426, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/148/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 64", + "font": "Nanum Gothic", + "createdAt": "2023-12-24T10:04:46Z" + }, + { + "id": 91544, + "recipientId": 93426, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/153/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 79", + "font": "Noto Sans", + "createdAt": "2023-08-13T10:48:12Z" + }, + { + "id": 56708, + "recipientId": 93426, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/55/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 32", + "font": "Noto Sans", + "createdAt": "2023-01-27T22:18:54Z" + } + ], + "reactionCount": 3, + "topReactions": [ + { + "emoji": "😀", + "count": 165 + } + ] + }, + { + "id": 6785, + "name": "현빈", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/6785/600/400", + "createdAt": "2023-08-05T10:49:34Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 96256, + "recipientId": 6785, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/487/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 14", + "font": "Nanum Gothic", + "createdAt": "2023-08-05T11:24:48Z" + }, + { + "id": 95988, + "recipientId": 6785, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/123/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 78", + "font": "Pretendard", + "createdAt": "2023-05-16T00:54:03Z" + }, + { + "id": 85410, + "recipientId": 6785, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/85/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 45", + "font": "Roboto", + "createdAt": "2023-09-22T09:06:14Z" + } + ], + "reactionCount": 18, + "topReactions": [ + { + "emoji": "😀", + "count": 19 + } + ] + }, + { + "id": 70576, + "name": "정우성", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2024-01-24T03:10:15Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 5439, + "recipientId": 70576, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/172/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 41", + "font": "Roboto", + "createdAt": "2023-04-08T06:16:02Z" + } + ], + "reactionCount": 86, + "topReactions": [ + { + "emoji": "❤️", + "count": 680 + } + ] + }, + { + "id": 45901, + "name": "차은우", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-06-14T15:34:31Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 38672, + "recipientId": 45901, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/444/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 57", + "font": "Pretendard", + "createdAt": "2023-08-25T13:09:41Z" + }, + { + "id": 36570, + "recipientId": 45901, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/26/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 24", + "font": "Noto Sans", + "createdAt": "2023-08-23T03:39:28Z" + }, + { + "id": 62649, + "recipientId": 45901, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/332/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 79", + "font": "Noto Sans", + "createdAt": "2023-01-07T13:25:26Z" + } + ], + "reactionCount": 15, + "topReactions": [ + { + "emoji": "❤️", + "count": 648 + }, + { + "emoji": "😁", + "count": 457 + } + ] + }, + { + "id": 11943, + "name": "한지민", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-12-25T19:30:42Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 48559, + "recipientId": 11943, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/96/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 96", + "font": "Pretendard", + "createdAt": "2023-12-20T03:53:10Z" + } + ], + "reactionCount": 17, + "topReactions": [ + { + "emoji": "😀", + "count": 525 + }, + { + "emoji": "🎉", + "count": 408 + }, + { + "emoji": "🥹", + "count": 160 + } + ] + }, + { + "id": 72748, + "name": "전지현", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2024-01-18T06:23:22Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 70819, + "recipientId": 72748, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/178/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 32", + "font": "Pretendard", + "createdAt": "2023-11-07T20:19:02Z" + }, + { + "id": 26784, + "recipientId": 72748, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/400/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 61", + "font": "Nanum Gothic", + "createdAt": "2023-10-23T08:44:07Z" + } + ], + "reactionCount": 36, + "topReactions": [ + { + "emoji": "😀", + "count": 472 + }, + { + "emoji": "❤️", + "count": 938 + }, + { + "emoji": "🎉", + "count": 169 + } + ] + }, + { + "id": 84532, + "name": "김하은", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-11-26T12:07:49Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 99518, + "recipientId": 84532, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/2/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 83", + "font": "Nanum Gothic", + "createdAt": "2023-07-12T22:08:05Z" + }, + { + "id": 26554, + "recipientId": 84532, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/411/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 100", + "font": "Nanum Gothic", + "createdAt": "2023-12-14T17:02:19Z" + }, + { + "id": 70782, + "recipientId": 84532, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/179/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 92", + "font": "Pretendard", + "createdAt": "2023-04-05T09:48:12Z" + } + ], + "reactionCount": 27, + "topReactions": [ + { + "emoji": "🥹", + "count": 55 + } + ] + }, + { + "id": 85839, + "name": "최민수", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/85839/600/400", + "createdAt": "2023-12-24T00:08:48Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 30831, + "recipientId": 85839, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/384/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 43", + "font": "Nanum Gothic", + "createdAt": "2023-09-07T15:08:29Z" + }, + { + "id": 12285, + "recipientId": 85839, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/85/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 3", + "font": "Nanum Gothic", + "createdAt": "2023-04-02T09:00:54Z" + }, + { + "id": 72173, + "recipientId": 85839, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/137/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 84", + "font": "Pretendard", + "createdAt": "2023-04-01T12:40:19Z" + } + ], + "reactionCount": 77, + "topReactions": [ + { + "emoji": "😀", + "count": 634 + } + ] + }, + { + "id": 34462, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/34462/600/400", + "createdAt": "2023-05-09T05:20:10Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 94727, + "recipientId": 34462, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/495/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 1", + "font": "Roboto", + "createdAt": "2024-01-27T04:45:27Z" + }, + { + "id": 65061, + "recipientId": 34462, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/477/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 64", + "font": "Roboto", + "createdAt": "2023-02-21T19:08:42Z" + }, + { + "id": 75109, + "recipientId": 34462, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/149/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 38", + "font": "Roboto", + "createdAt": "2023-05-12T08:59:51Z" + } + ], + "reactionCount": 18, + "topReactions": [ + { + "emoji": "🥹", + "count": 398 + } + ] + }, + { + "id": 76172, + "name": "박서준", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/76172/600/400", + "createdAt": "2023-12-30T15:01:40Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 28913, + "recipientId": 76172, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/499/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 85", + "font": "Nanum Gothic", + "createdAt": "2023-01-06T21:55:19Z" + }, + { + "id": 20559, + "recipientId": 76172, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/315/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 53", + "font": "Roboto", + "createdAt": "2023-07-06T05:06:42Z" + }, + { + "id": 92696, + "recipientId": 76172, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/71/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 39", + "font": "Roboto", + "createdAt": "2023-12-04T21:02:50Z" + } + ], + "reactionCount": 55, + "topReactions": [ + { + "emoji": "🥹", + "count": 309 + } + ] + }, + { + "id": 22270, + "name": "최민수", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-08-29T23:33:29Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 12379, + "recipientId": 22270, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/212/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 30", + "font": "Pretendard", + "createdAt": "2023-01-03T08:31:04Z" + }, + { + "id": 16402, + "recipientId": 22270, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/354/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 34", + "font": "Noto Sans", + "createdAt": "2023-07-25T04:27:06Z" + }, + { + "id": 379, + "recipientId": 22270, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/14/200/200", + "relationship": "친구", + "content": "박서준님의 메세지 내용 4", + "font": "Pretendard", + "createdAt": "2023-07-09T01:19:05Z" + } + ], + "reactionCount": 11, + "topReactions": [ + { + "emoji": "❤️", + "count": 698 + }, + { + "emoji": "👍", + "count": 583 + }, + { + "emoji": "😀", + "count": 349 + } + ] + }, + { + "id": 525, + "name": "김하은", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2024-01-23T15:35:52Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 42938, + "recipientId": 525, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/301/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 29", + "font": "Roboto", + "createdAt": "2023-02-24T19:32:02Z" + }, + { + "id": 26243, + "recipientId": 525, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/470/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 36", + "font": "Noto Sans", + "createdAt": "2024-02-01T22:09:11Z" + }, + { + "id": 87049, + "recipientId": 525, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/97/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 19", + "font": "Pretendard", + "createdAt": "2023-03-20T23:42:55Z" + } + ], + "reactionCount": 40, + "topReactions": [ + { + "emoji": "❤️", + "count": 778 + }, + { + "emoji": "😀", + "count": 821 + } + ] + }, + { + "id": 21667, + "name": "박서준", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/21667/600/400", + "createdAt": "2023-09-14T10:29:13Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 68623, + "recipientId": 21667, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/272/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 34", + "font": "Pretendard", + "createdAt": "2023-04-14T02:05:32Z" + } + ], + "reactionCount": 2, + "topReactions": [ + { + "emoji": "❤️", + "count": 735 + } + ] + }, + { + "id": 22425, + "name": "박서준", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/22425/600/400", + "createdAt": "2023-10-10T09:00:27Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 73839, + "recipientId": 22425, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/10/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 77", + "font": "Pretendard", + "createdAt": "2023-12-14T00:57:33Z" + }, + { + "id": 52414, + "recipientId": 22425, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/225/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 93", + "font": "Nanum Gothic", + "createdAt": "2024-01-13T15:32:28Z" + }, + { + "id": 2179, + "recipientId": 22425, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/233/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 89", + "font": "Noto Sans", + "createdAt": "2023-12-12T17:43:00Z" + } + ], + "reactionCount": 28, + "topReactions": [ + { + "emoji": "🥹", + "count": 407 + } + ] + }, + { + "id": 80244, + "name": "현빈", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/80244/600/400", + "createdAt": "2023-11-15T21:46:24Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 68208, + "recipientId": 80244, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/113/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 4", + "font": "Nanum Gothic", + "createdAt": "2023-11-16T20:54:09Z" + }, + { + "id": 71898, + "recipientId": 80244, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/466/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 20", + "font": "Roboto", + "createdAt": "2023-04-22T21:18:17Z" + }, + { + "id": 70652, + "recipientId": 80244, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/169/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 38", + "font": "Nanum Gothic", + "createdAt": "2023-08-27T22:00:41Z" + } + ], + "reactionCount": 54, + "topReactions": [ + { + "emoji": "🎉", + "count": 91 + } + ] + }, + { + "id": 76854, + "name": "한지민", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/76854/600/400", + "createdAt": "2023-05-13T20:54:53Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 8442, + "recipientId": 76854, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/391/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 6", + "font": "Pretendard", + "createdAt": "2023-12-21T09:27:19Z" + }, + { + "id": 78435, + "recipientId": 76854, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/478/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 90", + "font": "Noto Sans", + "createdAt": "2024-01-11T13:23:28Z" + }, + { + "id": 51295, + "recipientId": 76854, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/470/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 25", + "font": "Roboto", + "createdAt": "2023-11-25T10:48:40Z" + } + ], + "reactionCount": 86, + "topReactions": [ + { + "emoji": "🥹", + "count": 334 + } + ] + }, + { + "id": 50919, + "name": "이영준", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-04-06T15:13:00Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 3111, + "recipientId": 50919, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/384/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 80", + "font": "Pretendard", + "createdAt": "2023-08-12T11:51:00Z" + }, + { + "id": 38535, + "recipientId": 50919, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/170/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 59", + "font": "Roboto", + "createdAt": "2024-01-21T06:32:43Z" + }, + { + "id": 80939, + "recipientId": 50919, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/67/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 8", + "font": "Noto Sans", + "createdAt": "2023-09-23T14:56:17Z" + } + ], + "reactionCount": 76, + "topReactions": [ + { + "emoji": "❤️", + "count": 902 + }, + { + "emoji": "👍", + "count": 427 + } + ] + }, + { + "id": 44601, + "name": "전지현", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-01-29T11:53:40Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 90217, + "recipientId": 44601, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/445/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 14", + "font": "Roboto", + "createdAt": "2023-09-25T19:48:08Z" + }, + { + "id": 73220, + "recipientId": 44601, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/32/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 73", + "font": "Roboto", + "createdAt": "2023-06-09T10:53:20Z" + }, + { + "id": 24251, + "recipientId": 44601, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/256/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 98", + "font": "Noto Sans", + "createdAt": "2023-10-12T16:19:37Z" + } + ], + "reactionCount": 90, + "topReactions": [ + { + "emoji": "😁", + "count": 357 + }, + { + "emoji": "🎉", + "count": 480 + } + ] + }, + { + "id": 37974, + "name": "정우성", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-12-26T20:53:27Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 43644, + "recipientId": 37974, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/215/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 26", + "font": "Roboto", + "createdAt": "2023-10-29T16:46:20Z" + } + ], + "reactionCount": 88, + "topReactions": [ + { + "emoji": "❤️", + "count": 148 + } + ] + }, + { + "id": 65650, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-12-29T01:51:13Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 20882, + "recipientId": 65650, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/342/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 76", + "font": "Roboto", + "createdAt": "2023-01-13T21:59:32Z" + }, + { + "id": 79855, + "recipientId": 65650, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/42/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 71", + "font": "Roboto", + "createdAt": "2023-05-13T19:20:45Z" + }, + { + "id": 38337, + "recipientId": 65650, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/459/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 83", + "font": "Roboto", + "createdAt": "2023-03-02T21:24:55Z" + } + ], + "reactionCount": 17, + "topReactions": [ + { + "emoji": "🎉", + "count": 493 + }, + { + "emoji": "😀", + "count": 464 + } + ] + }, + { + "id": 41386, + "name": "김하은", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-01-01T07:46:06Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 89635, + "recipientId": 41386, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/192/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 44", + "font": "Nanum Gothic", + "createdAt": "2023-08-29T17:09:14Z" + }, + { + "id": 89440, + "recipientId": 41386, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/401/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 35", + "font": "Noto Sans", + "createdAt": "2023-12-31T16:32:30Z" + }, + { + "id": 54885, + "recipientId": 41386, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/97/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 43", + "font": "Nanum Gothic", + "createdAt": "2023-05-05T08:14:34Z" + } + ], + "reactionCount": 78, + "topReactions": [ + { + "emoji": "😀", + "count": 537 + }, + { + "emoji": "😁", + "count": 154 + }, + { + "emoji": "🥹", + "count": 801 + } + ] + }, + { + "id": 5465, + "name": "차은우", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-01-10T18:10:25Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 28514, + "recipientId": 5465, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/388/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 77", + "font": "Pretendard", + "createdAt": "2023-10-28T19:29:15Z" + }, + { + "id": 69038, + "recipientId": 5465, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/412/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 88", + "font": "Noto Sans", + "createdAt": "2023-06-16T07:01:10Z" + }, + { + "id": 24211, + "recipientId": 5465, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/89/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 16", + "font": "Pretendard", + "createdAt": "2023-01-05T16:10:00Z" + } + ], + "reactionCount": 25, + "topReactions": [ + { + "emoji": "👍", + "count": 490 + }, + { + "emoji": "😁", + "count": 686 + } + ] + }, + { + "id": 51890, + "name": "이영준", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-10-30T15:21:41Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 35764, + "recipientId": 51890, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/169/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 43", + "font": "Nanum Gothic", + "createdAt": "2024-01-14T11:24:57Z" + } + ], + "reactionCount": 60, + "topReactions": [ + { + "emoji": "😁", + "count": 127 + }, + { + "emoji": "❤️", + "count": 193 + } + ] + }, + { + "id": 3937, + "name": "김하은", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-08-26T13:39:55Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 16211, + "recipientId": 3937, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/329/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 72", + "font": "Noto Sans", + "createdAt": "2023-09-13T00:33:13Z" + }, + { + "id": 60479, + "recipientId": 3937, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/165/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 34", + "font": "Noto Sans", + "createdAt": "2023-12-21T21:06:23Z" + }, + { + "id": 77695, + "recipientId": 3937, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/390/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 62", + "font": "Pretendard", + "createdAt": "2023-07-27T13:22:46Z" + } + ], + "reactionCount": 3, + "topReactions": [ + { + "emoji": "👍", + "count": 366 + }, + { + "emoji": "🎉", + "count": 391 + }, + { + "emoji": "😀", + "count": 61 + } + ] + }, + { + "id": 15425, + "name": "최민수", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/15425/600/400", + "createdAt": "2024-01-29T12:40:23Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 40648, + "recipientId": 15425, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/236/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 50", + "font": "Roboto", + "createdAt": "2023-01-19T11:20:15Z" + }, + { + "id": 4968, + "recipientId": 15425, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/433/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 47", + "font": "Roboto", + "createdAt": "2023-11-15T17:20:59Z" + }, + { + "id": 38363, + "recipientId": 15425, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/246/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 72", + "font": "Nanum Gothic", + "createdAt": "2023-03-18T16:01:25Z" + } + ], + "reactionCount": 50, + "topReactions": [ + { + "emoji": "🎉", + "count": 503 + }, + { + "emoji": "😁", + "count": 761 + }, + { + "emoji": "👍", + "count": 572 + } + ] + }, + { + "id": 5267, + "name": "한지민", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/5267/600/400", + "createdAt": "2023-08-21T12:37:58Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 56322, + "recipientId": 5267, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/270/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 87", + "font": "Noto Sans", + "createdAt": "2023-12-15T10:09:08Z" + }, + { + "id": 59649, + "recipientId": 5267, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/283/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 5", + "font": "Roboto", + "createdAt": "2023-09-27T15:11:17Z" + }, + { + "id": 30468, + "recipientId": 5267, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/241/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 90", + "font": "Roboto", + "createdAt": "2023-02-21T22:25:32Z" + } + ], + "reactionCount": 19, + "topReactions": [ + { + "emoji": "😀", + "count": 894 + }, + { + "emoji": "😁", + "count": 106 + }, + { + "emoji": "❤️", + "count": 675 + } + ] + }, + { + "id": 76905, + "name": "한지민", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/76905/600/400", + "createdAt": "2023-07-25T12:26:52Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 71574, + "recipientId": 76905, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/299/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 65", + "font": "Pretendard", + "createdAt": "2023-12-25T00:11:15Z" + }, + { + "id": 881, + "recipientId": 76905, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/225/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 55", + "font": "Pretendard", + "createdAt": "2023-10-08T00:53:44Z" + }, + { + "id": 3393, + "recipientId": 76905, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/140/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 36", + "font": "Noto Sans", + "createdAt": "2023-11-01T14:38:31Z" + } + ], + "reactionCount": 89, + "topReactions": [ + { + "emoji": "🥹", + "count": 714 + }, + { + "emoji": "😁", + "count": 930 + } + ] + }, + { + "id": 90385, + "name": "송혜교", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/90385/600/400", + "createdAt": "2023-08-06T10:39:41Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 66552, + "recipientId": 90385, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/498/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 36", + "font": "Noto Sans", + "createdAt": "2023-10-17T11:54:41Z" + } + ], + "reactionCount": 73, + "topReactions": [ + { + "emoji": "❤️", + "count": 423 + } + ] + }, + { + "id": 83350, + "name": "박서준", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/83350/600/400", + "createdAt": "2024-01-11T21:50:53Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 85297, + "recipientId": 83350, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/454/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 81", + "font": "Roboto", + "createdAt": "2023-07-28T00:02:33Z" + }, + { + "id": 78381, + "recipientId": 83350, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/293/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 61", + "font": "Nanum Gothic", + "createdAt": "2023-05-23T14:59:39Z" + } + ], + "reactionCount": 87, + "topReactions": [ + { + "emoji": "🥹", + "count": 422 + } + ] + }, + { + "id": 82914, + "name": "이영준", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-01-18T08:55:14Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 97740, + "recipientId": 82914, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/30/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 95", + "font": "Noto Sans", + "createdAt": "2023-05-17T12:57:29Z" + }, + { + "id": 47854, + "recipientId": 82914, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/267/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 91", + "font": "Roboto", + "createdAt": "2023-02-08T23:14:03Z" + }, + { + "id": 93329, + "recipientId": 82914, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/468/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 86", + "font": "Nanum Gothic", + "createdAt": "2023-04-12T17:20:58Z" + } + ], + "reactionCount": 48, + "topReactions": [ + { + "emoji": "🥹", + "count": 800 + } + ] + }, + { + "id": 39122, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/39122/600/400", + "createdAt": "2024-01-28T01:36:34Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 59673, + "recipientId": 39122, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/467/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 15", + "font": "Nanum Gothic", + "createdAt": "2023-03-20T07:58:11Z" + }, + { + "id": 30276, + "recipientId": 39122, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/111/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 19", + "font": "Nanum Gothic", + "createdAt": "2023-01-11T05:07:07Z" + }, + { + "id": 34351, + "recipientId": 39122, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/201/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 90", + "font": "Roboto", + "createdAt": "2023-03-09T04:25:04Z" + } + ], + "reactionCount": 54, + "topReactions": [ + { + "emoji": "❤️", + "count": 529 + }, + { + "emoji": "🥹", + "count": 458 + } + ] + }, + { + "id": 36279, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-04-06T20:33:22Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 12730, + "recipientId": 36279, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/410/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 15", + "font": "Noto Sans", + "createdAt": "2023-08-13T17:05:31Z" + }, + { + "id": 64017, + "recipientId": 36279, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/1/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 22", + "font": "Nanum Gothic", + "createdAt": "2023-07-14T20:46:20Z" + }, + { + "id": 87956, + "recipientId": 36279, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/362/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 45", + "font": "Pretendard", + "createdAt": "2023-01-10T01:43:19Z" + } + ], + "reactionCount": 58, + "topReactions": [ + { + "emoji": "🥹", + "count": 191 + } + ] + }, + { + "id": 75295, + "name": "정우성", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/75295/600/400", + "createdAt": "2023-06-12T15:45:08Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 87774, + "recipientId": 75295, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/376/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 49", + "font": "Roboto", + "createdAt": "2023-01-22T06:59:23Z" + }, + { + "id": 46159, + "recipientId": 75295, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/478/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 57", + "font": "Noto Sans", + "createdAt": "2023-07-18T17:15:24Z" + }, + { + "id": 34427, + "recipientId": 75295, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/371/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 46", + "font": "Nanum Gothic", + "createdAt": "2023-09-30T13:38:37Z" + } + ], + "reactionCount": 11, + "topReactions": [ + { + "emoji": "🎉", + "count": 198 + }, + { + "emoji": "❤️", + "count": 31 + } + ] + }, + { + "id": 53963, + "name": "이영준", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-04-10T05:19:05Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 8017, + "recipientId": 53963, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/176/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 62", + "font": "Nanum Gothic", + "createdAt": "2023-08-08T16:57:27Z" + }, + { + "id": 65904, + "recipientId": 53963, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/242/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 91", + "font": "Nanum Gothic", + "createdAt": "2023-05-25T20:32:37Z" + }, + { + "id": 38157, + "recipientId": 53963, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/241/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 33", + "font": "Pretendard", + "createdAt": "2023-02-22T19:17:47Z" + } + ], + "reactionCount": 1, + "topReactions": [ + { + "emoji": "🎉", + "count": 230 + }, + { + "emoji": "❤️", + "count": 31 + } + ] + }, + { + "id": 48079, + "name": "현빈", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-08-04T13:19:14Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 66088, + "recipientId": 48079, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/450/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 79", + "font": "Noto Sans", + "createdAt": "2023-03-02T15:36:09Z" + }, + { + "id": 80363, + "recipientId": 48079, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/413/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 56", + "font": "Noto Sans", + "createdAt": "2023-07-22T12:40:41Z" + }, + { + "id": 7160, + "recipientId": 48079, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/394/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 43", + "font": "Nanum Gothic", + "createdAt": "2023-05-06T03:20:45Z" + } + ], + "reactionCount": 13, + "topReactions": [ + { + "emoji": "🥹", + "count": 836 + }, + { + "emoji": "👍", + "count": 817 + }, + { + "emoji": "😁", + "count": 375 + } + ] + }, + { + "id": 2640, + "name": "정우성", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-10-09T05:47:27Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 23910, + "recipientId": 2640, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/181/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 99", + "font": "Roboto", + "createdAt": "2024-01-05T08:03:41Z" + }, + { + "id": 60985, + "recipientId": 2640, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/440/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 52", + "font": "Pretendard", + "createdAt": "2023-05-11T23:03:58Z" + }, + { + "id": 32855, + "recipientId": 2640, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/29/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 76", + "font": "Roboto", + "createdAt": "2023-01-24T04:09:39Z" + } + ], + "reactionCount": 39, + "topReactions": [ + { + "emoji": "😁", + "count": 706 + } + ] + }, + { + "id": 54287, + "name": "이영준", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2024-01-12T17:22:52Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 79772, + "recipientId": 54287, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/25/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 20", + "font": "Pretendard", + "createdAt": "2023-06-06T00:54:01Z" + }, + { + "id": 54858, + "recipientId": 54287, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/28/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 13", + "font": "Noto Sans", + "createdAt": "2024-01-30T02:08:36Z" + } + ], + "reactionCount": 59, + "topReactions": [ + { + "emoji": "😁", + "count": 573 + }, + { + "emoji": "🎉", + "count": 172 + }, + { + "emoji": "👍", + "count": 833 + } + ] + }, + { + "id": 51366, + "name": "이영준", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/51366/600/400", + "createdAt": "2023-09-29T07:35:31Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 92592, + "recipientId": 51366, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/301/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 7", + "font": "Roboto", + "createdAt": "2023-02-08T19:54:33Z" + }, + { + "id": 22441, + "recipientId": 51366, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/424/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 12", + "font": "Noto Sans", + "createdAt": "2023-03-22T19:53:29Z" + }, + { + "id": 74021, + "recipientId": 51366, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/111/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 100", + "font": "Noto Sans", + "createdAt": "2023-09-03T16:40:11Z" + } + ], + "reactionCount": 3, + "topReactions": [ + { + "emoji": "😁", + "count": 599 + } + ] + }, + { + "id": 53790, + "name": "김하은", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/53790/600/400", + "createdAt": "2023-08-17T10:17:13Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 18233, + "recipientId": 53790, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/323/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 35", + "font": "Nanum Gothic", + "createdAt": "2023-07-03T01:10:13Z" + }, + { + "id": 61256, + "recipientId": 53790, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/121/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 80", + "font": "Roboto", + "createdAt": "2023-10-21T06:37:14Z" + }, + { + "id": 44921, + "recipientId": 53790, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/398/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 45", + "font": "Noto Sans", + "createdAt": "2023-06-24T09:03:26Z" + } + ], + "reactionCount": 64, + "topReactions": [ + { + "emoji": "🎉", + "count": 385 + }, + { + "emoji": "👍", + "count": 512 + }, + { + "emoji": "😀", + "count": 705 + } + ] + }, + { + "id": 79165, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/79165/600/400", + "createdAt": "2023-06-19T21:21:37Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 35200, + "recipientId": 79165, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/66/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 94", + "font": "Noto Sans", + "createdAt": "2023-01-31T01:24:39Z" + } + ], + "reactionCount": 43, + "topReactions": [ + { + "emoji": "🎉", + "count": 764 + } + ] + }, + { + "id": 28312, + "name": "현빈", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2024-02-02T23:39:16Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 48020, + "recipientId": 28312, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/405/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 64", + "font": "Nanum Gothic", + "createdAt": "2023-12-24T00:02:37Z" + }, + { + "id": 20798, + "recipientId": 28312, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/51/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 83", + "font": "Noto Sans", + "createdAt": "2023-04-23T15:30:26Z" + }, + { + "id": 87481, + "recipientId": 28312, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/284/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 11", + "font": "Pretendard", + "createdAt": "2023-05-11T12:13:58Z" + } + ], + "reactionCount": 31, + "topReactions": [ + { + "emoji": "👍", + "count": 846 + } + ] + }, + { + "id": 63671, + "name": "송혜교", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-11-27T08:35:03Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 38644, + "recipientId": 63671, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/254/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 13", + "font": "Roboto", + "createdAt": "2023-03-06T23:53:26Z" + }, + { + "id": 83644, + "recipientId": 63671, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/4/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 65", + "font": "Noto Sans", + "createdAt": "2023-05-26T11:25:25Z" + }, + { + "id": 17855, + "recipientId": 63671, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/100/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 56", + "font": "Noto Sans", + "createdAt": "2023-06-05T01:49:30Z" + } + ], + "reactionCount": 33, + "topReactions": [ + { + "emoji": "🥹", + "count": 584 + }, + { + "emoji": "👍", + "count": 958 + } + ] + }, + { + "id": 68523, + "name": "박서준", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/68523/600/400", + "createdAt": "2023-01-29T05:15:30Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 24735, + "recipientId": 68523, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/60/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 99", + "font": "Pretendard", + "createdAt": "2023-10-16T13:33:28Z" + }, + { + "id": 98757, + "recipientId": 68523, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/486/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 21", + "font": "Nanum Gothic", + "createdAt": "2024-01-13T00:27:10Z" + }, + { + "id": 34120, + "recipientId": 68523, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/294/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 73", + "font": "Pretendard", + "createdAt": "2023-11-11T07:45:22Z" + } + ], + "reactionCount": 74, + "topReactions": [ + { + "emoji": "❤️", + "count": 222 + }, + { + "emoji": "🎉", + "count": 8 + }, + { + "emoji": "😀", + "count": 947 + } + ] + }, + { + "id": 73648, + "name": "한지민", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-05-23T17:26:38Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 47579, + "recipientId": 73648, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/331/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 11", + "font": "Roboto", + "createdAt": "2023-12-19T14:09:40Z" + }, + { + "id": 96788, + "recipientId": 73648, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/249/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 54", + "font": "Nanum Gothic", + "createdAt": "2023-09-16T01:58:06Z" + }, + { + "id": 20726, + "recipientId": 73648, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/431/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 78", + "font": "Pretendard", + "createdAt": "2023-07-25T07:59:44Z" + } + ], + "reactionCount": 45, + "topReactions": [ + { + "emoji": "🥹", + "count": 466 + } + ] + }, + { + "id": 3519, + "name": "이영준", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/3519/600/400", + "createdAt": "2023-03-07T10:55:33Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 49350, + "recipientId": 3519, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/37/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 49", + "font": "Roboto", + "createdAt": "2023-12-23T10:53:50Z" + } + ], + "reactionCount": 59, + "topReactions": [ + { + "emoji": "👍", + "count": 787 + }, + { + "emoji": "🎉", + "count": 995 + } + ] + }, + { + "id": 29324, + "name": "전지현", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-11-15T12:34:37Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 66891, + "recipientId": 29324, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/150/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 28", + "font": "Roboto", + "createdAt": "2024-01-16T01:09:36Z" + } + ], + "reactionCount": 91, + "topReactions": [ + { + "emoji": "👍", + "count": 571 + } + ] + }, + { + "id": 34799, + "name": "최민수", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/34799/600/400", + "createdAt": "2023-05-26T14:19:32Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 64083, + "recipientId": 34799, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/269/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 15", + "font": "Nanum Gothic", + "createdAt": "2023-09-02T06:05:45Z" + }, + { + "id": 29589, + "recipientId": 34799, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/471/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 7", + "font": "Noto Sans", + "createdAt": "2023-06-15T19:01:12Z" + }, + { + "id": 30989, + "recipientId": 34799, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/129/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 45", + "font": "Roboto", + "createdAt": "2023-03-23T13:04:58Z" + } + ], + "reactionCount": 8, + "topReactions": [ + { + "emoji": "🥹", + "count": 229 + }, + { + "emoji": "👍", + "count": 597 + } + ] + }, + { + "id": 35446, + "name": "현빈", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-12-14T18:07:09Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 58428, + "recipientId": 35446, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/426/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 29", + "font": "Noto Sans", + "createdAt": "2023-09-15T23:26:36Z" + }, + { + "id": 58296, + "recipientId": 35446, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/211/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 44", + "font": "Nanum Gothic", + "createdAt": "2023-01-01T12:11:21Z" + }, + { + "id": 2388, + "recipientId": 35446, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/489/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 92", + "font": "Noto Sans", + "createdAt": "2023-01-24T10:23:16Z" + } + ], + "reactionCount": 68, + "topReactions": [ + { + "emoji": "👍", + "count": 102 + }, + { + "emoji": "❤️", + "count": 306 + } + ] + }, + { + "id": 43465, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/43465/600/400", + "createdAt": "2023-06-17T10:24:36Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 49416, + "recipientId": 43465, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/159/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 31", + "font": "Nanum Gothic", + "createdAt": "2023-09-13T13:59:21Z" + }, + { + "id": 47626, + "recipientId": 43465, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/428/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 40", + "font": "Pretendard", + "createdAt": "2023-06-13T04:40:39Z" + }, + { + "id": 38141, + "recipientId": 43465, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/165/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 19", + "font": "Nanum Gothic", + "createdAt": "2023-03-01T14:53:42Z" + } + ], + "reactionCount": 32, + "topReactions": [ + { + "emoji": "❤️", + "count": 759 + } + ] + }, + { + "id": 35138, + "name": "정우성", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/35138/600/400", + "createdAt": "2023-10-26T18:11:01Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 28846, + "recipientId": 35138, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/383/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 85", + "font": "Pretendard", + "createdAt": "2023-10-31T04:33:01Z" + }, + { + "id": 67016, + "recipientId": 35138, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/473/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 30", + "font": "Noto Sans", + "createdAt": "2023-08-22T17:48:28Z" + }, + { + "id": 26345, + "recipientId": 35138, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/424/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 77", + "font": "Roboto", + "createdAt": "2023-08-06T00:17:22Z" + } + ], + "reactionCount": 53, + "topReactions": [ + { + "emoji": "👍", + "count": 559 + } + ] + }, + { + "id": 57025, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-09-24T09:40:21Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 86332, + "recipientId": 57025, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/66/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 3", + "font": "Noto Sans", + "createdAt": "2023-08-27T00:28:01Z" + }, + { + "id": 62727, + "recipientId": 57025, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/322/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 24", + "font": "Roboto", + "createdAt": "2023-02-01T13:03:37Z" + } + ], + "reactionCount": 97, + "topReactions": [ + { + "emoji": "👍", + "count": 780 + } + ] + }, + { + "id": 73391, + "name": "전지현", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/73391/600/400", + "createdAt": "2024-01-13T03:42:57Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 55060, + "recipientId": 73391, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/255/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 54", + "font": "Roboto", + "createdAt": "2023-11-01T01:54:10Z" + }, + { + "id": 73020, + "recipientId": 73391, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/124/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 61", + "font": "Nanum Gothic", + "createdAt": "2023-06-28T02:59:56Z" + }, + { + "id": 65998, + "recipientId": 73391, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/117/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 7", + "font": "Noto Sans", + "createdAt": "2023-06-29T21:54:39Z" + } + ], + "reactionCount": 64, + "topReactions": [ + { + "emoji": "🎉", + "count": 698 + } + ] + }, + { + "id": 14280, + "name": "송혜교", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-08-01T17:10:49Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 56101, + "recipientId": 14280, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/371/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 71", + "font": "Pretendard", + "createdAt": "2023-06-06T07:40:33Z" + }, + { + "id": 95535, + "recipientId": 14280, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/31/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 13", + "font": "Noto Sans", + "createdAt": "2023-01-24T13:48:36Z" + }, + { + "id": 61373, + "recipientId": 14280, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/378/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 94", + "font": "Nanum Gothic", + "createdAt": "2023-10-05T12:57:26Z" + } + ], + "reactionCount": 18, + "topReactions": [ + { + "emoji": "🥹", + "count": 609 + } + ] + }, + { + "id": 62767, + "name": "최민수", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-02-20T13:06:25Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 88527, + "recipientId": 62767, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/344/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 55", + "font": "Noto Sans", + "createdAt": "2023-08-22T10:55:21Z" + }, + { + "id": 13081, + "recipientId": 62767, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/354/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 29", + "font": "Roboto", + "createdAt": "2024-01-03T06:33:31Z" + }, + { + "id": 60642, + "recipientId": 62767, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/378/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 48", + "font": "Noto Sans", + "createdAt": "2023-05-16T05:34:20Z" + } + ], + "reactionCount": 64, + "topReactions": [ + { + "emoji": "😀", + "count": 486 + }, + { + "emoji": "❤️", + "count": 416 + }, + { + "emoji": "👍", + "count": 171 + } + ] + }, + { + "id": 7728, + "name": "이영준", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/7728/600/400", + "createdAt": "2023-09-25T02:59:47Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 37394, + "recipientId": 7728, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/309/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 74", + "font": "Noto Sans", + "createdAt": "2023-03-21T04:47:53Z" + }, + { + "id": 88123, + "recipientId": 7728, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/370/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 25", + "font": "Pretendard", + "createdAt": "2023-08-14T12:27:46Z" + }, + { + "id": 43663, + "recipientId": 7728, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/444/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 84", + "font": "Nanum Gothic", + "createdAt": "2023-12-29T08:07:41Z" + } + ], + "reactionCount": 36, + "topReactions": [ + { + "emoji": "🎉", + "count": 231 + }, + { + "emoji": "🥹", + "count": 667 + }, + { + "emoji": "👍", + "count": 246 + } + ] + }, + { + "id": 26744, + "name": "차은우", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-03-23T03:14:00Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 71764, + "recipientId": 26744, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/311/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 72", + "font": "Roboto", + "createdAt": "2023-05-07T16:58:02Z" + }, + { + "id": 64322, + "recipientId": 26744, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/6/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 11", + "font": "Roboto", + "createdAt": "2023-12-03T19:24:09Z" + }, + { + "id": 94348, + "recipientId": 26744, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/84/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 100", + "font": "Pretendard", + "createdAt": "2023-11-23T06:33:34Z" + } + ], + "reactionCount": 96, + "topReactions": [ + { + "emoji": "😁", + "count": 921 + }, + { + "emoji": "❤️", + "count": 453 + }, + { + "emoji": "🎉", + "count": 433 + } + ] + }, + { + "id": 93103, + "name": "현빈", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/93103/600/400", + "createdAt": "2023-01-01T05:08:24Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 5540, + "recipientId": 93103, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/74/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 49", + "font": "Nanum Gothic", + "createdAt": "2023-03-28T10:31:32Z" + }, + { + "id": 50339, + "recipientId": 93103, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/74/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 12", + "font": "Noto Sans", + "createdAt": "2023-10-03T18:22:10Z" + }, + { + "id": 75277, + "recipientId": 93103, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/165/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 17", + "font": "Roboto", + "createdAt": "2023-07-28T04:12:32Z" + } + ], + "reactionCount": 57, + "topReactions": [ + { + "emoji": "😀", + "count": 379 + } + ] + }, + { + "id": 90477, + "name": "현빈", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/90477/600/400", + "createdAt": "2023-03-02T13:15:54Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 35228, + "recipientId": 90477, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/94/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 63", + "font": "Roboto", + "createdAt": "2023-05-25T06:02:55Z" + }, + { + "id": 50401, + "recipientId": 90477, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/89/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 84", + "font": "Pretendard", + "createdAt": "2024-01-09T23:38:08Z" + }, + { + "id": 95955, + "recipientId": 90477, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/472/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 21", + "font": "Pretendard", + "createdAt": "2023-08-01T20:07:21Z" + } + ], + "reactionCount": 96, + "topReactions": [ + { + "emoji": "😁", + "count": 286 + }, + { + "emoji": "😀", + "count": 100 + } + ] + }, + { + "id": 82677, + "name": "김하은", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/82677/600/400", + "createdAt": "2023-02-13T13:40:06Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 90214, + "recipientId": 82677, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/195/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 99", + "font": "Pretendard", + "createdAt": "2023-07-17T22:33:03Z" + }, + { + "id": 9562, + "recipientId": 82677, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/92/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 67", + "font": "Roboto", + "createdAt": "2023-07-31T01:08:53Z" + }, + { + "id": 84870, + "recipientId": 82677, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/420/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 46", + "font": "Roboto", + "createdAt": "2023-12-17T05:44:51Z" + } + ], + "reactionCount": 76, + "topReactions": [ + { + "emoji": "❤️", + "count": 367 + }, + { + "emoji": "👍", + "count": 476 + }, + { + "emoji": "😀", + "count": 449 + } + ] + }, + { + "id": 92597, + "name": "현빈", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/92597/600/400", + "createdAt": "2023-06-08T00:17:35Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 32441, + "recipientId": 92597, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/130/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 20", + "font": "Nanum Gothic", + "createdAt": "2023-03-13T15:52:33Z" + }, + { + "id": 30686, + "recipientId": 92597, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/301/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 76", + "font": "Roboto", + "createdAt": "2023-05-31T09:51:47Z" + }, + { + "id": 65036, + "recipientId": 92597, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/20/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 72", + "font": "Pretendard", + "createdAt": "2023-12-21T10:58:20Z" + } + ], + "reactionCount": 54, + "topReactions": [ + { + "emoji": "🥹", + "count": 474 + } + ] + }, + { + "id": 86205, + "name": "최민수", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-11-27T17:51:50Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 96831, + "recipientId": 86205, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/348/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 44", + "font": "Roboto", + "createdAt": "2023-08-13T20:07:55Z" + }, + { + "id": 20859, + "recipientId": 86205, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/266/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 81", + "font": "Noto Sans", + "createdAt": "2023-04-17T18:16:14Z" + }, + { + "id": 55279, + "recipientId": 86205, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/483/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 69", + "font": "Noto Sans", + "createdAt": "2024-01-27T19:13:38Z" + } + ], + "reactionCount": 89, + "topReactions": [ + { + "emoji": "😁", + "count": 393 + }, + { + "emoji": "🥹", + "count": 30 + } + ] + }, + { + "id": 83780, + "name": "송혜교", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-02-24T11:43:37Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 10008, + "recipientId": 83780, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/464/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 84", + "font": "Roboto", + "createdAt": "2024-01-11T21:23:27Z" + }, + { + "id": 6414, + "recipientId": 83780, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/104/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 56", + "font": "Roboto", + "createdAt": "2023-01-11T02:47:15Z" + }, + { + "id": 5190, + "recipientId": 83780, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/119/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 2", + "font": "Pretendard", + "createdAt": "2023-04-24T17:49:24Z" + } + ], + "reactionCount": 81, + "topReactions": [ + { + "emoji": "🎉", + "count": 609 + } + ] + }, + { + "id": 38229, + "name": "송혜교", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/38229/600/400", + "createdAt": "2023-01-30T14:18:54Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 51942, + "recipientId": 38229, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/134/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 54", + "font": "Nanum Gothic", + "createdAt": "2023-03-20T04:36:24Z" + }, + { + "id": 86324, + "recipientId": 38229, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/233/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 86", + "font": "Nanum Gothic", + "createdAt": "2023-10-10T17:45:30Z" + }, + { + "id": 90356, + "recipientId": 38229, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/229/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 59", + "font": "Nanum Gothic", + "createdAt": "2023-03-24T14:49:12Z" + } + ], + "reactionCount": 59, + "topReactions": [ + { + "emoji": "🎉", + "count": 205 + }, + { + "emoji": "🥹", + "count": 461 + }, + { + "emoji": "😀", + "count": 580 + } + ] + }, + { + "id": 31714, + "name": "차은우", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/31714/600/400", + "createdAt": "2023-01-13T08:26:56Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 13368, + "recipientId": 31714, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/274/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 54", + "font": "Nanum Gothic", + "createdAt": "2023-08-29T23:09:43Z" + } + ], + "reactionCount": 15, + "topReactions": [ + { + "emoji": "🥹", + "count": 854 + } + ] + }, + { + "id": 24976, + "name": "전지현", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-12-12T12:27:23Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 21316, + "recipientId": 24976, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/106/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 56", + "font": "Roboto", + "createdAt": "2023-01-09T20:33:19Z" + }, + { + "id": 58002, + "recipientId": 24976, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/183/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 81", + "font": "Roboto", + "createdAt": "2023-01-08T15:28:27Z" + }, + { + "id": 88820, + "recipientId": 24976, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/355/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 72", + "font": "Pretendard", + "createdAt": "2023-12-02T16:28:28Z" + } + ], + "reactionCount": 14, + "topReactions": [ + { + "emoji": "🎉", + "count": 534 + }, + { + "emoji": "😀", + "count": 337 + } + ] + }, + { + "id": 13246, + "name": "현빈", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/13246/600/400", + "createdAt": "2024-01-28T13:20:43Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 5106, + "recipientId": 13246, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/198/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 81", + "font": "Nanum Gothic", + "createdAt": "2023-08-15T19:24:32Z" + }, + { + "id": 14675, + "recipientId": 13246, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/378/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 100", + "font": "Nanum Gothic", + "createdAt": "2023-12-09T18:47:45Z" + }, + { + "id": 88634, + "recipientId": 13246, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/286/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 3", + "font": "Pretendard", + "createdAt": "2023-06-16T01:43:57Z" + } + ], + "reactionCount": 26, + "topReactions": [ + { + "emoji": "❤️", + "count": 655 + }, + { + "emoji": "😁", + "count": 504 + } + ] + }, + { + "id": 80427, + "name": "김하은", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-07-18T23:35:46Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 27419, + "recipientId": 80427, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/496/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 32", + "font": "Pretendard", + "createdAt": "2023-04-12T22:20:48Z" + }, + { + "id": 6424, + "recipientId": 80427, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/148/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 81", + "font": "Noto Sans", + "createdAt": "2024-01-17T02:57:29Z" + }, + { + "id": 80098, + "recipientId": 80427, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/163/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 100", + "font": "Noto Sans", + "createdAt": "2023-07-13T01:55:00Z" + } + ], + "reactionCount": 60, + "topReactions": [ + { + "emoji": "😁", + "count": 41 + } + ] + }, + { + "id": 9191, + "name": "박서준", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/9191/600/400", + "createdAt": "2023-12-26T20:03:21Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 35658, + "recipientId": 9191, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/62/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 27", + "font": "Nanum Gothic", + "createdAt": "2023-04-09T12:56:46Z" + }, + { + "id": 20743, + "recipientId": 9191, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/59/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 23", + "font": "Noto Sans", + "createdAt": "2023-05-09T21:29:01Z" + }, + { + "id": 20041, + "recipientId": 9191, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/114/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 72", + "font": "Pretendard", + "createdAt": "2023-11-11T12:43:30Z" + } + ], + "reactionCount": 90, + "topReactions": [ + { + "emoji": "❤️", + "count": 771 + }, + { + "emoji": "😀", + "count": 898 + }, + { + "emoji": "🎉", + "count": 17 + } + ] + }, + { + "id": 80709, + "name": "전지현", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/80709/600/400", + "createdAt": "2023-10-26T20:03:42Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 29605, + "recipientId": 80709, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/86/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 27", + "font": "Pretendard", + "createdAt": "2023-07-06T04:37:31Z" + }, + { + "id": 50599, + "recipientId": 80709, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/117/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 12", + "font": "Pretendard", + "createdAt": "2023-06-10T14:25:31Z" + } + ], + "reactionCount": 53, + "topReactions": [ + { + "emoji": "🎉", + "count": 153 + } + ] + }, + { + "id": 625, + "name": "전지현", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/625/600/400", + "createdAt": "2023-12-14T02:55:26Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 59897, + "recipientId": 625, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/411/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 99", + "font": "Nanum Gothic", + "createdAt": "2023-03-12T00:35:57Z" + }, + { + "id": 53736, + "recipientId": 625, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/411/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 98", + "font": "Nanum Gothic", + "createdAt": "2023-06-06T17:47:12Z" + }, + { + "id": 9641, + "recipientId": 625, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/498/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 66", + "font": "Pretendard", + "createdAt": "2023-07-05T12:51:17Z" + } + ], + "reactionCount": 66, + "topReactions": [ + { + "emoji": "🥹", + "count": 640 + }, + { + "emoji": "😁", + "count": 605 + } + ] + }, + { + "id": 23417, + "name": "최민수", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/23417/600/400", + "createdAt": "2023-09-15T03:16:30Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 82536, + "recipientId": 23417, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/236/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 76", + "font": "Roboto", + "createdAt": "2023-03-05T16:15:27Z" + }, + { + "id": 22812, + "recipientId": 23417, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/441/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 10", + "font": "Pretendard", + "createdAt": "2023-07-09T04:44:48Z" + }, + { + "id": 53607, + "recipientId": 23417, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/402/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 96", + "font": "Noto Sans", + "createdAt": "2023-06-28T04:25:20Z" + } + ], + "reactionCount": 42, + "topReactions": [ + { + "emoji": "😁", + "count": 463 + }, + { + "emoji": "❤️", + "count": 510 + } + ] + }, + { + "id": 60892, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/60892/600/400", + "createdAt": "2023-11-21T04:18:37Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 18337, + "recipientId": 60892, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/99/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 47", + "font": "Nanum Gothic", + "createdAt": "2023-04-10T16:57:19Z" + }, + { + "id": 88221, + "recipientId": 60892, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/477/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 35", + "font": "Noto Sans", + "createdAt": "2023-05-10T18:53:49Z" + }, + { + "id": 97322, + "recipientId": 60892, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/146/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 17", + "font": "Pretendard", + "createdAt": "2023-09-10T05:52:40Z" + } + ], + "reactionCount": 51, + "topReactions": [ + { + "emoji": "😁", + "count": 808 + }, + { + "emoji": "❤️", + "count": 905 + }, + { + "emoji": "😀", + "count": 541 + } + ] + }, + { + "id": 77216, + "name": "송혜교", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-03-12T09:36:47Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 20785, + "recipientId": 77216, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/163/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 58", + "font": "Noto Sans", + "createdAt": "2023-07-17T16:37:49Z" + }, + { + "id": 1433, + "recipientId": 77216, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/379/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 21", + "font": "Pretendard", + "createdAt": "2023-08-26T07:59:50Z" + }, + { + "id": 8255, + "recipientId": 77216, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/492/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 85", + "font": "Nanum Gothic", + "createdAt": "2023-11-20T17:06:48Z" + } + ], + "reactionCount": 6, + "topReactions": [ + { + "emoji": "🎉", + "count": 654 + }, + { + "emoji": "👍", + "count": 618 + }, + { + "emoji": "🥹", + "count": 827 + } + ] + }, + { + "id": 48647, + "name": "현빈", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-11-16T13:18:03Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 76625, + "recipientId": 48647, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/256/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 98", + "font": "Pretendard", + "createdAt": "2023-03-21T02:42:08Z" + }, + { + "id": 43638, + "recipientId": 48647, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/410/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 41", + "font": "Noto Sans", + "createdAt": "2023-04-24T22:09:02Z" + }, + { + "id": 26804, + "recipientId": 48647, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/347/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 88", + "font": "Pretendard", + "createdAt": "2024-01-08T19:39:50Z" + } + ], + "reactionCount": 28, + "topReactions": [ + { + "emoji": "🎉", + "count": 993 + }, + { + "emoji": "😀", + "count": 939 + }, + { + "emoji": "❤️", + "count": 447 + } + ] + }, + { + "id": 7110, + "name": "전지현", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-10-20T12:41:27Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 90888, + "recipientId": 7110, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/19/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 42", + "font": "Roboto", + "createdAt": "2023-09-16T18:15:50Z" + }, + { + "id": 11380, + "recipientId": 7110, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/373/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 42", + "font": "Roboto", + "createdAt": "2023-04-14T16:26:10Z" + }, + { + "id": 26575, + "recipientId": 7110, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/184/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 65", + "font": "Pretendard", + "createdAt": "2023-07-31T19:38:34Z" + } + ], + "reactionCount": 75, + "topReactions": [ + { + "emoji": "❤️", + "count": 861 + }, + { + "emoji": "👍", + "count": 953 + }, + { + "emoji": "🎉", + "count": 390 + } + ] + }, + { + "id": 45995, + "name": "이영준", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-09-30T01:37:16Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 62949, + "recipientId": 45995, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/270/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 52", + "font": "Pretendard", + "createdAt": "2023-12-26T22:51:46Z" + }, + { + "id": 54691, + "recipientId": 45995, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/148/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 77", + "font": "Pretendard", + "createdAt": "2023-12-25T22:42:52Z" + }, + { + "id": 41428, + "recipientId": 45995, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/13/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 11", + "font": "Roboto", + "createdAt": "2023-04-15T01:57:19Z" + } + ], + "reactionCount": 52, + "topReactions": [ + { + "emoji": "🎉", + "count": 945 + }, + { + "emoji": "❤️", + "count": 556 + }, + { + "emoji": "🥹", + "count": 28 + } + ] + }, + { + "id": 75973, + "name": "차은우", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/75973/600/400", + "createdAt": "2023-04-29T23:14:33Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 85401, + "recipientId": 75973, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/269/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 90", + "font": "Noto Sans", + "createdAt": "2023-11-12T05:17:44Z" + }, + { + "id": 35095, + "recipientId": 75973, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/390/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 74", + "font": "Roboto", + "createdAt": "2023-10-05T14:15:30Z" + }, + { + "id": 99991, + "recipientId": 75973, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/240/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 17", + "font": "Nanum Gothic", + "createdAt": "2023-09-17T18:51:27Z" + } + ], + "reactionCount": 27, + "topReactions": [ + { + "emoji": "😁", + "count": 850 + }, + { + "emoji": "🥹", + "count": 931 + } + ] + }, + { + "id": 61839, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/61839/600/400", + "createdAt": "2023-08-11T13:58:13Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 76692, + "recipientId": 61839, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/257/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 71", + "font": "Roboto", + "createdAt": "2023-04-13T09:59:09Z" + }, + { + "id": 94381, + "recipientId": 61839, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/344/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 63", + "font": "Noto Sans", + "createdAt": "2023-03-28T05:18:11Z" + }, + { + "id": 56587, + "recipientId": 61839, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/194/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 92", + "font": "Pretendard", + "createdAt": "2023-02-13T15:44:01Z" + } + ], + "reactionCount": 54, + "topReactions": [ + { + "emoji": "🥹", + "count": 74 + }, + { + "emoji": "😀", + "count": 239 + } + ] + }, + { + "id": 17028, + "name": "박서준", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-10-12T01:14:00Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 80146, + "recipientId": 17028, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/273/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 50", + "font": "Nanum Gothic", + "createdAt": "2023-08-20T23:27:16Z" + }, + { + "id": 45410, + "recipientId": 17028, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/371/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 22", + "font": "Nanum Gothic", + "createdAt": "2023-03-05T19:49:12Z" + }, + { + "id": 72881, + "recipientId": 17028, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/471/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 45", + "font": "Nanum Gothic", + "createdAt": "2024-01-21T18:46:39Z" + } + ], + "reactionCount": 66, + "topReactions": [ + { + "emoji": "😀", + "count": 657 + }, + { + "emoji": "😁", + "count": 573 + } + ] + }, + { + "id": 58041, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/58041/600/400", + "createdAt": "2023-04-05T19:24:00Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 44629, + "recipientId": 58041, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/385/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 51", + "font": "Pretendard", + "createdAt": "2024-01-26T15:26:36Z" + }, + { + "id": 78779, + "recipientId": 58041, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/86/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 54", + "font": "Nanum Gothic", + "createdAt": "2023-04-15T11:17:51Z" + }, + { + "id": 48497, + "recipientId": 58041, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/17/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 56", + "font": "Roboto", + "createdAt": "2023-04-05T00:53:28Z" + } + ], + "reactionCount": 48, + "topReactions": [ + { + "emoji": "❤️", + "count": 258 + }, + { + "emoji": "😀", + "count": 476 + }, + { + "emoji": "👍", + "count": 813 + } + ] + }, + { + "id": 75495, + "name": "현빈", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-05-01T13:49:11Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 43732, + "recipientId": 75495, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/7/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 78", + "font": "Roboto", + "createdAt": "2023-02-07T09:31:01Z" + }, + { + "id": 49379, + "recipientId": 75495, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/332/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 21", + "font": "Roboto", + "createdAt": "2024-02-05T01:17:08Z" + }, + { + "id": 71393, + "recipientId": 75495, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/126/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 48", + "font": "Noto Sans", + "createdAt": "2023-01-26T06:27:51Z" + } + ], + "reactionCount": 55, + "topReactions": [ + { + "emoji": "🎉", + "count": 347 + }, + { + "emoji": "😀", + "count": 532 + }, + { + "emoji": "❤️", + "count": 718 + } + ] + }, + { + "id": 87390, + "name": "이영준", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-05-14T14:22:59Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 78211, + "recipientId": 87390, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/382/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 5", + "font": "Noto Sans", + "createdAt": "2023-09-05T09:24:06Z" + }, + { + "id": 28440, + "recipientId": 87390, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/360/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 77", + "font": "Pretendard", + "createdAt": "2023-12-12T04:25:04Z" + }, + { + "id": 82273, + "recipientId": 87390, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/17/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 50", + "font": "Noto Sans", + "createdAt": "2024-01-03T08:25:32Z" + } + ], + "reactionCount": 6, + "topReactions": [ + { + "emoji": "🎉", + "count": 169 + }, + { + "emoji": "😁", + "count": 329 + } + ] + }, + { + "id": 38320, + "name": "송혜교", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/38320/600/400", + "createdAt": "2023-08-11T20:43:38Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 37599, + "recipientId": 38320, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/36/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 46", + "font": "Noto Sans", + "createdAt": "2023-10-23T14:59:02Z" + }, + { + "id": 29674, + "recipientId": 38320, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/441/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 48", + "font": "Nanum Gothic", + "createdAt": "2023-02-06T21:23:13Z" + }, + { + "id": 32572, + "recipientId": 38320, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/197/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 38", + "font": "Nanum Gothic", + "createdAt": "2023-12-03T06:30:07Z" + } + ], + "reactionCount": 24, + "topReactions": [ + { + "emoji": "❤️", + "count": 996 + } + ] + }, + { + "id": 35660, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-12-15T20:22:31Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 94600, + "recipientId": 35660, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/203/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 33", + "font": "Roboto", + "createdAt": "2023-02-08T07:18:43Z" + }, + { + "id": 55920, + "recipientId": 35660, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/386/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 98", + "font": "Nanum Gothic", + "createdAt": "2023-09-22T08:00:11Z" + }, + { + "id": 18674, + "recipientId": 35660, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/308/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 9", + "font": "Nanum Gothic", + "createdAt": "2023-11-03T06:40:58Z" + } + ], + "reactionCount": 65, + "topReactions": [ + { + "emoji": "❤️", + "count": 276 + }, + { + "emoji": "😀", + "count": 421 + } + ] + }, + { + "id": 32314, + "name": "차은우", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-06-09T07:16:23Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 89356, + "recipientId": 32314, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/104/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 25", + "font": "Nanum Gothic", + "createdAt": "2023-12-02T19:32:52Z" + }, + { + "id": 10034, + "recipientId": 32314, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/288/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 22", + "font": "Pretendard", + "createdAt": "2023-09-14T13:27:24Z" + }, + { + "id": 75054, + "recipientId": 32314, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/483/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 25", + "font": "Pretendard", + "createdAt": "2023-03-09T17:03:28Z" + } + ], + "reactionCount": 59, + "topReactions": [ + { + "emoji": "😀", + "count": 832 + } + ] + }, + { + "id": 43043, + "name": "송혜교", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/43043/600/400", + "createdAt": "2023-02-22T13:08:51Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 47574, + "recipientId": 43043, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/63/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 2", + "font": "Noto Sans", + "createdAt": "2023-08-29T05:01:20Z" + }, + { + "id": 38817, + "recipientId": 43043, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/439/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 21", + "font": "Noto Sans", + "createdAt": "2023-04-16T03:40:54Z" + }, + { + "id": 16978, + "recipientId": 43043, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/425/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 17", + "font": "Pretendard", + "createdAt": "2023-11-16T09:47:54Z" + } + ], + "reactionCount": 16, + "topReactions": [ + { + "emoji": "😁", + "count": 23 + } + ] + }, + { + "id": 45937, + "name": "김하은", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2024-01-22T12:24:12Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 5896, + "recipientId": 45937, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/38/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 44", + "font": "Pretendard", + "createdAt": "2023-12-13T13:33:23Z" + }, + { + "id": 49858, + "recipientId": 45937, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/367/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 7", + "font": "Roboto", + "createdAt": "2023-09-15T13:57:29Z" + }, + { + "id": 49667, + "recipientId": 45937, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/407/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 34", + "font": "Noto Sans", + "createdAt": "2023-07-28T02:57:58Z" + } + ], + "reactionCount": 37, + "topReactions": [ + { + "emoji": "❤️", + "count": 693 + } + ] + }, + { + "id": 63219, + "name": "이영준", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/63219/600/400", + "createdAt": "2023-06-12T11:10:34Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 75822, + "recipientId": 63219, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/119/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 59", + "font": "Roboto", + "createdAt": "2023-04-03T20:37:21Z" + }, + { + "id": 49459, + "recipientId": 63219, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/181/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 83", + "font": "Pretendard", + "createdAt": "2023-11-12T23:18:57Z" + }, + { + "id": 50489, + "recipientId": 63219, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/11/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 77", + "font": "Noto Sans", + "createdAt": "2023-11-27T08:16:32Z" + } + ], + "reactionCount": 17, + "topReactions": [ + { + "emoji": "🥹", + "count": 700 + } + ] + }, + { + "id": 32218, + "name": "차은우", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-07-22T22:33:51Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 68615, + "recipientId": 32218, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/279/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 35", + "font": "Nanum Gothic", + "createdAt": "2023-01-19T15:23:35Z" + }, + { + "id": 42475, + "recipientId": 32218, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/15/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 9", + "font": "Nanum Gothic", + "createdAt": "2023-10-23T06:35:16Z" + }, + { + "id": 84692, + "recipientId": 32218, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/335/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 43", + "font": "Noto Sans", + "createdAt": "2023-06-03T21:56:10Z" + } + ], + "reactionCount": 47, + "topReactions": [ + { + "emoji": "🎉", + "count": 474 + }, + { + "emoji": "👍", + "count": 437 + } + ] + }, + { + "id": 80991, + "name": "정우성", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-10-23T18:52:08Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 84011, + "recipientId": 80991, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/258/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 18", + "font": "Nanum Gothic", + "createdAt": "2023-06-07T13:22:14Z" + }, + { + "id": 35058, + "recipientId": 80991, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/223/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 70", + "font": "Pretendard", + "createdAt": "2023-01-22T04:44:31Z" + }, + { + "id": 9223, + "recipientId": 80991, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/474/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 97", + "font": "Nanum Gothic", + "createdAt": "2023-03-05T23:34:32Z" + } + ], + "reactionCount": 2, + "topReactions": [ + { + "emoji": "👍", + "count": 425 + } + ] + }, + { + "id": 1341, + "name": "송혜교", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-07-12T16:03:05Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 3046, + "recipientId": 1341, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/167/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 93", + "font": "Roboto", + "createdAt": "2023-11-10T18:21:23Z" + }, + { + "id": 47841, + "recipientId": 1341, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/186/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 51", + "font": "Noto Sans", + "createdAt": "2023-07-15T12:17:59Z" + }, + { + "id": 24988, + "recipientId": 1341, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/423/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 64", + "font": "Roboto", + "createdAt": "2023-01-06T05:53:05Z" + } + ], + "reactionCount": 95, + "topReactions": [ + { + "emoji": "🎉", + "count": 666 + } + ] + }, + { + "id": 6051, + "name": "정우성", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/6051/600/400", + "createdAt": "2023-11-10T15:09:44Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 7288, + "recipientId": 6051, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/156/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 39", + "font": "Noto Sans", + "createdAt": "2023-07-23T06:22:45Z" + }, + { + "id": 13782, + "recipientId": 6051, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/433/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 100", + "font": "Pretendard", + "createdAt": "2023-02-11T22:46:47Z" + }, + { + "id": 33148, + "recipientId": 6051, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/442/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 35", + "font": "Nanum Gothic", + "createdAt": "2023-08-13T00:23:31Z" + } + ], + "reactionCount": 87, + "topReactions": [ + { + "emoji": "🎉", + "count": 381 + } + ] + }, + { + "id": 93438, + "name": "차은우", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/93438/600/400", + "createdAt": "2023-04-02T11:00:53Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 66472, + "recipientId": 93438, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/333/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 94", + "font": "Nanum Gothic", + "createdAt": "2023-03-26T16:14:53Z" + }, + { + "id": 6156, + "recipientId": 93438, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/109/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 59", + "font": "Noto Sans", + "createdAt": "2023-01-24T10:30:39Z" + }, + { + "id": 45844, + "recipientId": 93438, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/182/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 33", + "font": "Noto Sans", + "createdAt": "2023-11-23T09:30:34Z" + } + ], + "reactionCount": 99, + "topReactions": [ + { + "emoji": "😁", + "count": 891 + } + ] + }, + { + "id": 44334, + "name": "차은우", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/44334/600/400", + "createdAt": "2023-12-30T01:42:47Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 42994, + "recipientId": 44334, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/465/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 81", + "font": "Roboto", + "createdAt": "2023-02-14T10:13:11Z" + }, + { + "id": 56130, + "recipientId": 44334, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/227/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 25", + "font": "Roboto", + "createdAt": "2023-02-02T18:27:08Z" + }, + { + "id": 41595, + "recipientId": 44334, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/64/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 86", + "font": "Pretendard", + "createdAt": "2023-01-18T09:46:31Z" + } + ], + "reactionCount": 87, + "topReactions": [ + { + "emoji": "❤️", + "count": 390 + } + ] + }, + { + "id": 82732, + "name": "최민수", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-01-17T04:31:54Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 97297, + "recipientId": 82732, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/444/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 78", + "font": "Nanum Gothic", + "createdAt": "2023-02-09T10:16:50Z" + }, + { + "id": 71861, + "recipientId": 82732, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/498/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 55", + "font": "Roboto", + "createdAt": "2023-03-15T16:30:09Z" + }, + { + "id": 74035, + "recipientId": 82732, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/36/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 23", + "font": "Roboto", + "createdAt": "2024-01-21T23:20:59Z" + } + ], + "reactionCount": 70, + "topReactions": [ + { + "emoji": "🥹", + "count": 766 + } + ] + }, + { + "id": 44928, + "name": "차은우", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-11-24T12:12:26Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 76155, + "recipientId": 44928, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/40/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 88", + "font": "Pretendard", + "createdAt": "2023-03-16T10:54:28Z" + } + ], + "reactionCount": 8, + "topReactions": [ + { + "emoji": "🥹", + "count": 470 + }, + { + "emoji": "❤️", + "count": 625 + } + ] + }, + { + "id": 94539, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2024-01-11T07:24:22Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 31761, + "recipientId": 94539, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/62/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 53", + "font": "Pretendard", + "createdAt": "2023-04-17T18:23:36Z" + }, + { + "id": 6032, + "recipientId": 94539, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/230/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 76", + "font": "Noto Sans", + "createdAt": "2023-03-28T17:44:01Z" + }, + { + "id": 79432, + "recipientId": 94539, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/178/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 36", + "font": "Roboto", + "createdAt": "2023-05-31T20:44:54Z" + } + ], + "reactionCount": 92, + "topReactions": [ + { + "emoji": "😀", + "count": 634 + }, + { + "emoji": "👍", + "count": 296 + } + ] + }, + { + "id": 91720, + "name": "한지민", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-12-15T09:41:38Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 44369, + "recipientId": 91720, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/306/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 1", + "font": "Roboto", + "createdAt": "2023-05-14T15:14:24Z" + }, + { + "id": 9488, + "recipientId": 91720, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/61/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 100", + "font": "Nanum Gothic", + "createdAt": "2023-02-20T18:02:40Z" + }, + { + "id": 44680, + "recipientId": 91720, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/40/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 57", + "font": "Roboto", + "createdAt": "2023-09-07T19:51:33Z" + } + ], + "reactionCount": 73, + "topReactions": [ + { + "emoji": "😁", + "count": 171 + }, + { + "emoji": "🎉", + "count": 87 + } + ] + }, + { + "id": 35251, + "name": "정우성", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-12-25T20:29:41Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 1090, + "recipientId": 35251, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/153/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 98", + "font": "Pretendard", + "createdAt": "2023-01-13T11:39:47Z" + }, + { + "id": 26846, + "recipientId": 35251, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/446/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 85", + "font": "Pretendard", + "createdAt": "2023-03-07T08:41:00Z" + }, + { + "id": 91912, + "recipientId": 35251, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/70/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 94", + "font": "Pretendard", + "createdAt": "2023-07-06T10:59:43Z" + } + ], + "reactionCount": 96, + "topReactions": [ + { + "emoji": "😀", + "count": 844 + } + ] + }, + { + "id": 16404, + "name": "정우성", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-02-23T07:55:55Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 89953, + "recipientId": 16404, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/4/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 31", + "font": "Noto Sans", + "createdAt": "2023-11-18T03:28:41Z" + }, + { + "id": 44698, + "recipientId": 16404, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/343/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 48", + "font": "Noto Sans", + "createdAt": "2023-12-03T23:14:10Z" + }, + { + "id": 14294, + "recipientId": 16404, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/174/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 18", + "font": "Roboto", + "createdAt": "2023-11-22T08:04:12Z" + } + ], + "reactionCount": 76, + "topReactions": [ + { + "emoji": "😀", + "count": 470 + }, + { + "emoji": "❤️", + "count": 638 + }, + { + "emoji": "👍", + "count": 364 + } + ] + }, + { + "id": 50859, + "name": "한지민", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/50859/600/400", + "createdAt": "2023-03-29T03:53:06Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 77856, + "recipientId": 50859, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/153/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 43", + "font": "Nanum Gothic", + "createdAt": "2023-06-15T17:57:20Z" + } + ], + "reactionCount": 79, + "topReactions": [ + { + "emoji": "😀", + "count": 595 + } + ] + }, + { + "id": 21841, + "name": "정우성", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2024-01-24T03:56:41Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 24360, + "recipientId": 21841, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/454/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 45", + "font": "Nanum Gothic", + "createdAt": "2023-05-23T11:32:35Z" + }, + { + "id": 31827, + "recipientId": 21841, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/324/200/200", + "relationship": "친구", + "content": "박서준님의 메세지 내용 54", + "font": "Nanum Gothic", + "createdAt": "2023-04-07T21:22:40Z" + }, + { + "id": 42374, + "recipientId": 21841, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/296/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 42", + "font": "Roboto", + "createdAt": "2023-09-30T04:17:59Z" + } + ], + "reactionCount": 73, + "topReactions": [ + { + "emoji": "👍", + "count": 375 + }, + { + "emoji": "😀", + "count": 358 + } + ] + }, + { + "id": 76780, + "name": "한지민", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-03-09T13:34:00Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 51517, + "recipientId": 76780, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/379/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 45", + "font": "Pretendard", + "createdAt": "2023-02-16T02:02:14Z" + }, + { + "id": 60139, + "recipientId": 76780, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/233/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 65", + "font": "Nanum Gothic", + "createdAt": "2023-04-10T04:53:06Z" + } + ], + "reactionCount": 82, + "topReactions": [ + { + "emoji": "😀", + "count": 232 + }, + { + "emoji": "🎉", + "count": 564 + } + ] + }, + { + "id": 8022, + "name": "한지민", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-09-10T18:36:50Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 47963, + "recipientId": 8022, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/396/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 18", + "font": "Nanum Gothic", + "createdAt": "2023-12-03T16:01:09Z" + }, + { + "id": 2686, + "recipientId": 8022, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/310/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 24", + "font": "Roboto", + "createdAt": "2023-08-02T03:38:21Z" + }, + { + "id": 64093, + "recipientId": 8022, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/126/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 16", + "font": "Roboto", + "createdAt": "2023-02-25T20:36:10Z" + } + ], + "reactionCount": 57, + "topReactions": [ + { + "emoji": "🥹", + "count": 243 + }, + { + "emoji": "🎉", + "count": 12 + }, + { + "emoji": "😁", + "count": 966 + } + ] + }, + { + "id": 36777, + "name": "김하은", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/36777/600/400", + "createdAt": "2023-11-13T20:58:33Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 25834, + "recipientId": 36777, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/30/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 23", + "font": "Roboto", + "createdAt": "2023-09-22T02:37:47Z" + }, + { + "id": 18411, + "recipientId": 36777, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/445/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 64", + "font": "Roboto", + "createdAt": "2023-09-24T01:46:01Z" + }, + { + "id": 76753, + "recipientId": 36777, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/283/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 94", + "font": "Nanum Gothic", + "createdAt": "2023-07-19T00:26:10Z" + } + ], + "reactionCount": 47, + "topReactions": [ + { + "emoji": "🎉", + "count": 383 + }, + { + "emoji": "😁", + "count": 160 + }, + { + "emoji": "🥹", + "count": 822 + } + ] + }, + { + "id": 74659, + "name": "전지현", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-11-17T12:30:58Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 82067, + "recipientId": 74659, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/404/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 78", + "font": "Nanum Gothic", + "createdAt": "2024-01-18T12:11:24Z" + } + ], + "reactionCount": 43, + "topReactions": [ + { + "emoji": "🥹", + "count": 544 + }, + { + "emoji": "😀", + "count": 617 + } + ] + }, + { + "id": 43809, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/43809/600/400", + "createdAt": "2023-10-03T16:37:43Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 55697, + "recipientId": 43809, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/412/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 3", + "font": "Roboto", + "createdAt": "2023-03-06T06:54:25Z" + }, + { + "id": 41596, + "recipientId": 43809, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/439/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 36", + "font": "Roboto", + "createdAt": "2023-02-12T07:13:07Z" + }, + { + "id": 65835, + "recipientId": 43809, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/87/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 89", + "font": "Roboto", + "createdAt": "2023-06-21T12:20:45Z" + } + ], + "reactionCount": 45, + "topReactions": [ + { + "emoji": "🥹", + "count": 3 + }, + { + "emoji": "😀", + "count": 575 + } + ] + }, + { + "id": 74443, + "name": "한지민", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2024-01-17T14:09:15Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 46450, + "recipientId": 74443, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/416/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 33", + "font": "Noto Sans", + "createdAt": "2024-02-01T01:10:37Z" + }, + { + "id": 11534, + "recipientId": 74443, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/129/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 27", + "font": "Roboto", + "createdAt": "2024-02-04T19:36:42Z" + }, + { + "id": 29956, + "recipientId": 74443, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/154/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 16", + "font": "Pretendard", + "createdAt": "2023-11-27T09:06:13Z" + } + ], + "reactionCount": 7, + "topReactions": [ + { + "emoji": "😁", + "count": 772 + }, + { + "emoji": "❤️", + "count": 189 + } + ] + }, + { + "id": 62125, + "name": "현빈", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/62125/600/400", + "createdAt": "2023-11-29T07:54:55Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 48839, + "recipientId": 62125, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/498/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 22", + "font": "Pretendard", + "createdAt": "2023-10-25T11:05:34Z" + }, + { + "id": 52003, + "recipientId": 62125, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/74/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 2", + "font": "Roboto", + "createdAt": "2023-11-20T16:46:22Z" + }, + { + "id": 62162, + "recipientId": 62125, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/293/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 93", + "font": "Roboto", + "createdAt": "2023-04-29T23:05:56Z" + } + ], + "reactionCount": 75, + "topReactions": [ + { + "emoji": "🎉", + "count": 421 + } + ] + }, + { + "id": 32686, + "name": "정우성", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-09-25T19:47:20Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 25980, + "recipientId": 32686, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/361/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 13", + "font": "Noto Sans", + "createdAt": "2023-12-08T15:22:48Z" + }, + { + "id": 73942, + "recipientId": 32686, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/397/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 6", + "font": "Noto Sans", + "createdAt": "2023-01-24T00:32:12Z" + }, + { + "id": 85294, + "recipientId": 32686, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/46/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 38", + "font": "Noto Sans", + "createdAt": "2023-08-16T17:04:11Z" + } + ], + "reactionCount": 55, + "topReactions": [ + { + "emoji": "🎉", + "count": 521 + } + ] + }, + { + "id": 58844, + "name": "최민수", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-12-01T03:42:08Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 49248, + "recipientId": 58844, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/171/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 11", + "font": "Nanum Gothic", + "createdAt": "2023-03-24T16:30:51Z" + }, + { + "id": 32838, + "recipientId": 58844, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/22/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 29", + "font": "Nanum Gothic", + "createdAt": "2024-01-03T03:12:01Z" + }, + { + "id": 91516, + "recipientId": 58844, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/108/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 82", + "font": "Pretendard", + "createdAt": "2023-08-27T12:05:46Z" + } + ], + "reactionCount": 20, + "topReactions": [ + { + "emoji": "❤️", + "count": 154 + } + ] + }, + { + "id": 72437, + "name": "현빈", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/72437/600/400", + "createdAt": "2023-08-28T14:40:53Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 73936, + "recipientId": 72437, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/317/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 18", + "font": "Noto Sans", + "createdAt": "2023-04-04T14:53:21Z" + }, + { + "id": 29903, + "recipientId": 72437, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/106/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 40", + "font": "Roboto", + "createdAt": "2023-04-29T16:49:48Z" + } + ], + "reactionCount": 98, + "topReactions": [ + { + "emoji": "❤️", + "count": 11 + } + ] + }, + { + "id": 31124, + "name": "한지민", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-09-22T15:01:23Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 24005, + "recipientId": 31124, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/440/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 80", + "font": "Roboto", + "createdAt": "2023-12-17T16:17:25Z" + }, + { + "id": 68955, + "recipientId": 31124, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/6/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 85", + "font": "Roboto", + "createdAt": "2023-07-18T06:13:13Z" + }, + { + "id": 91691, + "recipientId": 31124, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/461/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 53", + "font": "Roboto", + "createdAt": "2023-05-21T09:55:42Z" + } + ], + "reactionCount": 91, + "topReactions": [ + { + "emoji": "😁", + "count": 439 + }, + { + "emoji": "👍", + "count": 337 + } + ] + }, + { + "id": 73111, + "name": "차은우", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-12-29T11:24:51Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 19737, + "recipientId": 73111, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/434/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 87", + "font": "Noto Sans", + "createdAt": "2023-02-10T04:25:44Z" + }, + { + "id": 24750, + "recipientId": 73111, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/52/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 49", + "font": "Roboto", + "createdAt": "2023-10-10T22:47:57Z" + } + ], + "reactionCount": 16, + "topReactions": [ + { + "emoji": "👍", + "count": 642 + } + ] + }, + { + "id": 44599, + "name": "최민수", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-12-01T19:25:38Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 77427, + "recipientId": 44599, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/9/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 7", + "font": "Noto Sans", + "createdAt": "2024-01-08T12:37:16Z" + }, + { + "id": 2974, + "recipientId": 44599, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/46/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 13", + "font": "Roboto", + "createdAt": "2023-11-11T07:56:34Z" + }, + { + "id": 31985, + "recipientId": 44599, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/340/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 27", + "font": "Pretendard", + "createdAt": "2023-12-03T01:18:34Z" + } + ], + "reactionCount": 54, + "topReactions": [ + { + "emoji": "❤️", + "count": 97 + }, + { + "emoji": "😀", + "count": 591 + } + ] + }, + { + "id": 53998, + "name": "최민수", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/53998/600/400", + "createdAt": "2023-05-21T05:46:16Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 42481, + "recipientId": 53998, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/226/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 83", + "font": "Pretendard", + "createdAt": "2023-12-02T23:46:08Z" + }, + { + "id": 45560, + "recipientId": 53998, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/336/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 93", + "font": "Pretendard", + "createdAt": "2023-04-05T16:17:22Z" + }, + { + "id": 44511, + "recipientId": 53998, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/401/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 24", + "font": "Noto Sans", + "createdAt": "2023-12-30T08:26:11Z" + } + ], + "reactionCount": 99, + "topReactions": [ + { + "emoji": "😀", + "count": 360 + }, + { + "emoji": "👍", + "count": 360 + }, + { + "emoji": "🥹", + "count": 667 + } + ] + }, + { + "id": 89555, + "name": "정우성", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/89555/600/400", + "createdAt": "2023-11-04T11:24:31Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 75585, + "recipientId": 89555, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/82/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 79", + "font": "Noto Sans", + "createdAt": "2023-08-27T02:20:45Z" + }, + { + "id": 45846, + "recipientId": 89555, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/66/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 16", + "font": "Nanum Gothic", + "createdAt": "2023-12-16T12:24:17Z" + }, + { + "id": 78446, + "recipientId": 89555, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/162/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 43", + "font": "Roboto", + "createdAt": "2023-10-20T14:00:34Z" + } + ], + "reactionCount": 81, + "topReactions": [ + { + "emoji": "👍", + "count": 825 + } + ] + }, + { + "id": 12891, + "name": "전지현", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/12891/600/400", + "createdAt": "2023-04-02T10:50:44Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 69504, + "recipientId": 12891, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/372/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 100", + "font": "Noto Sans", + "createdAt": "2023-06-24T18:34:35Z" + }, + { + "id": 16122, + "recipientId": 12891, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/384/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 61", + "font": "Pretendard", + "createdAt": "2024-01-15T10:37:45Z" + }, + { + "id": 48360, + "recipientId": 12891, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/331/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 9", + "font": "Noto Sans", + "createdAt": "2024-01-22T14:41:55Z" + } + ], + "reactionCount": 91, + "topReactions": [ + { + "emoji": "😀", + "count": 979 + }, + { + "emoji": "😁", + "count": 230 + } + ] + }, + { + "id": 21026, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/21026/600/400", + "createdAt": "2023-06-24T21:14:04Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 78110, + "recipientId": 21026, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/86/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 72", + "font": "Nanum Gothic", + "createdAt": "2023-10-03T05:53:18Z" + }, + { + "id": 17655, + "recipientId": 21026, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/24/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 99", + "font": "Noto Sans", + "createdAt": "2023-02-16T19:23:42Z" + } + ], + "reactionCount": 48, + "topReactions": [ + { + "emoji": "🎉", + "count": 36 + } + ] + }, + { + "id": 72332, + "name": "차은우", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/72332/600/400", + "createdAt": "2023-10-08T20:12:12Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 88347, + "recipientId": 72332, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/25/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 18", + "font": "Nanum Gothic", + "createdAt": "2023-07-12T05:02:22Z" + }, + { + "id": 18515, + "recipientId": 72332, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/259/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 35", + "font": "Nanum Gothic", + "createdAt": "2023-02-04T02:14:10Z" + }, + { + "id": 10191, + "recipientId": 72332, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/400/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 76", + "font": "Pretendard", + "createdAt": "2023-07-03T21:04:14Z" + } + ], + "reactionCount": 84, + "topReactions": [ + { + "emoji": "🎉", + "count": 320 + } + ] + }, + { + "id": 9856, + "name": "이영준", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-04-25T13:16:15Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 62780, + "recipientId": 9856, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/466/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 28", + "font": "Nanum Gothic", + "createdAt": "2024-01-09T20:20:07Z" + }, + { + "id": 87691, + "recipientId": 9856, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/219/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 11", + "font": "Pretendard", + "createdAt": "2023-09-13T03:47:51Z" + }, + { + "id": 33613, + "recipientId": 9856, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/231/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 14", + "font": "Nanum Gothic", + "createdAt": "2023-05-13T08:02:20Z" + } + ], + "reactionCount": 86, + "topReactions": [ + { + "emoji": "😀", + "count": 371 + } + ] + }, + { + "id": 6048, + "name": "한지민", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-11-21T11:02:16Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 47612, + "recipientId": 6048, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/97/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 72", + "font": "Pretendard", + "createdAt": "2023-12-11T12:42:57Z" + }, + { + "id": 50485, + "recipientId": 6048, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/84/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 24", + "font": "Nanum Gothic", + "createdAt": "2023-12-01T20:34:55Z" + }, + { + "id": 42372, + "recipientId": 6048, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/478/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 38", + "font": "Roboto", + "createdAt": "2023-09-10T14:19:59Z" + } + ], + "reactionCount": 93, + "topReactions": [ + { + "emoji": "🎉", + "count": 177 + } + ] + }, + { + "id": 7768, + "name": "송혜교", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/7768/600/400", + "createdAt": "2024-02-03T06:34:20Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 91935, + "recipientId": 7768, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/196/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 39", + "font": "Noto Sans", + "createdAt": "2023-10-26T02:05:13Z" + }, + { + "id": 54283, + "recipientId": 7768, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/368/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 8", + "font": "Nanum Gothic", + "createdAt": "2023-02-19T15:25:55Z" + }, + { + "id": 22996, + "recipientId": 7768, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/323/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 36", + "font": "Nanum Gothic", + "createdAt": "2023-05-07T10:13:46Z" + } + ], + "reactionCount": 17, + "topReactions": [ + { + "emoji": "😁", + "count": 948 + } + ] + }, + { + "id": 60032, + "name": "정우성", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/60032/600/400", + "createdAt": "2023-05-02T10:55:07Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 16669, + "recipientId": 60032, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/209/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 97", + "font": "Roboto", + "createdAt": "2023-10-20T20:11:37Z" + }, + { + "id": 91971, + "recipientId": 60032, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/494/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 6", + "font": "Nanum Gothic", + "createdAt": "2023-09-08T08:31:38Z" + }, + { + "id": 66344, + "recipientId": 60032, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/444/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 47", + "font": "Pretendard", + "createdAt": "2023-07-26T07:54:55Z" + } + ], + "reactionCount": 61, + "topReactions": [ + { + "emoji": "😀", + "count": 77 + } + ] + }, + { + "id": 90521, + "name": "김하은", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/90521/600/400", + "createdAt": "2023-04-23T15:43:22Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 84413, + "recipientId": 90521, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/266/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 66", + "font": "Nanum Gothic", + "createdAt": "2023-10-18T10:21:59Z" + } + ], + "reactionCount": 58, + "topReactions": [ + { + "emoji": "❤️", + "count": 740 + } + ] + }, + { + "id": 88686, + "name": "김하은", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/88686/600/400", + "createdAt": "2023-10-03T13:17:00Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 94186, + "recipientId": 88686, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/271/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 5", + "font": "Nanum Gothic", + "createdAt": "2023-09-06T14:11:21Z" + } + ], + "reactionCount": 83, + "topReactions": [ + { + "emoji": "🎉", + "count": 116 + } + ] + }, + { + "id": 19057, + "name": "현빈", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/19057/600/400", + "createdAt": "2023-08-11T17:15:28Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 77529, + "recipientId": 19057, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/20/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 29", + "font": "Pretendard", + "createdAt": "2024-01-29T23:03:48Z" + }, + { + "id": 90459, + "recipientId": 19057, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/264/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 15", + "font": "Roboto", + "createdAt": "2023-08-14T06:22:29Z" + }, + { + "id": 34301, + "recipientId": 19057, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/172/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 66", + "font": "Noto Sans", + "createdAt": "2024-01-21T14:02:39Z" + } + ], + "reactionCount": 47, + "topReactions": [ + { + "emoji": "😀", + "count": 983 + }, + { + "emoji": "😁", + "count": 421 + } + ] + }, + { + "id": 27685, + "name": "김하은", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-12-05T11:32:51Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 47201, + "recipientId": 27685, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/309/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 20", + "font": "Pretendard", + "createdAt": "2023-09-27T00:49:21Z" + }, + { + "id": 62272, + "recipientId": 27685, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/63/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 7", + "font": "Roboto", + "createdAt": "2023-01-26T03:30:29Z" + }, + { + "id": 20963, + "recipientId": 27685, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/385/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 44", + "font": "Pretendard", + "createdAt": "2023-11-26T17:32:56Z" + } + ], + "reactionCount": 15, + "topReactions": [ + { + "emoji": "❤️", + "count": 506 + }, + { + "emoji": "🎉", + "count": 735 + }, + { + "emoji": "😁", + "count": 370 + } + ] + }, + { + "id": 27107, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/27107/600/400", + "createdAt": "2023-12-02T07:20:10Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 97932, + "recipientId": 27107, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/497/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 78", + "font": "Roboto", + "createdAt": "2023-09-11T04:54:00Z" + } + ], + "reactionCount": 55, + "topReactions": [ + { + "emoji": "❤️", + "count": 368 + }, + { + "emoji": "🥹", + "count": 996 + } + ] + }, + { + "id": 5946, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/5946/600/400", + "createdAt": "2024-01-08T03:36:35Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 66117, + "recipientId": 5946, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/453/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 70", + "font": "Nanum Gothic", + "createdAt": "2023-10-08T04:49:43Z" + }, + { + "id": 33590, + "recipientId": 5946, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/446/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 45", + "font": "Nanum Gothic", + "createdAt": "2023-02-24T20:46:51Z" + } + ], + "reactionCount": 80, + "topReactions": [ + { + "emoji": "😀", + "count": 807 + } + ] + }, + { + "id": 28566, + "name": "정우성", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-11-09T11:10:28Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 19714, + "recipientId": 28566, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/177/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 25", + "font": "Pretendard", + "createdAt": "2023-07-21T02:56:53Z" + } + ], + "reactionCount": 4, + "topReactions": [ + { + "emoji": "😀", + "count": 81 + }, + { + "emoji": "😁", + "count": 425 + } + ] + }, + { + "id": 84533, + "name": "김하은", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2024-01-08T03:10:08Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 25694, + "recipientId": 84533, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/96/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 36", + "font": "Pretendard", + "createdAt": "2023-01-14T06:23:45Z" + }, + { + "id": 89853, + "recipientId": 84533, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/52/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 28", + "font": "Nanum Gothic", + "createdAt": "2023-06-23T08:29:50Z" + }, + { + "id": 3101, + "recipientId": 84533, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/28/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 63", + "font": "Nanum Gothic", + "createdAt": "2024-01-12T05:42:09Z" + } + ], + "reactionCount": 23, + "topReactions": [ + { + "emoji": "😀", + "count": 865 + } + ] + }, + { + "id": 96506, + "name": "박서준", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-06-09T15:04:25Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 48175, + "recipientId": 96506, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/145/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 86", + "font": "Pretendard", + "createdAt": "2023-03-13T10:17:35Z" + }, + { + "id": 93664, + "recipientId": 96506, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/238/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 22", + "font": "Noto Sans", + "createdAt": "2023-12-31T04:01:30Z" + }, + { + "id": 17811, + "recipientId": 96506, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/87/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 26", + "font": "Noto Sans", + "createdAt": "2024-01-16T04:31:27Z" + } + ], + "reactionCount": 29, + "topReactions": [ + { + "emoji": "🎉", + "count": 167 + } + ] + }, + { + "id": 83453, + "name": "김하은", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-08-02T05:41:33Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 62207, + "recipientId": 83453, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/181/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 88", + "font": "Roboto", + "createdAt": "2023-12-18T17:43:56Z" + }, + { + "id": 64882, + "recipientId": 83453, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/145/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 95", + "font": "Roboto", + "createdAt": "2023-10-19T03:30:01Z" + }, + { + "id": 51419, + "recipientId": 83453, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/161/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 98", + "font": "Roboto", + "createdAt": "2023-02-09T11:45:22Z" + } + ], + "reactionCount": 10, + "topReactions": [ + { + "emoji": "🎉", + "count": 388 + } + ] + }, + { + "id": 74991, + "name": "한지민", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/74991/600/400", + "createdAt": "2023-03-21T17:29:11Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 43900, + "recipientId": 74991, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/306/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 74", + "font": "Roboto", + "createdAt": "2024-01-11T12:45:15Z" + }, + { + "id": 23958, + "recipientId": 74991, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/14/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 84", + "font": "Pretendard", + "createdAt": "2023-05-03T21:07:40Z" + }, + { + "id": 89183, + "recipientId": 74991, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/355/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 91", + "font": "Pretendard", + "createdAt": "2023-04-27T03:48:45Z" + } + ], + "reactionCount": 45, + "topReactions": [ + { + "emoji": "👍", + "count": 253 + }, + { + "emoji": "🎉", + "count": 611 + } + ] + }, + { + "id": 10732, + "name": "현빈", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2024-01-29T01:17:08Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 28091, + "recipientId": 10732, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/214/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 90", + "font": "Nanum Gothic", + "createdAt": "2023-02-16T06:24:10Z" + }, + { + "id": 96968, + "recipientId": 10732, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/334/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 86", + "font": "Nanum Gothic", + "createdAt": "2023-04-29T02:44:44Z" + }, + { + "id": 11805, + "recipientId": 10732, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/76/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 48", + "font": "Nanum Gothic", + "createdAt": "2023-12-29T05:06:21Z" + } + ], + "reactionCount": 45, + "topReactions": [ + { + "emoji": "👍", + "count": 956 + }, + { + "emoji": "🎉", + "count": 702 + }, + { + "emoji": "❤️", + "count": 858 + } + ] + }, + { + "id": 46305, + "name": "현빈", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/46305/600/400", + "createdAt": "2023-02-20T22:15:25Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 94045, + "recipientId": 46305, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/2/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 65", + "font": "Noto Sans", + "createdAt": "2023-02-05T06:10:36Z" + }, + { + "id": 27482, + "recipientId": 46305, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/443/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 4", + "font": "Noto Sans", + "createdAt": "2023-02-22T15:24:55Z" + }, + { + "id": 33966, + "recipientId": 46305, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/394/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 33", + "font": "Noto Sans", + "createdAt": "2023-05-08T01:31:25Z" + } + ], + "reactionCount": 99, + "topReactions": [ + { + "emoji": "👍", + "count": 359 + } + ] + }, + { + "id": 64061, + "name": "현빈", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-05-08T17:59:24Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 23840, + "recipientId": 64061, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/74/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 74", + "font": "Nanum Gothic", + "createdAt": "2023-07-23T08:30:41Z" + }, + { + "id": 94450, + "recipientId": 64061, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/353/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 61", + "font": "Pretendard", + "createdAt": "2023-12-02T06:48:01Z" + }, + { + "id": 14478, + "recipientId": 64061, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/435/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 13", + "font": "Roboto", + "createdAt": "2023-02-11T15:00:07Z" + } + ], + "reactionCount": 9, + "topReactions": [ + { + "emoji": "🥹", + "count": 658 + } + ] + }, + { + "id": 15549, + "name": "차은우", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-12-13T10:07:11Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 25725, + "recipientId": 15549, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/22/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 37", + "font": "Nanum Gothic", + "createdAt": "2023-06-08T04:48:57Z" + }, + { + "id": 60095, + "recipientId": 15549, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/425/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 83", + "font": "Noto Sans", + "createdAt": "2023-01-05T05:19:05Z" + }, + { + "id": 24093, + "recipientId": 15549, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/328/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 66", + "font": "Nanum Gothic", + "createdAt": "2023-06-17T11:09:48Z" + } + ], + "reactionCount": 72, + "topReactions": [ + { + "emoji": "🥹", + "count": 585 + }, + { + "emoji": "👍", + "count": 331 + } + ] + }, + { + "id": 84213, + "name": "송혜교", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/84213/600/400", + "createdAt": "2023-12-21T22:50:35Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 76650, + "recipientId": 84213, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/401/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 23", + "font": "Roboto", + "createdAt": "2023-11-24T00:40:50Z" + }, + { + "id": 67124, + "recipientId": 84213, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/482/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 81", + "font": "Pretendard", + "createdAt": "2023-04-16T14:42:59Z" + }, + { + "id": 92607, + "recipientId": 84213, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/428/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 89", + "font": "Roboto", + "createdAt": "2023-02-24T01:40:42Z" + } + ], + "reactionCount": 5, + "topReactions": [ + { + "emoji": "😁", + "count": 335 + } + ] + }, + { + "id": 90495, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/90495/600/400", + "createdAt": "2023-04-23T14:47:14Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 27573, + "recipientId": 90495, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/490/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 64", + "font": "Nanum Gothic", + "createdAt": "2023-06-17T05:10:47Z" + }, + { + "id": 96157, + "recipientId": 90495, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/75/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 30", + "font": "Noto Sans", + "createdAt": "2023-03-11T02:09:50Z" + }, + { + "id": 39533, + "recipientId": 90495, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/436/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 38", + "font": "Roboto", + "createdAt": "2023-03-15T20:24:49Z" + } + ], + "reactionCount": 0, + "topReactions": [ + { + "emoji": "🥹", + "count": 650 + } + ] + }, + { + "id": 83558, + "name": "한지민", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/83558/600/400", + "createdAt": "2023-03-30T04:18:29Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 91701, + "recipientId": 83558, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/169/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 97", + "font": "Noto Sans", + "createdAt": "2023-11-22T09:50:03Z" + }, + { + "id": 23330, + "recipientId": 83558, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/8/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 77", + "font": "Noto Sans", + "createdAt": "2024-01-04T23:36:01Z" + }, + { + "id": 79589, + "recipientId": 83558, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/472/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 24", + "font": "Pretendard", + "createdAt": "2023-01-02T22:24:57Z" + } + ], + "reactionCount": 95, + "topReactions": [ + { + "emoji": "😁", + "count": 794 + } + ] + }, + { + "id": 66320, + "name": "전지현", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-02-20T16:11:28Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 2994, + "recipientId": 66320, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/84/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 2", + "font": "Nanum Gothic", + "createdAt": "2023-08-27T10:17:50Z" + }, + { + "id": 56137, + "recipientId": 66320, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/1/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 56", + "font": "Noto Sans", + "createdAt": "2023-08-10T23:57:30Z" + }, + { + "id": 53043, + "recipientId": 66320, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/48/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 5", + "font": "Noto Sans", + "createdAt": "2024-01-18T11:22:58Z" + } + ], + "reactionCount": 63, + "topReactions": [ + { + "emoji": "😀", + "count": 235 + }, + { + "emoji": "🥹", + "count": 186 + }, + { + "emoji": "❤️", + "count": 701 + } + ] + }, + { + "id": 1220, + "name": "김하은", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/1220/600/400", + "createdAt": "2023-11-08T12:25:25Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 86215, + "recipientId": 1220, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/419/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 25", + "font": "Pretendard", + "createdAt": "2023-05-10T21:59:12Z" + } + ], + "reactionCount": 14, + "topReactions": [ + { + "emoji": "👍", + "count": 865 + }, + { + "emoji": "🎉", + "count": 581 + } + ] + }, + { + "id": 53959, + "name": "차은우", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/53959/600/400", + "createdAt": "2023-08-24T05:22:48Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 84022, + "recipientId": 53959, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/199/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 71", + "font": "Nanum Gothic", + "createdAt": "2024-01-27T22:35:29Z" + }, + { + "id": 29280, + "recipientId": 53959, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/415/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 73", + "font": "Nanum Gothic", + "createdAt": "2023-02-08T09:24:01Z" + }, + { + "id": 59151, + "recipientId": 53959, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/10/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 4", + "font": "Nanum Gothic", + "createdAt": "2023-03-11T07:04:18Z" + } + ], + "reactionCount": 24, + "topReactions": [ + { + "emoji": "❤️", + "count": 91 + } + ] + }, + { + "id": 21491, + "name": "박서준", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/21491/600/400", + "createdAt": "2023-01-10T01:44:28Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 84576, + "recipientId": 21491, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/409/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 59", + "font": "Pretendard", + "createdAt": "2023-11-01T08:41:35Z" + }, + { + "id": 18967, + "recipientId": 21491, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/330/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 86", + "font": "Pretendard", + "createdAt": "2024-01-30T16:01:34Z" + }, + { + "id": 89384, + "recipientId": 21491, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/467/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 88", + "font": "Nanum Gothic", + "createdAt": "2023-09-04T20:05:02Z" + } + ], + "reactionCount": 8, + "topReactions": [ + { + "emoji": "❤️", + "count": 902 + }, + { + "emoji": "🎉", + "count": 548 + }, + { + "emoji": "👍", + "count": 583 + } + ] + }, + { + "id": 51432, + "name": "차은우", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/51432/600/400", + "createdAt": "2023-11-07T07:07:37Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 96527, + "recipientId": 51432, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/119/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 28", + "font": "Nanum Gothic", + "createdAt": "2023-12-01T00:14:54Z" + }, + { + "id": 33808, + "recipientId": 51432, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/478/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 8", + "font": "Pretendard", + "createdAt": "2023-04-04T10:06:15Z" + }, + { + "id": 65182, + "recipientId": 51432, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/417/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 65", + "font": "Noto Sans", + "createdAt": "2023-07-31T00:30:43Z" + } + ], + "reactionCount": 12, + "topReactions": [ + { + "emoji": "🥹", + "count": 545 + } + ] + }, + { + "id": 401, + "name": "전지현", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/401/600/400", + "createdAt": "2024-01-28T02:15:08Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 36776, + "recipientId": 401, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/194/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 6", + "font": "Pretendard", + "createdAt": "2023-10-03T09:11:41Z" + }, + { + "id": 62441, + "recipientId": 401, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/276/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 83", + "font": "Nanum Gothic", + "createdAt": "2023-07-27T15:25:12Z" + }, + { + "id": 50507, + "recipientId": 401, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/174/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 71", + "font": "Nanum Gothic", + "createdAt": "2023-08-26T17:23:07Z" + } + ], + "reactionCount": 96, + "topReactions": [ + { + "emoji": "😀", + "count": 316 + } + ] + }, + { + "id": 46242, + "name": "송혜교", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/46242/600/400", + "createdAt": "2023-11-05T16:41:50Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 60128, + "recipientId": 46242, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/149/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 97", + "font": "Roboto", + "createdAt": "2023-09-25T08:24:21Z" + } + ], + "reactionCount": 61, + "topReactions": [ + { + "emoji": "❤️", + "count": 575 + }, + { + "emoji": "🥹", + "count": 192 + } + ] + }, + { + "id": 55794, + "name": "전지현", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/55794/600/400", + "createdAt": "2023-05-13T18:46:52Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 2249, + "recipientId": 55794, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/443/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 70", + "font": "Roboto", + "createdAt": "2023-05-25T22:41:35Z" + }, + { + "id": 71265, + "recipientId": 55794, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/18/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 47", + "font": "Roboto", + "createdAt": "2023-04-15T12:50:11Z" + }, + { + "id": 18226, + "recipientId": 55794, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/173/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 35", + "font": "Pretendard", + "createdAt": "2023-02-21T23:19:58Z" + } + ], + "reactionCount": 77, + "topReactions": [ + { + "emoji": "❤️", + "count": 653 + } + ] + }, + { + "id": 14085, + "name": "박서준", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/14085/600/400", + "createdAt": "2023-09-25T12:01:08Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 25819, + "recipientId": 14085, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/222/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 39", + "font": "Roboto", + "createdAt": "2023-08-12T06:36:32Z" + }, + { + "id": 73459, + "recipientId": 14085, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/160/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 89", + "font": "Roboto", + "createdAt": "2023-08-08T03:12:04Z" + }, + { + "id": 11457, + "recipientId": 14085, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/151/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 23", + "font": "Roboto", + "createdAt": "2023-01-11T18:53:34Z" + } + ], + "reactionCount": 33, + "topReactions": [ + { + "emoji": "🥹", + "count": 740 + } + ] + }, + { + "id": 96101, + "name": "송혜교", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/96101/600/400", + "createdAt": "2023-05-16T19:22:33Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 8754, + "recipientId": 96101, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/31/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 8", + "font": "Nanum Gothic", + "createdAt": "2024-01-30T09:22:34Z" + }, + { + "id": 83212, + "recipientId": 96101, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/276/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 10", + "font": "Pretendard", + "createdAt": "2023-11-29T06:01:50Z" + }, + { + "id": 97718, + "recipientId": 96101, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/76/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 93", + "font": "Pretendard", + "createdAt": "2023-07-19T21:00:40Z" + } + ], + "reactionCount": 86, + "topReactions": [ + { + "emoji": "🥹", + "count": 229 + } + ] + }, + { + "id": 34177, + "name": "송혜교", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/34177/600/400", + "createdAt": "2023-01-14T02:09:25Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 67802, + "recipientId": 34177, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/498/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 23", + "font": "Pretendard", + "createdAt": "2023-05-17T08:09:24Z" + }, + { + "id": 71447, + "recipientId": 34177, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/372/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 52", + "font": "Nanum Gothic", + "createdAt": "2023-06-17T03:43:25Z" + }, + { + "id": 55931, + "recipientId": 34177, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/385/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 89", + "font": "Noto Sans", + "createdAt": "2023-01-13T07:49:49Z" + } + ], + "reactionCount": 43, + "topReactions": [ + { + "emoji": "👍", + "count": 632 + } + ] + }, + { + "id": 36016, + "name": "정우성", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-11-15T11:01:43Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 36042, + "recipientId": 36016, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/140/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 42", + "font": "Noto Sans", + "createdAt": "2023-04-26T16:56:26Z" + }, + { + "id": 98913, + "recipientId": 36016, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/439/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 98", + "font": "Roboto", + "createdAt": "2023-04-04T05:29:41Z" + } + ], + "reactionCount": 51, + "topReactions": [ + { + "emoji": "😀", + "count": 782 + }, + { + "emoji": "🎉", + "count": 968 + } + ] + }, + { + "id": 43594, + "name": "김하은", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-11-09T19:23:06Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 42515, + "recipientId": 43594, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/458/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 27", + "font": "Nanum Gothic", + "createdAt": "2023-08-31T23:26:56Z" + }, + { + "id": 13825, + "recipientId": 43594, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/331/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 29", + "font": "Noto Sans", + "createdAt": "2023-12-05T11:12:30Z" + }, + { + "id": 5602, + "recipientId": 43594, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/430/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 99", + "font": "Pretendard", + "createdAt": "2023-05-05T13:59:19Z" + } + ], + "reactionCount": 13, + "topReactions": [ + { + "emoji": "👍", + "count": 652 + } + ] + }, + { + "id": 73798, + "name": "한지민", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/73798/600/400", + "createdAt": "2023-11-07T13:40:42Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 33420, + "recipientId": 73798, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/297/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 34", + "font": "Roboto", + "createdAt": "2023-04-26T15:23:15Z" + }, + { + "id": 93059, + "recipientId": 73798, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/252/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 99", + "font": "Roboto", + "createdAt": "2023-11-21T09:01:45Z" + }, + { + "id": 56278, + "recipientId": 73798, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/102/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 9", + "font": "Roboto", + "createdAt": "2024-01-17T01:00:57Z" + } + ], + "reactionCount": 71, + "topReactions": [ + { + "emoji": "👍", + "count": 773 + }, + { + "emoji": "❤️", + "count": 613 + }, + { + "emoji": "😁", + "count": 445 + } + ] + }, + { + "id": 36247, + "name": "전지현", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-03-31T09:45:14Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 7590, + "recipientId": 36247, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/419/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 79", + "font": "Roboto", + "createdAt": "2023-12-24T23:43:44Z" + }, + { + "id": 93972, + "recipientId": 36247, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/239/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 75", + "font": "Roboto", + "createdAt": "2024-01-29T06:48:53Z" + }, + { + "id": 50155, + "recipientId": 36247, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/24/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 5", + "font": "Pretendard", + "createdAt": "2023-09-29T15:59:52Z" + } + ], + "reactionCount": 53, + "topReactions": [ + { + "emoji": "😁", + "count": 353 + } + ] + }, + { + "id": 3992, + "name": "전지현", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-01-07T22:06:39Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 92492, + "recipientId": 3992, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/20/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 70", + "font": "Noto Sans", + "createdAt": "2023-05-09T01:45:03Z" + }, + { + "id": 33941, + "recipientId": 3992, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/364/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 93", + "font": "Pretendard", + "createdAt": "2023-02-13T23:03:26Z" + }, + { + "id": 86140, + "recipientId": 3992, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/276/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 22", + "font": "Pretendard", + "createdAt": "2023-05-26T22:01:31Z" + } + ], + "reactionCount": 28, + "topReactions": [ + { + "emoji": "🎉", + "count": 814 + } + ] + }, + { + "id": 55254, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-04-20T01:09:02Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 34003, + "recipientId": 55254, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/482/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 83", + "font": "Nanum Gothic", + "createdAt": "2023-07-15T10:19:57Z" + }, + { + "id": 79633, + "recipientId": 55254, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/187/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 63", + "font": "Roboto", + "createdAt": "2023-11-14T17:55:45Z" + }, + { + "id": 10233, + "recipientId": 55254, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/491/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 26", + "font": "Roboto", + "createdAt": "2023-06-23T02:56:08Z" + } + ], + "reactionCount": 43, + "topReactions": [ + { + "emoji": "🥹", + "count": 963 + } + ] + }, + { + "id": 63758, + "name": "정우성", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-06-21T03:01:01Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 90458, + "recipientId": 63758, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/111/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 49", + "font": "Nanum Gothic", + "createdAt": "2023-05-12T19:29:28Z" + }, + { + "id": 89359, + "recipientId": 63758, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/401/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 53", + "font": "Roboto", + "createdAt": "2023-05-10T19:04:15Z" + }, + { + "id": 57663, + "recipientId": 63758, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/215/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 87", + "font": "Roboto", + "createdAt": "2023-05-27T20:40:23Z" + } + ], + "reactionCount": 56, + "topReactions": [ + { + "emoji": "😁", + "count": 365 + } + ] + }, + { + "id": 63073, + "name": "최민수", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-07-13T16:42:26Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 60054, + "recipientId": 63073, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/46/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 69", + "font": "Noto Sans", + "createdAt": "2023-01-01T10:21:56Z" + } + ], + "reactionCount": 69, + "topReactions": [ + { + "emoji": "🥹", + "count": 764 + } + ] + }, + { + "id": 66658, + "name": "최민수", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/66658/600/400", + "createdAt": "2023-07-23T23:50:37Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 25811, + "recipientId": 66658, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/417/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 98", + "font": "Roboto", + "createdAt": "2023-06-18T13:53:21Z" + }, + { + "id": 7862, + "recipientId": 66658, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/188/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 8", + "font": "Nanum Gothic", + "createdAt": "2023-07-07T23:55:45Z" + }, + { + "id": 16602, + "recipientId": 66658, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/446/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 44", + "font": "Pretendard", + "createdAt": "2023-03-24T18:20:49Z" + } + ], + "reactionCount": 26, + "topReactions": [ + { + "emoji": "👍", + "count": 606 + }, + { + "emoji": "🥹", + "count": 965 + } + ] + }, + { + "id": 63096, + "name": "차은우", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/63096/600/400", + "createdAt": "2023-08-25T09:30:08Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 72995, + "recipientId": 63096, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/368/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 44", + "font": "Pretendard", + "createdAt": "2023-10-07T18:41:59Z" + }, + { + "id": 54115, + "recipientId": 63096, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/335/200/200", + "relationship": "친구", + "content": "박서준님의 메세지 내용 41", + "font": "Roboto", + "createdAt": "2023-11-02T10:19:13Z" + }, + { + "id": 56992, + "recipientId": 63096, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/482/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 30", + "font": "Pretendard", + "createdAt": "2023-12-30T21:02:26Z" + } + ], + "reactionCount": 90, + "topReactions": [ + { + "emoji": "🎉", + "count": 568 + }, + { + "emoji": "👍", + "count": 213 + } + ] + }, + { + "id": 13289, + "name": "박서준", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-12-04T12:58:18Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 44494, + "recipientId": 13289, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/118/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 64", + "font": "Nanum Gothic", + "createdAt": "2024-01-29T16:37:33Z" + }, + { + "id": 13927, + "recipientId": 13289, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/328/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 31", + "font": "Noto Sans", + "createdAt": "2023-02-23T01:04:06Z" + }, + { + "id": 11952, + "recipientId": 13289, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/205/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 11", + "font": "Nanum Gothic", + "createdAt": "2023-05-25T08:12:10Z" + } + ], + "reactionCount": 20, + "topReactions": [ + { + "emoji": "👍", + "count": 94 + } + ] + }, + { + "id": 39580, + "name": "송혜교", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/39580/600/400", + "createdAt": "2023-08-16T00:55:39Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 27255, + "recipientId": 39580, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/195/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 1", + "font": "Roboto", + "createdAt": "2023-01-01T19:38:10Z" + }, + { + "id": 63506, + "recipientId": 39580, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/120/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 13", + "font": "Nanum Gothic", + "createdAt": "2023-09-14T22:10:26Z" + }, + { + "id": 55735, + "recipientId": 39580, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/437/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 54", + "font": "Nanum Gothic", + "createdAt": "2023-09-07T03:32:34Z" + } + ], + "reactionCount": 63, + "topReactions": [ + { + "emoji": "❤️", + "count": 448 + } + ] + }, + { + "id": 57125, + "name": "전지현", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-02-18T07:04:21Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 91193, + "recipientId": 57125, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/448/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 49", + "font": "Pretendard", + "createdAt": "2023-06-20T16:12:07Z" + }, + { + "id": 77931, + "recipientId": 57125, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/486/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 94", + "font": "Nanum Gothic", + "createdAt": "2023-12-29T17:04:41Z" + }, + { + "id": 41786, + "recipientId": 57125, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/39/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 84", + "font": "Pretendard", + "createdAt": "2023-07-15T19:00:07Z" + } + ], + "reactionCount": 98, + "topReactions": [ + { + "emoji": "😀", + "count": 985 + }, + { + "emoji": "🥹", + "count": 609 + } + ] + }, + { + "id": 94817, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/94817/600/400", + "createdAt": "2023-05-07T10:26:03Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 84068, + "recipientId": 94817, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/186/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 35", + "font": "Nanum Gothic", + "createdAt": "2023-10-16T23:50:30Z" + }, + { + "id": 16638, + "recipientId": 94817, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/11/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 51", + "font": "Roboto", + "createdAt": "2023-12-31T02:34:22Z" + }, + { + "id": 19857, + "recipientId": 94817, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/364/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 87", + "font": "Pretendard", + "createdAt": "2023-04-01T17:28:06Z" + } + ], + "reactionCount": 69, + "topReactions": [ + { + "emoji": "😀", + "count": 737 + }, + { + "emoji": "😁", + "count": 298 + } + ] + }, + { + "id": 8900, + "name": "박서준", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/8900/600/400", + "createdAt": "2023-08-06T08:59:01Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 54900, + "recipientId": 8900, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/448/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 91", + "font": "Pretendard", + "createdAt": "2023-10-16T00:46:38Z" + } + ], + "reactionCount": 52, + "topReactions": [ + { + "emoji": "🎉", + "count": 679 + }, + { + "emoji": "👍", + "count": 166 + } + ] + }, + { + "id": 3922, + "name": "박서준", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/3922/600/400", + "createdAt": "2023-10-23T08:41:22Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 99355, + "recipientId": 3922, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/125/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 62", + "font": "Pretendard", + "createdAt": "2023-09-14T05:24:27Z" + }, + { + "id": 34171, + "recipientId": 3922, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/154/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 28", + "font": "Pretendard", + "createdAt": "2023-08-04T22:53:11Z" + } + ], + "reactionCount": 55, + "topReactions": [ + { + "emoji": "❤️", + "count": 828 + }, + { + "emoji": "😁", + "count": 960 + } + ] + }, + { + "id": 66190, + "name": "전지현", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-07-08T04:47:00Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 17000, + "recipientId": 66190, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/498/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 26", + "font": "Nanum Gothic", + "createdAt": "2023-07-12T15:08:11Z" + }, + { + "id": 65326, + "recipientId": 66190, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/286/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 43", + "font": "Noto Sans", + "createdAt": "2023-04-14T16:41:19Z" + }, + { + "id": 33150, + "recipientId": 66190, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/26/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 47", + "font": "Roboto", + "createdAt": "2024-01-22T00:03:15Z" + } + ], + "reactionCount": 29, + "topReactions": [ + { + "emoji": "😀", + "count": 142 + }, + { + "emoji": "🥹", + "count": 226 + } + ] + }, + { + "id": 68635, + "name": "차은우", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-10-22T10:14:45Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 97206, + "recipientId": 68635, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/26/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 2", + "font": "Roboto", + "createdAt": "2023-08-28T16:03:45Z" + }, + { + "id": 37796, + "recipientId": 68635, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/203/200/200", + "relationship": "친구", + "content": "박서준님의 메세지 내용 68", + "font": "Pretendard", + "createdAt": "2023-01-17T12:45:37Z" + }, + { + "id": 40502, + "recipientId": 68635, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/40/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 71", + "font": "Roboto", + "createdAt": "2023-05-14T12:47:53Z" + } + ], + "reactionCount": 18, + "topReactions": [ + { + "emoji": "🥹", + "count": 536 + } + ] + }, + { + "id": 52236, + "name": "현빈", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2024-01-07T08:24:21Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 8378, + "recipientId": 52236, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/383/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 53", + "font": "Pretendard", + "createdAt": "2023-12-03T19:03:51Z" + } + ], + "reactionCount": 48, + "topReactions": [ + { + "emoji": "😀", + "count": 914 + } + ] + }, + { + "id": 81115, + "name": "전지현", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/81115/600/400", + "createdAt": "2023-06-05T18:41:55Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 97959, + "recipientId": 81115, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/187/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 26", + "font": "Roboto", + "createdAt": "2023-05-31T04:49:25Z" + }, + { + "id": 14027, + "recipientId": 81115, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/400/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 48", + "font": "Noto Sans", + "createdAt": "2023-09-18T14:09:01Z" + }, + { + "id": 44822, + "recipientId": 81115, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/72/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 69", + "font": "Roboto", + "createdAt": "2023-01-23T11:25:20Z" + } + ], + "reactionCount": 93, + "topReactions": [ + { + "emoji": "🎉", + "count": 633 + } + ] + }, + { + "id": 10154, + "name": "전지현", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/10154/600/400", + "createdAt": "2023-06-12T22:34:51Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 60424, + "recipientId": 10154, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/403/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 75", + "font": "Nanum Gothic", + "createdAt": "2023-12-05T21:36:47Z" + }, + { + "id": 95935, + "recipientId": 10154, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/400/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 12", + "font": "Pretendard", + "createdAt": "2023-04-29T17:49:22Z" + }, + { + "id": 21882, + "recipientId": 10154, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/384/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 22", + "font": "Noto Sans", + "createdAt": "2023-07-08T02:01:05Z" + } + ], + "reactionCount": 93, + "topReactions": [ + { + "emoji": "😀", + "count": 623 + } + ] + }, + { + "id": 13587, + "name": "송혜교", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/13587/600/400", + "createdAt": "2023-12-29T20:05:55Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 27566, + "recipientId": 13587, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/368/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 6", + "font": "Nanum Gothic", + "createdAt": "2023-10-20T11:16:20Z" + }, + { + "id": 2019, + "recipientId": 13587, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/478/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 26", + "font": "Noto Sans", + "createdAt": "2023-08-01T07:45:11Z" + }, + { + "id": 54173, + "recipientId": 13587, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/284/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 41", + "font": "Nanum Gothic", + "createdAt": "2023-02-02T17:16:38Z" + } + ], + "reactionCount": 10, + "topReactions": [ + { + "emoji": "😁", + "count": 349 + } + ] + }, + { + "id": 1309, + "name": "김하은", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/1309/600/400", + "createdAt": "2023-08-30T03:31:58Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 76069, + "recipientId": 1309, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/59/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 64", + "font": "Pretendard", + "createdAt": "2023-08-15T14:13:51Z" + }, + { + "id": 57299, + "recipientId": 1309, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/23/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 2", + "font": "Roboto", + "createdAt": "2023-09-25T10:40:09Z" + }, + { + "id": 83909, + "recipientId": 1309, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/355/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 53", + "font": "Roboto", + "createdAt": "2023-05-08T18:45:38Z" + } + ], + "reactionCount": 30, + "topReactions": [ + { + "emoji": "❤️", + "count": 425 + }, + { + "emoji": "🥹", + "count": 131 + }, + { + "emoji": "😁", + "count": 242 + } + ] + }, + { + "id": 60, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/60/600/400", + "createdAt": "2023-07-09T12:28:11Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 74309, + "recipientId": 60, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/65/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 96", + "font": "Noto Sans", + "createdAt": "2023-08-25T21:47:15Z" + }, + { + "id": 94122, + "recipientId": 60, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/141/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 57", + "font": "Roboto", + "createdAt": "2023-09-05T23:47:09Z" + }, + { + "id": 16314, + "recipientId": 60, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/345/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 52", + "font": "Roboto", + "createdAt": "2023-03-07T04:55:33Z" + } + ], + "reactionCount": 50, + "topReactions": [ + { + "emoji": "🎉", + "count": 814 + }, + { + "emoji": "😀", + "count": 481 + } + ] + }, + { + "id": 66554, + "name": "현빈", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/66554/600/400", + "createdAt": "2023-02-08T20:35:33Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 66047, + "recipientId": 66554, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/500/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 92", + "font": "Pretendard", + "createdAt": "2023-04-08T22:14:02Z" + }, + { + "id": 81467, + "recipientId": 66554, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/487/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 17", + "font": "Nanum Gothic", + "createdAt": "2023-03-16T05:19:39Z" + }, + { + "id": 63910, + "recipientId": 66554, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/348/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 66", + "font": "Nanum Gothic", + "createdAt": "2023-08-22T16:52:48Z" + } + ], + "reactionCount": 78, + "topReactions": [ + { + "emoji": "😁", + "count": 632 + }, + { + "emoji": "🥹", + "count": 377 + }, + { + "emoji": "😀", + "count": 581 + } + ] + }, + { + "id": 50312, + "name": "현빈", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-02-27T12:29:12Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 33254, + "recipientId": 50312, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/460/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 22", + "font": "Nanum Gothic", + "createdAt": "2023-04-14T03:51:21Z" + }, + { + "id": 19330, + "recipientId": 50312, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/51/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 14", + "font": "Pretendard", + "createdAt": "2023-03-07T02:10:58Z" + }, + { + "id": 15393, + "recipientId": 50312, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/59/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 12", + "font": "Nanum Gothic", + "createdAt": "2023-01-11T22:57:14Z" + } + ], + "reactionCount": 97, + "topReactions": [ + { + "emoji": "🥹", + "count": 281 + }, + { + "emoji": "❤️", + "count": 265 + } + ] + }, + { + "id": 33720, + "name": "송혜교", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-07-18T19:49:30Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 81755, + "recipientId": 33720, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/338/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 25", + "font": "Nanum Gothic", + "createdAt": "2024-01-25T12:37:51Z" + } + ], + "reactionCount": 41, + "topReactions": [ + { + "emoji": "🥹", + "count": 974 + } + ] + }, + { + "id": 89805, + "name": "전지현", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/89805/600/400", + "createdAt": "2023-08-19T06:07:50Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 7586, + "recipientId": 89805, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/442/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 63", + "font": "Pretendard", + "createdAt": "2023-01-04T13:08:22Z" + }, + { + "id": 86570, + "recipientId": 89805, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/258/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 10", + "font": "Roboto", + "createdAt": "2023-08-21T15:47:23Z" + } + ], + "reactionCount": 35, + "topReactions": [ + { + "emoji": "❤️", + "count": 900 + } + ] + }, + { + "id": 31459, + "name": "최민수", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/31459/600/400", + "createdAt": "2023-06-23T11:39:38Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 98356, + "recipientId": 31459, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/139/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 14", + "font": "Nanum Gothic", + "createdAt": "2023-03-11T09:10:45Z" + }, + { + "id": 37388, + "recipientId": 31459, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/355/200/200", + "relationship": "친구", + "content": "박서준님의 메세지 내용 57", + "font": "Nanum Gothic", + "createdAt": "2023-02-22T09:31:25Z" + }, + { + "id": 19962, + "recipientId": 31459, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/80/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 11", + "font": "Nanum Gothic", + "createdAt": "2023-11-26T04:31:20Z" + } + ], + "reactionCount": 21, + "topReactions": [ + { + "emoji": "😀", + "count": 783 + } + ] + }, + { + "id": 98283, + "name": "최민수", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/98283/600/400", + "createdAt": "2023-07-15T05:18:24Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 30487, + "recipientId": 98283, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/228/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 61", + "font": "Nanum Gothic", + "createdAt": "2023-12-02T07:23:57Z" + }, + { + "id": 46260, + "recipientId": 98283, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/362/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 2", + "font": "Roboto", + "createdAt": "2024-01-05T15:10:35Z" + }, + { + "id": 21359, + "recipientId": 98283, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/309/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 25", + "font": "Roboto", + "createdAt": "2023-12-23T15:06:51Z" + } + ], + "reactionCount": 5, + "topReactions": [ + { + "emoji": "🎉", + "count": 275 + }, + { + "emoji": "👍", + "count": 76 + } + ] + }, + { + "id": 37766, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-02-25T16:44:40Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 12013, + "recipientId": 37766, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/343/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 33", + "font": "Nanum Gothic", + "createdAt": "2024-01-27T17:03:16Z" + }, + { + "id": 63267, + "recipientId": 37766, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/318/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 37", + "font": "Nanum Gothic", + "createdAt": "2023-10-30T06:35:37Z" + }, + { + "id": 32221, + "recipientId": 37766, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/254/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 51", + "font": "Nanum Gothic", + "createdAt": "2023-05-22T08:02:04Z" + } + ], + "reactionCount": 6, + "topReactions": [ + { + "emoji": "😀", + "count": 604 + } + ] + }, + { + "id": 55770, + "name": "김하은", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/55770/600/400", + "createdAt": "2023-08-08T18:49:27Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 98997, + "recipientId": 55770, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/310/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 76", + "font": "Pretendard", + "createdAt": "2023-12-28T10:22:01Z" + }, + { + "id": 52895, + "recipientId": 55770, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/192/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 58", + "font": "Pretendard", + "createdAt": "2024-01-11T11:32:14Z" + }, + { + "id": 45725, + "recipientId": 55770, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/188/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 29", + "font": "Roboto", + "createdAt": "2023-07-13T20:07:35Z" + } + ], + "reactionCount": 90, + "topReactions": [ + { + "emoji": "🎉", + "count": 657 + }, + { + "emoji": "🥹", + "count": 298 + } + ] + }, + { + "id": 41885, + "name": "송혜교", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-09-29T17:30:26Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 3980, + "recipientId": 41885, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/124/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 53", + "font": "Nanum Gothic", + "createdAt": "2023-02-11T20:10:45Z" + }, + { + "id": 24156, + "recipientId": 41885, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/360/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 14", + "font": "Noto Sans", + "createdAt": "2023-07-13T21:35:18Z" + }, + { + "id": 88059, + "recipientId": 41885, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/182/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 33", + "font": "Pretendard", + "createdAt": "2023-08-04T15:40:39Z" + } + ], + "reactionCount": 9, + "topReactions": [ + { + "emoji": "😀", + "count": 646 + }, + { + "emoji": "😁", + "count": 786 + }, + { + "emoji": "🥹", + "count": 677 + } + ] + }, + { + "id": 11840, + "name": "송혜교", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/11840/600/400", + "createdAt": "2024-01-31T05:35:10Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 15003, + "recipientId": 11840, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/98/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 76", + "font": "Noto Sans", + "createdAt": "2023-07-19T06:37:06Z" + }, + { + "id": 11159, + "recipientId": 11840, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/7/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 99", + "font": "Noto Sans", + "createdAt": "2023-02-04T05:57:58Z" + }, + { + "id": 11261, + "recipientId": 11840, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/444/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 43", + "font": "Nanum Gothic", + "createdAt": "2023-03-31T14:51:43Z" + } + ], + "reactionCount": 21, + "topReactions": [ + { + "emoji": "🥹", + "count": 11 + }, + { + "emoji": "🎉", + "count": 646 + } + ] + }, + { + "id": 84895, + "name": "한지민", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/84895/600/400", + "createdAt": "2023-04-23T06:14:19Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 94574, + "recipientId": 84895, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/3/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 13", + "font": "Noto Sans", + "createdAt": "2023-01-18T07:30:08Z" + } + ], + "reactionCount": 37, + "topReactions": [ + { + "emoji": "❤️", + "count": 725 + } + ] + }, + { + "id": 74955, + "name": "현빈", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/74955/600/400", + "createdAt": "2023-03-01T11:31:01Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 27531, + "recipientId": 74955, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/466/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 17", + "font": "Noto Sans", + "createdAt": "2023-09-22T15:59:45Z" + } + ], + "reactionCount": 33, + "topReactions": [ + { + "emoji": "😁", + "count": 236 + }, + { + "emoji": "🎉", + "count": 36 + } + ] + }, + { + "id": 91125, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/91125/600/400", + "createdAt": "2023-01-25T16:51:01Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 81022, + "recipientId": 91125, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/157/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 90", + "font": "Noto Sans", + "createdAt": "2023-09-19T23:00:03Z" + }, + { + "id": 51294, + "recipientId": 91125, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/284/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 26", + "font": "Noto Sans", + "createdAt": "2024-01-29T11:52:15Z" + } + ], + "reactionCount": 28, + "topReactions": [ + { + "emoji": "😀", + "count": 842 + }, + { + "emoji": "🎉", + "count": 398 + }, + { + "emoji": "👍", + "count": 585 + } + ] + }, + { + "id": 57687, + "name": "한지민", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/57687/600/400", + "createdAt": "2023-11-07T02:40:34Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 12712, + "recipientId": 57687, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/148/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 27", + "font": "Roboto", + "createdAt": "2023-11-26T12:14:09Z" + }, + { + "id": 28850, + "recipientId": 57687, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/109/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 79", + "font": "Roboto", + "createdAt": "2023-11-16T14:25:15Z" + }, + { + "id": 91115, + "recipientId": 57687, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/335/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 88", + "font": "Nanum Gothic", + "createdAt": "2023-12-06T16:17:35Z" + } + ], + "reactionCount": 100, + "topReactions": [ + { + "emoji": "❤️", + "count": 622 + } + ] + }, + { + "id": 52082, + "name": "박서준", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-12-05T11:50:03Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 34872, + "recipientId": 52082, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/314/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 79", + "font": "Pretendard", + "createdAt": "2023-06-29T10:39:24Z" + }, + { + "id": 11518, + "recipientId": 52082, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/337/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 82", + "font": "Pretendard", + "createdAt": "2023-01-14T11:17:39Z" + }, + { + "id": 34015, + "recipientId": 52082, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/162/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 42", + "font": "Roboto", + "createdAt": "2023-09-22T11:36:35Z" + } + ], + "reactionCount": 72, + "topReactions": [ + { + "emoji": "😀", + "count": 809 + } + ] + }, + { + "id": 39017, + "name": "정우성", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/39017/600/400", + "createdAt": "2024-01-28T05:11:05Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 45901, + "recipientId": 39017, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/221/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 37", + "font": "Roboto", + "createdAt": "2023-04-24T18:45:37Z" + }, + { + "id": 86974, + "recipientId": 39017, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/96/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 97", + "font": "Nanum Gothic", + "createdAt": "2024-01-06T07:57:03Z" + } + ], + "reactionCount": 100, + "topReactions": [ + { + "emoji": "😀", + "count": 98 + } + ] + }, + { + "id": 46642, + "name": "전지현", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2024-01-27T23:23:34Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 86564, + "recipientId": 46642, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/36/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 78", + "font": "Noto Sans", + "createdAt": "2023-09-23T23:48:17Z" + }, + { + "id": 46880, + "recipientId": 46642, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/453/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 92", + "font": "Noto Sans", + "createdAt": "2023-06-07T09:44:08Z" + }, + { + "id": 79147, + "recipientId": 46642, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/425/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 45", + "font": "Noto Sans", + "createdAt": "2023-07-14T00:41:05Z" + } + ], + "reactionCount": 24, + "topReactions": [ + { + "emoji": "❤️", + "count": 839 + }, + { + "emoji": "😁", + "count": 258 + } + ] + }, + { + "id": 27652, + "name": "송혜교", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-01-26T14:15:49Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 36699, + "recipientId": 27652, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/323/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 56", + "font": "Noto Sans", + "createdAt": "2023-08-24T00:21:48Z" + }, + { + "id": 75023, + "recipientId": 27652, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/442/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 56", + "font": "Roboto", + "createdAt": "2023-02-11T12:51:39Z" + }, + { + "id": 31848, + "recipientId": 27652, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/273/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 84", + "font": "Nanum Gothic", + "createdAt": "2023-12-04T00:48:02Z" + } + ], + "reactionCount": 93, + "topReactions": [ + { + "emoji": "😁", + "count": 90 + } + ] + }, + { + "id": 93469, + "name": "차은우", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/93469/600/400", + "createdAt": "2023-08-05T08:37:01Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 13315, + "recipientId": 93469, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/407/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 15", + "font": "Noto Sans", + "createdAt": "2023-07-27T04:45:59Z" + }, + { + "id": 29127, + "recipientId": 93469, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/206/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 61", + "font": "Pretendard", + "createdAt": "2023-12-08T16:05:47Z" + }, + { + "id": 40814, + "recipientId": 93469, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/176/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 72", + "font": "Noto Sans", + "createdAt": "2023-04-25T05:08:02Z" + } + ], + "reactionCount": 84, + "topReactions": [ + { + "emoji": "😀", + "count": 442 + }, + { + "emoji": "🎉", + "count": 682 + }, + { + "emoji": "👍", + "count": 278 + } + ] + }, + { + "id": 45950, + "name": "차은우", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/45950/600/400", + "createdAt": "2023-04-24T21:39:46Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 25018, + "recipientId": 45950, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/422/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 66", + "font": "Noto Sans", + "createdAt": "2024-02-01T13:50:42Z" + }, + { + "id": 24874, + "recipientId": 45950, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/55/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 32", + "font": "Pretendard", + "createdAt": "2023-09-13T01:51:09Z" + }, + { + "id": 27922, + "recipientId": 45950, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/167/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 76", + "font": "Nanum Gothic", + "createdAt": "2023-01-10T17:10:48Z" + } + ], + "reactionCount": 45, + "topReactions": [ + { + "emoji": "🎉", + "count": 775 + } + ] + }, + { + "id": 92578, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-06-01T11:14:03Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 41959, + "recipientId": 92578, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/160/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 4", + "font": "Nanum Gothic", + "createdAt": "2023-08-16T02:51:30Z" + }, + { + "id": 1530, + "recipientId": 92578, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/438/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 59", + "font": "Roboto", + "createdAt": "2023-03-12T23:02:00Z" + }, + { + "id": 65787, + "recipientId": 92578, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/184/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 88", + "font": "Nanum Gothic", + "createdAt": "2023-05-13T21:14:10Z" + } + ], + "reactionCount": 84, + "topReactions": [ + { + "emoji": "😀", + "count": 792 + } + ] + }, + { + "id": 987, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/987/600/400", + "createdAt": "2023-08-21T17:47:59Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 67695, + "recipientId": 987, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/108/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 28", + "font": "Noto Sans", + "createdAt": "2023-06-19T07:08:12Z" + }, + { + "id": 78843, + "recipientId": 987, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/129/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 19", + "font": "Nanum Gothic", + "createdAt": "2023-09-22T16:14:47Z" + }, + { + "id": 1843, + "recipientId": 987, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/495/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 70", + "font": "Roboto", + "createdAt": "2023-07-04T06:42:44Z" + } + ], + "reactionCount": 72, + "topReactions": [ + { + "emoji": "👍", + "count": 829 + }, + { + "emoji": "🎉", + "count": 814 + }, + { + "emoji": "😁", + "count": 369 + } + ] + }, + { + "id": 99277, + "name": "한지민", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-03-08T21:42:42Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 18287, + "recipientId": 99277, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/355/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 63", + "font": "Nanum Gothic", + "createdAt": "2023-02-21T08:53:40Z" + }, + { + "id": 40708, + "recipientId": 99277, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/255/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 48", + "font": "Noto Sans", + "createdAt": "2023-01-25T02:33:40Z" + }, + { + "id": 96884, + "recipientId": 99277, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/362/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 31", + "font": "Nanum Gothic", + "createdAt": "2024-02-01T10:45:29Z" + } + ], + "reactionCount": 70, + "topReactions": [ + { + "emoji": "🥹", + "count": 765 + }, + { + "emoji": "👍", + "count": 288 + }, + { + "emoji": "😁", + "count": 492 + } + ] + }, + { + "id": 47918, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2024-01-06T11:36:10Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 39350, + "recipientId": 47918, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/404/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 80", + "font": "Pretendard", + "createdAt": "2023-07-04T05:30:48Z" + }, + { + "id": 90854, + "recipientId": 47918, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/278/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 4", + "font": "Pretendard", + "createdAt": "2024-01-27T06:10:05Z" + }, + { + "id": 98946, + "recipientId": 47918, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/199/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 47", + "font": "Nanum Gothic", + "createdAt": "2023-08-20T22:18:43Z" + } + ], + "reactionCount": 34, + "topReactions": [ + { + "emoji": "❤️", + "count": 561 + } + ] + }, + { + "id": 60144, + "name": "송혜교", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-03-27T21:09:40Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 48501, + "recipientId": 60144, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/499/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 90", + "font": "Roboto", + "createdAt": "2023-08-30T23:42:40Z" + }, + { + "id": 32650, + "recipientId": 60144, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/196/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 16", + "font": "Roboto", + "createdAt": "2023-03-07T02:31:44Z" + }, + { + "id": 90329, + "recipientId": 60144, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/500/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 70", + "font": "Nanum Gothic", + "createdAt": "2023-11-02T05:53:11Z" + } + ], + "reactionCount": 4, + "topReactions": [ + { + "emoji": "🎉", + "count": 678 + }, + { + "emoji": "❤️", + "count": 792 + } + ] + }, + { + "id": 53261, + "name": "송혜교", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/53261/600/400", + "createdAt": "2023-03-11T22:52:07Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 16001, + "recipientId": 53261, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/161/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 31", + "font": "Pretendard", + "createdAt": "2023-03-14T11:20:15Z" + }, + { + "id": 67474, + "recipientId": 53261, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/221/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 58", + "font": "Roboto", + "createdAt": "2023-09-04T17:56:53Z" + }, + { + "id": 88691, + "recipientId": 53261, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/197/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 49", + "font": "Pretendard", + "createdAt": "2023-07-18T12:09:53Z" + } + ], + "reactionCount": 41, + "topReactions": [ + { + "emoji": "👍", + "count": 843 + }, + { + "emoji": "😀", + "count": 155 + }, + { + "emoji": "🎉", + "count": 16 + } + ] + }, + { + "id": 74042, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/74042/600/400", + "createdAt": "2023-05-01T20:10:57Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 94808, + "recipientId": 74042, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/421/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 85", + "font": "Pretendard", + "createdAt": "2024-02-01T06:54:16Z" + }, + { + "id": 31960, + "recipientId": 74042, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/40/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 33", + "font": "Nanum Gothic", + "createdAt": "2023-02-21T23:07:24Z" + }, + { + "id": 19007, + "recipientId": 74042, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/445/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 44", + "font": "Nanum Gothic", + "createdAt": "2024-01-30T06:37:25Z" + } + ], + "reactionCount": 70, + "topReactions": [ + { + "emoji": "👍", + "count": 89 + } + ] + }, + { + "id": 30047, + "name": "한지민", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/30047/600/400", + "createdAt": "2023-03-31T10:47:33Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 46241, + "recipientId": 30047, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/397/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 64", + "font": "Roboto", + "createdAt": "2023-04-12T04:50:45Z" + }, + { + "id": 55605, + "recipientId": 30047, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/324/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 74", + "font": "Pretendard", + "createdAt": "2023-06-30T12:07:28Z" + }, + { + "id": 20989, + "recipientId": 30047, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/66/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 53", + "font": "Nanum Gothic", + "createdAt": "2023-05-09T11:38:40Z" + } + ], + "reactionCount": 55, + "topReactions": [ + { + "emoji": "👍", + "count": 865 + }, + { + "emoji": "🎉", + "count": 993 + }, + { + "emoji": "😀", + "count": 755 + } + ] + }, + { + "id": 96238, + "name": "송혜교", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-11-25T14:18:28Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 67172, + "recipientId": 96238, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/384/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 98", + "font": "Nanum Gothic", + "createdAt": "2023-12-23T18:55:16Z" + }, + { + "id": 14364, + "recipientId": 96238, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/113/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 47", + "font": "Noto Sans", + "createdAt": "2023-01-18T00:09:07Z" + }, + { + "id": 73112, + "recipientId": 96238, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/283/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 10", + "font": "Pretendard", + "createdAt": "2023-05-27T11:38:52Z" + } + ], + "reactionCount": 96, + "topReactions": [ + { + "emoji": "❤️", + "count": 196 + } + ] + }, + { + "id": 69917, + "name": "현빈", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-09-07T23:34:46Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 9243, + "recipientId": 69917, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/239/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 60", + "font": "Pretendard", + "createdAt": "2023-12-28T01:45:57Z" + }, + { + "id": 98887, + "recipientId": 69917, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/215/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 91", + "font": "Pretendard", + "createdAt": "2023-11-11T18:02:57Z" + }, + { + "id": 75801, + "recipientId": 69917, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/395/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 48", + "font": "Pretendard", + "createdAt": "2023-08-09T15:37:56Z" + } + ], + "reactionCount": 43, + "topReactions": [ + { + "emoji": "🥹", + "count": 112 + }, + { + "emoji": "🎉", + "count": 135 + } + ] + }, + { + "id": 5650, + "name": "정우성", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/5650/600/400", + "createdAt": "2023-01-04T06:22:01Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 83293, + "recipientId": 5650, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/74/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 2", + "font": "Pretendard", + "createdAt": "2023-05-23T03:26:03Z" + } + ], + "reactionCount": 71, + "topReactions": [ + { + "emoji": "😁", + "count": 72 + } + ] + }, + { + "id": 97770, + "name": "정우성", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-07-20T04:19:16Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 24717, + "recipientId": 97770, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/23/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 18", + "font": "Pretendard", + "createdAt": "2023-11-06T09:19:20Z" + }, + { + "id": 24145, + "recipientId": 97770, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/495/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 21", + "font": "Noto Sans", + "createdAt": "2023-10-18T14:16:27Z" + }, + { + "id": 223, + "recipientId": 97770, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/135/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 50", + "font": "Nanum Gothic", + "createdAt": "2024-01-26T11:24:46Z" + } + ], + "reactionCount": 32, + "topReactions": [ + { + "emoji": "🥹", + "count": 111 + }, + { + "emoji": "🎉", + "count": 859 + }, + { + "emoji": "😁", + "count": 919 + } + ] + }, + { + "id": 4150, + "name": "전지현", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-02-04T22:57:07Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 72918, + "recipientId": 4150, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/397/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 33", + "font": "Noto Sans", + "createdAt": "2023-08-24T09:46:19Z" + }, + { + "id": 84168, + "recipientId": 4150, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/409/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 67", + "font": "Noto Sans", + "createdAt": "2023-05-15T01:03:21Z" + }, + { + "id": 71121, + "recipientId": 4150, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/333/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 81", + "font": "Noto Sans", + "createdAt": "2023-10-09T10:58:43Z" + } + ], + "reactionCount": 31, + "topReactions": [ + { + "emoji": "🥹", + "count": 814 + }, + { + "emoji": "😀", + "count": 701 + } + ] + }, + { + "id": 44091, + "name": "차은우", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/44091/600/400", + "createdAt": "2023-06-17T19:51:45Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 90872, + "recipientId": 44091, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/432/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 71", + "font": "Noto Sans", + "createdAt": "2023-10-15T12:57:15Z" + }, + { + "id": 73008, + "recipientId": 44091, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/85/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 90", + "font": "Pretendard", + "createdAt": "2023-04-07T01:47:17Z" + }, + { + "id": 36229, + "recipientId": 44091, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/170/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 14", + "font": "Roboto", + "createdAt": "2023-04-30T21:52:02Z" + } + ], + "reactionCount": 73, + "topReactions": [ + { + "emoji": "😁", + "count": 832 + } + ] + }, + { + "id": 54206, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/54206/600/400", + "createdAt": "2023-08-11T12:31:06Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 9945, + "recipientId": 54206, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/203/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 34", + "font": "Noto Sans", + "createdAt": "2023-02-22T00:16:51Z" + }, + { + "id": 35953, + "recipientId": 54206, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/13/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 42", + "font": "Pretendard", + "createdAt": "2023-03-14T13:18:54Z" + }, + { + "id": 28726, + "recipientId": 54206, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/95/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 42", + "font": "Pretendard", + "createdAt": "2023-03-03T06:17:34Z" + } + ], + "reactionCount": 70, + "topReactions": [ + { + "emoji": "🥹", + "count": 962 + } + ] + }, + { + "id": 68370, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-11-10T06:53:35Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 7950, + "recipientId": 68370, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/468/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 76", + "font": "Noto Sans", + "createdAt": "2023-05-28T16:55:31Z" + }, + { + "id": 41779, + "recipientId": 68370, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/495/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 66", + "font": "Roboto", + "createdAt": "2024-01-11T01:55:42Z" + }, + { + "id": 18889, + "recipientId": 68370, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/208/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 9", + "font": "Pretendard", + "createdAt": "2023-06-23T17:19:26Z" + } + ], + "reactionCount": 9, + "topReactions": [ + { + "emoji": "😁", + "count": 212 + } + ] + }, + { + "id": 76323, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-06-11T11:07:28Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 76226, + "recipientId": 76323, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/180/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 11", + "font": "Roboto", + "createdAt": "2023-11-14T15:14:43Z" + }, + { + "id": 18283, + "recipientId": 76323, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/269/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 42", + "font": "Noto Sans", + "createdAt": "2023-11-18T21:30:13Z" + }, + { + "id": 69571, + "recipientId": 76323, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/382/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 73", + "font": "Roboto", + "createdAt": "2023-08-26T00:28:35Z" + } + ], + "reactionCount": 43, + "topReactions": [ + { + "emoji": "🥹", + "count": 948 + } + ] + }, + { + "id": 84073, + "name": "박서준", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-06-30T13:11:38Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 19945, + "recipientId": 84073, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/32/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 56", + "font": "Roboto", + "createdAt": "2023-10-19T03:38:48Z" + } + ], + "reactionCount": 36, + "topReactions": [ + { + "emoji": "❤️", + "count": 705 + }, + { + "emoji": "🥹", + "count": 173 + }, + { + "emoji": "👍", + "count": 137 + } + ] + }, + { + "id": 14176, + "name": "송혜교", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/14176/600/400", + "createdAt": "2023-07-14T11:33:05Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 80228, + "recipientId": 14176, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/221/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 44", + "font": "Nanum Gothic", + "createdAt": "2023-11-19T19:29:11Z" + }, + { + "id": 37, + "recipientId": 14176, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/289/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 69", + "font": "Pretendard", + "createdAt": "2023-05-30T17:54:20Z" + }, + { + "id": 63293, + "recipientId": 14176, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/438/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 27", + "font": "Pretendard", + "createdAt": "2024-01-28T13:46:13Z" + } + ], + "reactionCount": 31, + "topReactions": [ + { + "emoji": "🥹", + "count": 10 + }, + { + "emoji": "😁", + "count": 714 + } + ] + }, + { + "id": 63278, + "name": "전지현", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/63278/600/400", + "createdAt": "2023-09-08T13:46:48Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 5278, + "recipientId": 63278, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/59/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 53", + "font": "Noto Sans", + "createdAt": "2023-06-01T20:26:14Z" + }, + { + "id": 26283, + "recipientId": 63278, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/460/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 41", + "font": "Pretendard", + "createdAt": "2023-09-26T17:49:04Z" + }, + { + "id": 74629, + "recipientId": 63278, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/241/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 13", + "font": "Roboto", + "createdAt": "2023-10-28T13:39:12Z" + } + ], + "reactionCount": 48, + "topReactions": [ + { + "emoji": "😁", + "count": 901 + } + ] + }, + { + "id": 35291, + "name": "이영준", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2024-01-23T21:03:45Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 54804, + "recipientId": 35291, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/373/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 8", + "font": "Noto Sans", + "createdAt": "2023-04-14T15:39:03Z" + }, + { + "id": 20544, + "recipientId": 35291, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/296/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 9", + "font": "Noto Sans", + "createdAt": "2023-11-15T13:00:19Z" + }, + { + "id": 30666, + "recipientId": 35291, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/399/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 88", + "font": "Noto Sans", + "createdAt": "2023-12-23T00:45:32Z" + } + ], + "reactionCount": 100, + "topReactions": [ + { + "emoji": "❤️", + "count": 726 + } + ] + }, + { + "id": 3038, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/3038/600/400", + "createdAt": "2023-06-27T03:39:55Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 95652, + "recipientId": 3038, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/450/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 45", + "font": "Roboto", + "createdAt": "2023-02-19T01:18:56Z" + }, + { + "id": 52296, + "recipientId": 3038, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/131/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 41", + "font": "Noto Sans", + "createdAt": "2023-07-15T18:02:58Z" + }, + { + "id": 55396, + "recipientId": 3038, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/146/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 58", + "font": "Nanum Gothic", + "createdAt": "2023-03-26T23:08:07Z" + } + ], + "reactionCount": 54, + "topReactions": [ + { + "emoji": "😁", + "count": 818 + }, + { + "emoji": "🎉", + "count": 315 + } + ] + }, + { + "id": 62965, + "name": "한지민", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-01-16T23:39:19Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 10114, + "recipientId": 62965, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/281/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 40", + "font": "Nanum Gothic", + "createdAt": "2023-09-27T11:32:49Z" + }, + { + "id": 58525, + "recipientId": 62965, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/103/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 1", + "font": "Noto Sans", + "createdAt": "2023-04-24T14:22:46Z" + }, + { + "id": 20887, + "recipientId": 62965, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/318/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 36", + "font": "Pretendard", + "createdAt": "2023-05-07T12:50:11Z" + } + ], + "reactionCount": 74, + "topReactions": [ + { + "emoji": "😁", + "count": 95 + } + ] + }, + { + "id": 61614, + "name": "송혜교", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2024-01-27T06:28:36Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 86114, + "recipientId": 61614, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/1/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 48", + "font": "Noto Sans", + "createdAt": "2023-11-16T04:24:55Z" + }, + { + "id": 12648, + "recipientId": 61614, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/291/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 14", + "font": "Nanum Gothic", + "createdAt": "2023-05-26T04:21:47Z" + }, + { + "id": 36957, + "recipientId": 61614, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/356/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 26", + "font": "Pretendard", + "createdAt": "2023-02-09T04:44:09Z" + } + ], + "reactionCount": 43, + "topReactions": [ + { + "emoji": "👍", + "count": 658 + } + ] + }, + { + "id": 69902, + "name": "송혜교", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/69902/600/400", + "createdAt": "2024-01-18T11:46:07Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 9049, + "recipientId": 69902, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/185/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 57", + "font": "Nanum Gothic", + "createdAt": "2023-09-26T03:46:33Z" + }, + { + "id": 54860, + "recipientId": 69902, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/322/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 46", + "font": "Pretendard", + "createdAt": "2023-03-14T16:52:38Z" + }, + { + "id": 46217, + "recipientId": 69902, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/307/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 89", + "font": "Roboto", + "createdAt": "2023-12-09T06:45:19Z" + } + ], + "reactionCount": 59, + "topReactions": [ + { + "emoji": "❤️", + "count": 950 + }, + { + "emoji": "👍", + "count": 704 + } + ] + }, + { + "id": 31146, + "name": "차은우", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-09-27T13:42:38Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 55285, + "recipientId": 31146, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/175/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 1", + "font": "Pretendard", + "createdAt": "2024-01-20T10:25:39Z" + } + ], + "reactionCount": 88, + "topReactions": [ + { + "emoji": "🥹", + "count": 136 + } + ] + }, + { + "id": 99123, + "name": "김하은", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-06-15T07:28:57Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 80875, + "recipientId": 99123, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/42/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 14", + "font": "Roboto", + "createdAt": "2023-11-30T19:44:40Z" + }, + { + "id": 55841, + "recipientId": 99123, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/377/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 80", + "font": "Roboto", + "createdAt": "2023-10-22T05:25:33Z" + }, + { + "id": 10401, + "recipientId": 99123, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/289/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 29", + "font": "Roboto", + "createdAt": "2023-04-03T21:19:09Z" + } + ], + "reactionCount": 80, + "topReactions": [ + { + "emoji": "😁", + "count": 347 + }, + { + "emoji": "❤️", + "count": 766 + } + ] + }, + { + "id": 23460, + "name": "전지현", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/23460/600/400", + "createdAt": "2023-11-01T19:37:56Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 6131, + "recipientId": 23460, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/223/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 60", + "font": "Nanum Gothic", + "createdAt": "2023-06-21T09:22:34Z" + }, + { + "id": 99333, + "recipientId": 23460, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/43/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 100", + "font": "Pretendard", + "createdAt": "2023-10-17T20:43:17Z" + }, + { + "id": 15452, + "recipientId": 23460, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/357/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 72", + "font": "Pretendard", + "createdAt": "2023-10-12T19:29:28Z" + } + ], + "reactionCount": 83, + "topReactions": [ + { + "emoji": "❤️", + "count": 886 + }, + { + "emoji": "😁", + "count": 199 + }, + { + "emoji": "🎉", + "count": 734 + } + ] + }, + { + "id": 16143, + "name": "박서준", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/16143/600/400", + "createdAt": "2023-01-04T22:33:04Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 29397, + "recipientId": 16143, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/42/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 18", + "font": "Pretendard", + "createdAt": "2023-10-28T19:38:42Z" + }, + { + "id": 61587, + "recipientId": 16143, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/355/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 12", + "font": "Noto Sans", + "createdAt": "2023-10-08T06:13:32Z" + }, + { + "id": 9237, + "recipientId": 16143, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/437/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 14", + "font": "Pretendard", + "createdAt": "2023-03-17T21:44:08Z" + } + ], + "reactionCount": 77, + "topReactions": [ + { + "emoji": "👍", + "count": 219 + } + ] + }, + { + "id": 68350, + "name": "송혜교", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/68350/600/400", + "createdAt": "2023-03-04T17:34:20Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 34771, + "recipientId": 68350, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/133/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 74", + "font": "Roboto", + "createdAt": "2023-08-04T20:53:43Z" + }, + { + "id": 3254, + "recipientId": 68350, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/10/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 14", + "font": "Nanum Gothic", + "createdAt": "2023-10-10T20:43:09Z" + }, + { + "id": 57267, + "recipientId": 68350, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/183/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 82", + "font": "Nanum Gothic", + "createdAt": "2023-02-14T21:40:55Z" + } + ], + "reactionCount": 61, + "topReactions": [ + { + "emoji": "👍", + "count": 974 + } + ] + }, + { + "id": 98422, + "name": "한지민", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-07-31T00:35:56Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 25200, + "recipientId": 98422, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/380/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 46", + "font": "Nanum Gothic", + "createdAt": "2023-02-10T09:22:21Z" + }, + { + "id": 12390, + "recipientId": 98422, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/70/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 31", + "font": "Noto Sans", + "createdAt": "2023-03-27T15:05:54Z" + }, + { + "id": 31892, + "recipientId": 98422, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/8/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 43", + "font": "Pretendard", + "createdAt": "2023-09-02T03:23:20Z" + } + ], + "reactionCount": 6, + "topReactions": [ + { + "emoji": "😀", + "count": 838 + }, + { + "emoji": "👍", + "count": 490 + } + ] + }, + { + "id": 53532, + "name": "이영준", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-12-08T09:44:53Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 33230, + "recipientId": 53532, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/231/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 27", + "font": "Pretendard", + "createdAt": "2023-12-05T13:46:34Z" + }, + { + "id": 85445, + "recipientId": 53532, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/363/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 51", + "font": "Noto Sans", + "createdAt": "2023-09-23T11:29:56Z" + }, + { + "id": 5528, + "recipientId": 53532, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/376/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 72", + "font": "Pretendard", + "createdAt": "2023-05-22T16:07:40Z" + } + ], + "reactionCount": 59, + "topReactions": [ + { + "emoji": "😁", + "count": 349 + } + ] + }, + { + "id": 93792, + "name": "김하은", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-10-03T23:01:03Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 86518, + "recipientId": 93792, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/204/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 9", + "font": "Roboto", + "createdAt": "2023-01-22T13:44:09Z" + }, + { + "id": 99933, + "recipientId": 93792, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/36/200/200", + "relationship": "친구", + "content": "박서준님의 메세지 내용 47", + "font": "Roboto", + "createdAt": "2023-12-15T23:06:01Z" + }, + { + "id": 9752, + "recipientId": 93792, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/171/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 68", + "font": "Roboto", + "createdAt": "2023-02-15T23:39:35Z" + } + ], + "reactionCount": 52, + "topReactions": [ + { + "emoji": "🥹", + "count": 325 + }, + { + "emoji": "👍", + "count": 579 + }, + { + "emoji": "❤️", + "count": 675 + } + ] + }, + { + "id": 12242, + "name": "송혜교", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-08-08T18:28:39Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 60783, + "recipientId": 12242, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/367/200/200", + "relationship": "친구", + "content": "박서준님의 메세지 내용 41", + "font": "Roboto", + "createdAt": "2023-08-22T03:44:05Z" + }, + { + "id": 10949, + "recipientId": 12242, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/309/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 18", + "font": "Roboto", + "createdAt": "2023-04-22T04:41:36Z" + }, + { + "id": 84648, + "recipientId": 12242, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/112/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 4", + "font": "Pretendard", + "createdAt": "2024-01-06T11:37:10Z" + } + ], + "reactionCount": 61, + "topReactions": [ + { + "emoji": "❤️", + "count": 47 + }, + { + "emoji": "😀", + "count": 589 + }, + { + "emoji": "🥹", + "count": 840 + } + ] + }, + { + "id": 89238, + "name": "현빈", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-07-30T22:16:57Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 80184, + "recipientId": 89238, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/280/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 79", + "font": "Pretendard", + "createdAt": "2023-08-21T11:18:34Z" + }, + { + "id": 47050, + "recipientId": 89238, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/484/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 55", + "font": "Nanum Gothic", + "createdAt": "2023-11-26T01:02:24Z" + } + ], + "reactionCount": 31, + "topReactions": [ + { + "emoji": "🎉", + "count": 687 + }, + { + "emoji": "👍", + "count": 355 + } + ] + }, + { + "id": 76148, + "name": "김하은", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/76148/600/400", + "createdAt": "2023-09-05T06:37:33Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 6882, + "recipientId": 76148, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/124/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 35", + "font": "Noto Sans", + "createdAt": "2024-01-24T04:11:44Z" + }, + { + "id": 35816, + "recipientId": 76148, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/488/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 96", + "font": "Nanum Gothic", + "createdAt": "2023-04-09T14:21:56Z" + } + ], + "reactionCount": 3, + "topReactions": [ + { + "emoji": "🥹", + "count": 231 + } + ] + }, + { + "id": 30844, + "name": "한지민", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/30844/600/400", + "createdAt": "2023-10-28T15:58:37Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 80665, + "recipientId": 30844, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/114/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 46", + "font": "Pretendard", + "createdAt": "2024-01-04T21:06:58Z" + }, + { + "id": 51843, + "recipientId": 30844, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/494/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 47", + "font": "Noto Sans", + "createdAt": "2023-03-25T15:03:22Z" + } + ], + "reactionCount": 50, + "topReactions": [ + { + "emoji": "❤️", + "count": 267 + } + ] + }, + { + "id": 38642, + "name": "정우성", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/38642/600/400", + "createdAt": "2023-12-23T15:10:53Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 76780, + "recipientId": 38642, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/253/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 24", + "font": "Nanum Gothic", + "createdAt": "2023-07-12T11:54:03Z" + }, + { + "id": 97730, + "recipientId": 38642, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/24/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 89", + "font": "Nanum Gothic", + "createdAt": "2023-01-10T18:45:35Z" + }, + { + "id": 64400, + "recipientId": 38642, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/47/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 21", + "font": "Roboto", + "createdAt": "2023-04-13T02:41:12Z" + } + ], + "reactionCount": 29, + "topReactions": [ + { + "emoji": "🎉", + "count": 48 + } + ] + }, + { + "id": 19180, + "name": "한지민", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-03-17T02:54:43Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 99404, + "recipientId": 19180, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/72/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 34", + "font": "Noto Sans", + "createdAt": "2023-12-31T06:59:44Z" + }, + { + "id": 40694, + "recipientId": 19180, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/466/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 85", + "font": "Nanum Gothic", + "createdAt": "2023-05-15T12:04:48Z" + } + ], + "reactionCount": 29, + "topReactions": [ + { + "emoji": "😀", + "count": 269 + } + ] + }, + { + "id": 56954, + "name": "이영준", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-07-08T16:30:01Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 77321, + "recipientId": 56954, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/486/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 71", + "font": "Pretendard", + "createdAt": "2024-01-10T14:52:33Z" + }, + { + "id": 48997, + "recipientId": 56954, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/128/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 8", + "font": "Pretendard", + "createdAt": "2023-10-26T08:26:46Z" + }, + { + "id": 39251, + "recipientId": 56954, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/491/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 63", + "font": "Roboto", + "createdAt": "2023-06-07T05:35:20Z" + } + ], + "reactionCount": 15, + "topReactions": [ + { + "emoji": "❤️", + "count": 607 + } + ] + }, + { + "id": 69809, + "name": "김하은", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/69809/600/400", + "createdAt": "2023-12-17T10:40:55Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 99531, + "recipientId": 69809, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/454/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 11", + "font": "Pretendard", + "createdAt": "2023-12-21T11:49:22Z" + }, + { + "id": 50525, + "recipientId": 69809, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/426/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 67", + "font": "Pretendard", + "createdAt": "2023-10-31T11:25:46Z" + } + ], + "reactionCount": 91, + "topReactions": [ + { + "emoji": "❤️", + "count": 419 + }, + { + "emoji": "🎉", + "count": 932 + } + ] + }, + { + "id": 55884, + "name": "전지현", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/55884/600/400", + "createdAt": "2023-05-07T09:10:12Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 78207, + "recipientId": 55884, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/155/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 87", + "font": "Pretendard", + "createdAt": "2023-06-01T07:21:37Z" + }, + { + "id": 52755, + "recipientId": 55884, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/148/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 76", + "font": "Pretendard", + "createdAt": "2023-11-02T00:07:24Z" + }, + { + "id": 96898, + "recipientId": 55884, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/468/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 21", + "font": "Nanum Gothic", + "createdAt": "2023-02-17T02:04:29Z" + } + ], + "reactionCount": 53, + "topReactions": [ + { + "emoji": "👍", + "count": 737 + }, + { + "emoji": "😀", + "count": 7 + }, + { + "emoji": "🥹", + "count": 149 + } + ] + }, + { + "id": 65809, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-01-13T12:44:51Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 2300, + "recipientId": 65809, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/358/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 60", + "font": "Roboto", + "createdAt": "2023-05-12T09:25:19Z" + }, + { + "id": 77937, + "recipientId": 65809, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/415/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 31", + "font": "Pretendard", + "createdAt": "2023-01-20T00:38:18Z" + }, + { + "id": 23083, + "recipientId": 65809, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/239/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 30", + "font": "Nanum Gothic", + "createdAt": "2023-01-16T00:10:43Z" + } + ], + "reactionCount": 93, + "topReactions": [ + { + "emoji": "🎉", + "count": 758 + } + ] + }, + { + "id": 47549, + "name": "김하은", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-11-16T19:12:33Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 12155, + "recipientId": 47549, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/247/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 80", + "font": "Pretendard", + "createdAt": "2023-03-09T22:19:14Z" + }, + { + "id": 97085, + "recipientId": 47549, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/468/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 24", + "font": "Pretendard", + "createdAt": "2023-05-15T13:22:05Z" + }, + { + "id": 38570, + "recipientId": 47549, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/485/200/200", + "relationship": "동료", + "content": "이영준님의 메세지 내용 42", + "font": "Nanum Gothic", + "createdAt": "2024-01-05T09:02:07Z" + } + ], + "reactionCount": 73, + "topReactions": [ + { + "emoji": "😀", + "count": 662 + } + ] + }, + { + "id": 7135, + "name": "이영준", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/7135/600/400", + "createdAt": "2024-02-02T00:26:07Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 77121, + "recipientId": 7135, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/494/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 47", + "font": "Nanum Gothic", + "createdAt": "2023-12-03T15:32:07Z" + }, + { + "id": 38873, + "recipientId": 7135, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/166/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 52", + "font": "Nanum Gothic", + "createdAt": "2023-12-30T01:58:20Z" + }, + { + "id": 64811, + "recipientId": 7135, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/184/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 9", + "font": "Roboto", + "createdAt": "2023-10-17T00:36:13Z" + } + ], + "reactionCount": 80, + "topReactions": [ + { + "emoji": "😁", + "count": 292 + } + ] + }, + { + "id": 83536, + "name": "이영준", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2024-02-02T17:56:51Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 76208, + "recipientId": 83536, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/12/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 1", + "font": "Noto Sans", + "createdAt": "2023-11-26T03:41:54Z" + }, + { + "id": 43421, + "recipientId": 83536, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/66/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 99", + "font": "Roboto", + "createdAt": "2023-01-23T15:07:50Z" + }, + { + "id": 78732, + "recipientId": 83536, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/385/200/200", + "relationship": "동료", + "content": "전지현님의 메세지 내용 41", + "font": "Pretendard", + "createdAt": "2023-08-24T20:58:06Z" + } + ], + "reactionCount": 0, + "topReactions": [ + { + "emoji": "🎉", + "count": 176 + }, + { + "emoji": "❤️", + "count": 889 + }, + { + "emoji": "👍", + "count": 759 + } + ] + }, + { + "id": 61585, + "name": "한지민", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/61585/600/400", + "createdAt": "2023-11-08T05:35:02Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 27357, + "recipientId": 61585, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/165/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 31", + "font": "Pretendard", + "createdAt": "2023-09-11T11:00:09Z" + }, + { + "id": 67752, + "recipientId": 61585, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/316/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 77", + "font": "Pretendard", + "createdAt": "2023-10-11T21:08:05Z" + }, + { + "id": 39794, + "recipientId": 61585, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/247/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 9", + "font": "Roboto", + "createdAt": "2023-06-17T12:32:47Z" + } + ], + "reactionCount": 54, + "topReactions": [ + { + "emoji": "😀", + "count": 420 + }, + { + "emoji": "👍", + "count": 760 + }, + { + "emoji": "😁", + "count": 167 + } + ] + }, + { + "id": 4404, + "name": "전지현", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/4404/600/400", + "createdAt": "2023-12-06T02:26:16Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 6292, + "recipientId": 4404, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/252/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 51", + "font": "Noto Sans", + "createdAt": "2023-01-23T16:41:53Z" + }, + { + "id": 61157, + "recipientId": 4404, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/109/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 95", + "font": "Roboto", + "createdAt": "2023-02-23T01:59:59Z" + }, + { + "id": 82143, + "recipientId": 4404, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/156/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 45", + "font": "Roboto", + "createdAt": "2023-11-05T04:40:09Z" + } + ], + "reactionCount": 2, + "topReactions": [ + { + "emoji": "🎉", + "count": 440 + }, + { + "emoji": "🥹", + "count": 460 + } + ] + }, + { + "id": 82511, + "name": "최민수", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-03-20T04:58:27Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 26463, + "recipientId": 82511, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/71/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 76", + "font": "Pretendard", + "createdAt": "2023-12-01T01:16:39Z" + }, + { + "id": 2416, + "recipientId": 82511, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/268/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 24", + "font": "Noto Sans", + "createdAt": "2024-01-04T09:08:19Z" + }, + { + "id": 50351, + "recipientId": 82511, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/389/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 9", + "font": "Nanum Gothic", + "createdAt": "2023-03-28T23:52:37Z" + } + ], + "reactionCount": 56, + "topReactions": [ + { + "emoji": "🎉", + "count": 241 + }, + { + "emoji": "😀", + "count": 812 + }, + { + "emoji": "👍", + "count": 621 + } + ] + }, + { + "id": 80845, + "name": "현빈", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/80845/600/400", + "createdAt": "2023-09-23T05:25:24Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 59713, + "recipientId": 80845, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/85/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 90", + "font": "Noto Sans", + "createdAt": "2023-07-28T08:33:36Z" + }, + { + "id": 74833, + "recipientId": 80845, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/497/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 82", + "font": "Noto Sans", + "createdAt": "2024-01-15T11:55:15Z" + }, + { + "id": 44164, + "recipientId": 80845, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/135/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 40", + "font": "Nanum Gothic", + "createdAt": "2023-09-13T20:47:57Z" + } + ], + "reactionCount": 4, + "topReactions": [ + { + "emoji": "🎉", + "count": 452 + } + ] + }, + { + "id": 11012, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/11012/600/400", + "createdAt": "2023-09-24T11:28:28Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 4989, + "recipientId": 11012, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/380/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 51", + "font": "Pretendard", + "createdAt": "2023-01-09T06:31:52Z" + }, + { + "id": 49460, + "recipientId": 11012, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/87/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 7", + "font": "Noto Sans", + "createdAt": "2023-11-01T20:42:58Z" + }, + { + "id": 33477, + "recipientId": 11012, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/499/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 100", + "font": "Nanum Gothic", + "createdAt": "2023-12-19T22:24:58Z" + } + ], + "reactionCount": 24, + "topReactions": [ + { + "emoji": "❤️", + "count": 576 + }, + { + "emoji": "🥹", + "count": 888 + } + ] + }, + { + "id": 6792, + "name": "송혜교", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-11-20T08:02:43Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 30090, + "recipientId": 6792, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/140/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 5", + "font": "Roboto", + "createdAt": "2023-01-30T10:59:51Z" + }, + { + "id": 55978, + "recipientId": 6792, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/461/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 59", + "font": "Nanum Gothic", + "createdAt": "2023-10-23T19:12:56Z" + } + ], + "reactionCount": 31, + "topReactions": [ + { + "emoji": "😁", + "count": 130 + } + ] + }, + { + "id": 34708, + "name": "송혜교", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/34708/600/400", + "createdAt": "2023-02-10T16:28:04Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 6194, + "recipientId": 34708, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/317/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 47", + "font": "Pretendard", + "createdAt": "2023-06-08T17:46:33Z" + }, + { + "id": 25345, + "recipientId": 34708, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/457/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 87", + "font": "Nanum Gothic", + "createdAt": "2023-02-18T22:02:01Z" + }, + { + "id": 84170, + "recipientId": 34708, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/327/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 70", + "font": "Nanum Gothic", + "createdAt": "2023-05-02T00:06:39Z" + } + ], + "reactionCount": 28, + "topReactions": [ + { + "emoji": "😁", + "count": 339 + } + ] + }, + { + "id": 21977, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/21977/600/400", + "createdAt": "2024-02-05T18:34:45Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 75340, + "recipientId": 21977, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/86/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 45", + "font": "Roboto", + "createdAt": "2024-01-09T13:48:43Z" + }, + { + "id": 65322, + "recipientId": 21977, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/156/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 79", + "font": "Nanum Gothic", + "createdAt": "2023-09-13T04:30:55Z" + } + ], + "reactionCount": 76, + "topReactions": [ + { + "emoji": "😀", + "count": 90 + }, + { + "emoji": "😁", + "count": 875 + }, + { + "emoji": "🎉", + "count": 422 + } + ] + }, + { + "id": 67245, + "name": "김하은", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-03-05T11:29:45Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 37649, + "recipientId": 67245, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/160/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 84", + "font": "Roboto", + "createdAt": "2023-05-09T12:36:18Z" + }, + { + "id": 98235, + "recipientId": 67245, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/320/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 65", + "font": "Nanum Gothic", + "createdAt": "2023-07-11T12:57:47Z" + }, + { + "id": 922, + "recipientId": 67245, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/147/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 12", + "font": "Noto Sans", + "createdAt": "2023-10-05T12:35:41Z" + } + ], + "reactionCount": 35, + "topReactions": [ + { + "emoji": "😀", + "count": 254 + }, + { + "emoji": "🥹", + "count": 515 + } + ] + }, + { + "id": 60427, + "name": "정우성", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/60427/600/400", + "createdAt": "2023-01-14T01:31:34Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 14341, + "recipientId": 60427, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/68/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 5", + "font": "Pretendard", + "createdAt": "2023-09-09T16:01:13Z" + }, + { + "id": 54177, + "recipientId": 60427, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/499/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 9", + "font": "Noto Sans", + "createdAt": "2023-03-18T17:17:13Z" + }, + { + "id": 10188, + "recipientId": 60427, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/146/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 34", + "font": "Nanum Gothic", + "createdAt": "2023-07-27T13:26:34Z" + } + ], + "reactionCount": 66, + "topReactions": [ + { + "emoji": "🥹", + "count": 414 + } + ] + }, + { + "id": 38317, + "name": "한지민", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/38317/600/400", + "createdAt": "2023-04-20T23:35:17Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 65804, + "recipientId": 38317, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/232/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 90", + "font": "Noto Sans", + "createdAt": "2023-04-13T15:24:49Z" + }, + { + "id": 57545, + "recipientId": 38317, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/58/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 14", + "font": "Pretendard", + "createdAt": "2023-08-15T18:35:26Z" + } + ], + "reactionCount": 100, + "topReactions": [ + { + "emoji": "😁", + "count": 782 + }, + { + "emoji": "🎉", + "count": 204 + }, + { + "emoji": "❤️", + "count": 348 + } + ] + }, + { + "id": 14109, + "name": "박서준", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/14109/600/400", + "createdAt": "2023-06-01T08:10:27Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 78694, + "recipientId": 14109, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/359/200/200", + "relationship": "가족", + "content": "현빈님의 메세지 내용 93", + "font": "Nanum Gothic", + "createdAt": "2024-01-07T06:47:25Z" + }, + { + "id": 98673, + "recipientId": 14109, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/291/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 2", + "font": "Roboto", + "createdAt": "2023-04-22T16:18:34Z" + }, + { + "id": 48915, + "recipientId": 14109, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/254/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 7", + "font": "Noto Sans", + "createdAt": "2024-01-25T22:34:40Z" + } + ], + "reactionCount": 6, + "topReactions": [ + { + "emoji": "👍", + "count": 324 + } + ] + }, + { + "id": 50811, + "name": "이영준", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/50811/600/400", + "createdAt": "2023-10-02T05:46:37Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 87970, + "recipientId": 50811, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/28/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 73", + "font": "Noto Sans", + "createdAt": "2023-05-27T00:59:12Z" + }, + { + "id": 27538, + "recipientId": 50811, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/256/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 5", + "font": "Nanum Gothic", + "createdAt": "2023-12-22T09:44:50Z" + }, + { + "id": 73753, + "recipientId": 50811, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/148/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 39", + "font": "Noto Sans", + "createdAt": "2023-04-26T05:07:35Z" + } + ], + "reactionCount": 65, + "topReactions": [ + { + "emoji": "👍", + "count": 399 + }, + { + "emoji": "🎉", + "count": 851 + } + ] + }, + { + "id": 6155, + "name": "전지현", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/seed/6155/600/400", + "createdAt": "2023-07-14T13:41:34Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 3243, + "recipientId": 6155, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/318/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 52", + "font": "Noto Sans", + "createdAt": "2023-08-11T03:36:35Z" + } + ], + "reactionCount": 83, + "topReactions": [ + { + "emoji": "👍", + "count": 682 + }, + { + "emoji": "❤️", + "count": 842 + }, + { + "emoji": "😁", + "count": 379 + } + ] + }, + { + "id": 56213, + "name": "현빈", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-09-15T20:40:35Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 73057, + "recipientId": 56213, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/33/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 81", + "font": "Roboto", + "createdAt": "2023-07-25T17:44:57Z" + }, + { + "id": 89592, + "recipientId": 56213, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/310/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 33", + "font": "Nanum Gothic", + "createdAt": "2023-07-16T12:03:19Z" + }, + { + "id": 94221, + "recipientId": 56213, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/264/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 8", + "font": "Roboto", + "createdAt": "2023-04-24T04:50:36Z" + } + ], + "reactionCount": 46, + "topReactions": [ + { + "emoji": "😁", + "count": 277 + } + ] + }, + { + "id": 87423, + "name": "한지민", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-07-30T00:10:08Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 71070, + "recipientId": 87423, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/29/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 2", + "font": "Noto Sans", + "createdAt": "2023-06-05T10:27:47Z" + }, + { + "id": 38287, + "recipientId": 87423, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/259/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 51", + "font": "Pretendard", + "createdAt": "2023-10-27T10:50:10Z" + }, + { + "id": 92441, + "recipientId": 87423, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/98/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 89", + "font": "Pretendard", + "createdAt": "2023-11-23T15:03:42Z" + } + ], + "reactionCount": 74, + "topReactions": [ + { + "emoji": "😁", + "count": 619 + }, + { + "emoji": "🎉", + "count": 601 + } + ] + }, + { + "id": 37498, + "name": "박서준", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/37498/600/400", + "createdAt": "2023-08-19T22:44:58Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 7778, + "recipientId": 37498, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/202/200/200", + "relationship": "가족", + "content": "차은우님의 메세지 내용 24", + "font": "Pretendard", + "createdAt": "2023-12-27T07:03:22Z" + }, + { + "id": 50047, + "recipientId": 37498, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/448/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 34", + "font": "Noto Sans", + "createdAt": "2023-06-01T01:56:52Z" + }, + { + "id": 849, + "recipientId": 37498, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/319/200/200", + "relationship": "가족", + "content": "김하은님의 메세지 내용 99", + "font": "Roboto", + "createdAt": "2023-04-16T07:26:51Z" + } + ], + "reactionCount": 86, + "topReactions": [ + { + "emoji": "😀", + "count": 23 + } + ] + }, + { + "id": 804, + "name": "김하은", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/804/600/400", + "createdAt": "2023-12-31T06:48:26Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 92345, + "recipientId": 804, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/119/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 82", + "font": "Pretendard", + "createdAt": "2023-08-19T15:47:19Z" + }, + { + "id": 18005, + "recipientId": 804, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/53/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 96", + "font": "Pretendard", + "createdAt": "2023-05-22T23:53:08Z" + } + ], + "reactionCount": 44, + "topReactions": [ + { + "emoji": "👍", + "count": 712 + } + ] + }, + { + "id": 27292, + "name": "김하은", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/27292/600/400", + "createdAt": "2023-12-02T16:16:54Z", + "messageCount": 4, + "recentMessages": [ + { + "id": 14570, + "recipientId": 27292, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/145/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 41", + "font": "Noto Sans", + "createdAt": "2023-05-31T17:54:46Z" + }, + { + "id": 73005, + "recipientId": 27292, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/471/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 43", + "font": "Nanum Gothic", + "createdAt": "2023-11-03T09:06:00Z" + }, + { + "id": 67991, + "recipientId": 27292, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/499/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 42", + "font": "Pretendard", + "createdAt": "2024-02-05T04:43:27Z" + } + ], + "reactionCount": 19, + "topReactions": [ + { + "emoji": "😁", + "count": 714 + } + ] + }, + { + "id": 42364, + "name": "송혜교", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/42364/600/400", + "createdAt": "2023-10-24T15:14:56Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 62241, + "recipientId": 42364, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/165/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 17", + "font": "Roboto", + "createdAt": "2023-01-16T13:07:22Z" + }, + { + "id": 35391, + "recipientId": 42364, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/261/200/200", + "relationship": "가족", + "content": "박서준님의 메세지 내용 91", + "font": "Roboto", + "createdAt": "2023-11-27T15:42:27Z" + }, + { + "id": 82773, + "recipientId": 42364, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/343/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 31", + "font": "Nanum Gothic", + "createdAt": "2024-01-31T07:30:06Z" + } + ], + "reactionCount": 51, + "topReactions": [ + { + "emoji": "😁", + "count": 165 + } + ] + }, + { + "id": 12700, + "name": "차은우", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-08-18T22:43:12Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 81662, + "recipientId": 12700, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/362/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 94", + "font": "Pretendard", + "createdAt": "2023-01-25T05:02:39Z" + }, + { + "id": 29275, + "recipientId": 12700, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/163/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 32", + "font": "Noto Sans", + "createdAt": "2023-01-19T15:33:19Z" + }, + { + "id": 4746, + "recipientId": 12700, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/260/200/200", + "relationship": "친구", + "content": "차은우님의 메세지 내용 44", + "font": "Noto Sans", + "createdAt": "2023-02-17T03:59:23Z" + } + ], + "reactionCount": 74, + "topReactions": [ + { + "emoji": "🥹", + "count": 597 + }, + { + "emoji": "❤️", + "count": 681 + } + ] + }, + { + "id": 91444, + "name": "송혜교", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/91444/600/400", + "createdAt": "2023-06-03T08:08:37Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 75089, + "recipientId": 91444, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/380/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 22", + "font": "Nanum Gothic", + "createdAt": "2023-12-14T21:41:57Z" + }, + { + "id": 98743, + "recipientId": 91444, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/27/200/200", + "relationship": "친구", + "content": "이영준님의 메세지 내용 74", + "font": "Noto Sans", + "createdAt": "2023-09-23T04:44:23Z" + } + ], + "reactionCount": 9, + "topReactions": [ + { + "emoji": "❤️", + "count": 756 + }, + { + "emoji": "😁", + "count": 922 + } + ] + }, + { + "id": 431, + "name": "송혜교", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/431/600/400", + "createdAt": "2023-09-19T05:38:16Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 85796, + "recipientId": 431, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/391/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 89", + "font": "Pretendard", + "createdAt": "2023-06-30T16:55:54Z" + }, + { + "id": 45946, + "recipientId": 431, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/231/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 22", + "font": "Noto Sans", + "createdAt": "2023-07-29T17:47:32Z" + }, + { + "id": 19138, + "recipientId": 431, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/112/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 98", + "font": "Pretendard", + "createdAt": "2023-03-09T07:33:56Z" + } + ], + "reactionCount": 53, + "topReactions": [ + { + "emoji": "🎉", + "count": 596 + }, + { + "emoji": "🥹", + "count": 907 + }, + { + "emoji": "❤️", + "count": 594 + } + ] + }, + { + "id": 59201, + "name": "한지민", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/59201/600/400", + "createdAt": "2023-08-02T10:38:08Z", + "messageCount": 10, + "recentMessages": [ + { + "id": 92555, + "recipientId": 59201, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/65/200/200", + "relationship": "친구", + "content": "전지현님의 메세지 내용 91", + "font": "Roboto", + "createdAt": "2023-04-10T02:51:26Z" + }, + { + "id": 64459, + "recipientId": 59201, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/452/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 13", + "font": "Noto Sans", + "createdAt": "2023-11-09T13:15:50Z" + }, + { + "id": 48918, + "recipientId": 59201, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/45/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 21", + "font": "Roboto", + "createdAt": "2023-01-05T13:09:05Z" + } + ], + "reactionCount": 65, + "topReactions": [ + { + "emoji": "🎉", + "count": 94 + } + ] + }, + { + "id": 6989, + "name": "김하은", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/6989/600/400", + "createdAt": "2023-04-14T01:33:48Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 81227, + "recipientId": 6989, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/484/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 56", + "font": "Roboto", + "createdAt": "2024-01-05T22:51:56Z" + }, + { + "id": 15361, + "recipientId": 6989, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/281/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 46", + "font": "Noto Sans", + "createdAt": "2023-06-19T05:28:03Z" + }, + { + "id": 98203, + "recipientId": 6989, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/28/200/200", + "relationship": "친구", + "content": "정우성님의 메세지 내용 88", + "font": "Pretendard", + "createdAt": "2023-12-18T08:50:50Z" + } + ], + "reactionCount": 41, + "topReactions": [ + { + "emoji": "😀", + "count": 176 + } + ] + }, + { + "id": 56031, + "name": "전지현", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/56031/600/400", + "createdAt": "2023-01-03T23:21:51Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 47661, + "recipientId": 56031, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/395/200/200", + "relationship": "동료", + "content": "차은우님의 메세지 내용 62", + "font": "Nanum Gothic", + "createdAt": "2023-08-20T17:27:35Z" + }, + { + "id": 20252, + "recipientId": 56031, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/49/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 63", + "font": "Nanum Gothic", + "createdAt": "2023-07-10T22:36:06Z" + }, + { + "id": 23385, + "recipientId": 56031, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/498/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 11", + "font": "Nanum Gothic", + "createdAt": "2023-06-21T11:14:02Z" + } + ], + "reactionCount": 83, + "topReactions": [ + { + "emoji": "❤️", + "count": 375 + }, + { + "emoji": "🥹", + "count": 408 + } + ] + }, + { + "id": 2331, + "name": "송혜교", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/2331/600/400", + "createdAt": "2023-12-17T01:45:14Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 66942, + "recipientId": 2331, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/245/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 89", + "font": "Pretendard", + "createdAt": "2023-08-18T18:11:01Z" + }, + { + "id": 42191, + "recipientId": 2331, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/336/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 55", + "font": "Nanum Gothic", + "createdAt": "2023-02-06T06:21:56Z" + }, + { + "id": 8612, + "recipientId": 2331, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/120/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 40", + "font": "Noto Sans", + "createdAt": "2023-05-16T19:20:19Z" + } + ], + "reactionCount": 61, + "topReactions": [ + { + "emoji": "👍", + "count": 665 + } + ] + }, + { + "id": 80397, + "name": "최민수", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-11-20T05:03:59Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 51404, + "recipientId": 80397, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/222/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 47", + "font": "Nanum Gothic", + "createdAt": "2023-11-10T08:33:06Z" + }, + { + "id": 3634, + "recipientId": 80397, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/430/200/200", + "relationship": "동료", + "content": "김하은님의 메세지 내용 63", + "font": "Noto Sans", + "createdAt": "2023-04-27T11:10:26Z" + } + ], + "reactionCount": 97, + "topReactions": [ + { + "emoji": "😀", + "count": 951 + }, + { + "emoji": "❤️", + "count": 215 + } + ] + }, + { + "id": 92514, + "name": "정우성", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-10-03T05:42:45Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 17969, + "recipientId": 92514, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/229/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 59", + "font": "Pretendard", + "createdAt": "2023-07-25T08:20:39Z" + }, + { + "id": 27640, + "recipientId": 92514, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/12/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 90", + "font": "Noto Sans", + "createdAt": "2023-08-09T19:30:02Z" + }, + { + "id": 51718, + "recipientId": 92514, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/196/200/200", + "relationship": "가족", + "content": "전지현님의 메세지 내용 50", + "font": "Noto Sans", + "createdAt": "2023-09-21T04:00:24Z" + } + ], + "reactionCount": 48, + "topReactions": [ + { + "emoji": "🎉", + "count": 995 + } + ] + }, + { + "id": 91659, + "name": "박서준", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/91659/600/400", + "createdAt": "2023-02-05T05:14:29Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 86637, + "recipientId": 91659, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/95/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 53", + "font": "Nanum Gothic", + "createdAt": "2023-12-23T14:34:42Z" + }, + { + "id": 43583, + "recipientId": 91659, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/400/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 31", + "font": "Pretendard", + "createdAt": "2023-06-03T00:26:24Z" + }, + { + "id": 32047, + "recipientId": 91659, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/127/200/200", + "relationship": "가족", + "content": "한지민님의 메세지 내용 65", + "font": "Pretendard", + "createdAt": "2023-12-30T16:06:15Z" + } + ], + "reactionCount": 13, + "topReactions": [ + { + "emoji": "❤️", + "count": 62 + } + ] + }, + { + "id": 52526, + "name": "전지현", + "backgroundColor": "green", + "backgroundImageURL": null, + "createdAt": "2023-12-06T09:42:54Z", + "messageCount": 3, + "recentMessages": [ + { + "id": 95226, + "recipientId": 52526, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/364/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 12", + "font": "Roboto", + "createdAt": "2023-03-22T23:13:59Z" + }, + { + "id": 5308, + "recipientId": 52526, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/293/200/200", + "relationship": "친구", + "content": "박서준님의 메세지 내용 53", + "font": "Roboto", + "createdAt": "2023-07-05T04:02:56Z" + }, + { + "id": 22581, + "recipientId": 52526, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/471/200/200", + "relationship": "지인", + "content": "한지민님의 메세지 내용 100", + "font": "Pretendard", + "createdAt": "2023-07-11T08:25:24Z" + } + ], + "reactionCount": 57, + "topReactions": [ + { + "emoji": "👍", + "count": 412 + } + ] + }, + { + "id": 66246, + "name": "박서준", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/66246/600/400", + "createdAt": "2023-06-05T11:15:08Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 67335, + "recipientId": 66246, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/155/200/200", + "relationship": "지인", + "content": "최민수님의 메세지 내용 92", + "font": "Pretendard", + "createdAt": "2023-11-13T18:00:50Z" + }, + { + "id": 97868, + "recipientId": 66246, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/163/200/200", + "relationship": "가족", + "content": "송혜교님의 메세지 내용 8", + "font": "Nanum Gothic", + "createdAt": "2024-01-30T05:20:18Z" + }, + { + "id": 36892, + "recipientId": 66246, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/204/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 51", + "font": "Noto Sans", + "createdAt": "2023-04-03T14:58:25Z" + } + ], + "reactionCount": 87, + "topReactions": [ + { + "emoji": "😀", + "count": 356 + }, + { + "emoji": "😁", + "count": 255 + } + ] + }, + { + "id": 78492, + "name": "현빈", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-06-27T06:54:39Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 51872, + "recipientId": 78492, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/149/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 14", + "font": "Nanum Gothic", + "createdAt": "2023-08-29T19:08:59Z" + }, + { + "id": 55542, + "recipientId": 78492, + "sender": "전지현", + "profileImageURL": "https://picsum.photos/id/283/200/200", + "relationship": "지인", + "content": "전지현님의 메세지 내용 79", + "font": "Nanum Gothic", + "createdAt": "2023-01-14T20:52:51Z" + }, + { + "id": 93850, + "recipientId": 78492, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/441/200/200", + "relationship": "지인", + "content": "송혜교님의 메세지 내용 80", + "font": "Pretendard", + "createdAt": "2023-11-01T00:19:15Z" + } + ], + "reactionCount": 55, + "topReactions": [ + { + "emoji": "❤️", + "count": 839 + } + ] + }, + { + "id": 82777, + "name": "현빈", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-09-15T12:08:04Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 87777, + "recipientId": 82777, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/233/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 6", + "font": "Nanum Gothic", + "createdAt": "2023-06-02T07:12:19Z" + }, + { + "id": 80014, + "recipientId": 82777, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/243/200/200", + "relationship": "지인", + "content": "이영준님의 메세지 내용 12", + "font": "Nanum Gothic", + "createdAt": "2023-03-29T10:02:35Z" + }, + { + "id": 70414, + "recipientId": 82777, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/179/200/200", + "relationship": "친구", + "content": "송혜교님의 메세지 내용 38", + "font": "Noto Sans", + "createdAt": "2023-10-05T10:33:01Z" + } + ], + "reactionCount": 34, + "topReactions": [ + { + "emoji": "👍", + "count": 367 + }, + { + "emoji": "❤️", + "count": 86 + } + ] + }, + { + "id": 16044, + "name": "전지현", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-05-20T07:28:44Z", + "messageCount": 1, + "recentMessages": [ + { + "id": 88553, + "recipientId": 16044, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/109/200/200", + "relationship": "가족", + "content": "최민수님의 메세지 내용 76", + "font": "Pretendard", + "createdAt": "2023-08-03T22:59:16Z" + } + ], + "reactionCount": 40, + "topReactions": [ + { + "emoji": "🥹", + "count": 607 + }, + { + "emoji": "😁", + "count": 324 + } + ] + }, + { + "id": 42617, + "name": "정우성", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-09-04T03:21:42Z", + "messageCount": 6, + "recentMessages": [ + { + "id": 36095, + "recipientId": 42617, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/119/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 8", + "font": "Nanum Gothic", + "createdAt": "2023-03-20T16:47:37Z" + }, + { + "id": 79006, + "recipientId": 42617, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/58/200/200", + "relationship": "친구", + "content": "김하은님의 메세지 내용 81", + "font": "Roboto", + "createdAt": "2023-05-27T14:29:42Z" + }, + { + "id": 54211, + "recipientId": 42617, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/57/200/200", + "relationship": "지인", + "content": "현빈님의 메세지 내용 70", + "font": "Nanum Gothic", + "createdAt": "2023-05-14T01:15:48Z" + } + ], + "reactionCount": 12, + "topReactions": [ + { + "emoji": "🥹", + "count": 603 + }, + { + "emoji": "🎉", + "count": 741 + } + ] + }, + { + "id": 63381, + "name": "최민수", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/seed/63381/600/400", + "createdAt": "2023-05-05T23:49:25Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 56206, + "recipientId": 63381, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/73/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 80", + "font": "Nanum Gothic", + "createdAt": "2023-09-19T13:55:51Z" + }, + { + "id": 15343, + "recipientId": 63381, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/1/200/200", + "relationship": "가족", + "content": "정우성님의 메세지 내용 30", + "font": "Nanum Gothic", + "createdAt": "2023-12-09T14:00:31Z" + }, + { + "id": 64540, + "recipientId": 63381, + "sender": "송혜교", + "profileImageURL": "https://picsum.photos/id/486/200/200", + "relationship": "동료", + "content": "송혜교님의 메세지 내용 92", + "font": "Noto Sans", + "createdAt": "2023-04-10T11:58:05Z" + } + ], + "reactionCount": 26, + "topReactions": [ + { + "emoji": "❤️", + "count": 356 + }, + { + "emoji": "🎉", + "count": 780 + } + ] + }, + { + "id": 25814, + "name": "송혜교", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/seed/25814/600/400", + "createdAt": "2023-09-02T07:06:25Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 18455, + "recipientId": 25814, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/361/200/200", + "relationship": "동료", + "content": "박서준님의 메세지 내용 49", + "font": "Noto Sans", + "createdAt": "2023-02-12T08:14:35Z" + }, + { + "id": 45626, + "recipientId": 25814, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/476/200/200", + "relationship": "동료", + "content": "최민수님의 메세지 내용 18", + "font": "Pretendard", + "createdAt": "2023-09-04T23:48:15Z" + }, + { + "id": 71644, + "recipientId": 25814, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/485/200/200", + "relationship": "친구", + "content": "현빈님의 메세지 내용 59", + "font": "Roboto", + "createdAt": "2023-08-12T05:15:13Z" + } + ], + "reactionCount": 45, + "topReactions": [ + { + "emoji": "🥹", + "count": 664 + }, + { + "emoji": "😀", + "count": 205 + }, + { + "emoji": "🎉", + "count": 667 + } + ] + }, + { + "id": 85652, + "name": "현빈", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-09-30T18:53:27Z", + "messageCount": 7, + "recentMessages": [ + { + "id": 13934, + "recipientId": 85652, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/456/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 43", + "font": "Pretendard", + "createdAt": "2023-11-22T11:38:51Z" + }, + { + "id": 5599, + "recipientId": 85652, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/26/200/200", + "relationship": "지인", + "content": "정우성님의 메세지 내용 90", + "font": "Nanum Gothic", + "createdAt": "2023-11-21T01:23:07Z" + }, + { + "id": 78185, + "recipientId": 85652, + "sender": "이영준", + "profileImageURL": "https://picsum.photos/id/193/200/200", + "relationship": "가족", + "content": "이영준님의 메세지 내용 14", + "font": "Nanum Gothic", + "createdAt": "2024-01-16T07:51:56Z" + } + ], + "reactionCount": 15, + "topReactions": [ + { + "emoji": "🎉", + "count": 963 + }, + { + "emoji": "❤️", + "count": 879 + }, + { + "emoji": "🥹", + "count": 713 + } + ] + }, + { + "id": 70835, + "name": "이영준", + "backgroundColor": "beige", + "backgroundImageURL": null, + "createdAt": "2023-04-17T15:50:50Z", + "messageCount": 9, + "recentMessages": [ + { + "id": 32521, + "recipientId": 70835, + "sender": "김하은", + "profileImageURL": "https://picsum.photos/id/475/200/200", + "relationship": "지인", + "content": "김하은님의 메세지 내용 24", + "font": "Pretendard", + "createdAt": "2023-09-29T00:00:45Z" + }, + { + "id": 77740, + "recipientId": 70835, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/288/200/200", + "relationship": "지인", + "content": "박서준님의 메세지 내용 84", + "font": "Roboto", + "createdAt": "2023-02-22T09:49:22Z" + }, + { + "id": 95524, + "recipientId": 70835, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/375/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 91", + "font": "Nanum Gothic", + "createdAt": "2023-04-04T03:33:36Z" + } + ], + "reactionCount": 73, + "topReactions": [ + { + "emoji": "😁", + "count": 12 + }, + { + "emoji": "🥹", + "count": 176 + } + ] + }, + { + "id": 77967, + "name": "김하은", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/seed/77967/600/400", + "createdAt": "2023-01-25T15:36:52Z", + "messageCount": 5, + "recentMessages": [ + { + "id": 58327, + "recipientId": 77967, + "sender": "최민수", + "profileImageURL": "https://picsum.photos/id/333/200/200", + "relationship": "친구", + "content": "최민수님의 메세지 내용 39", + "font": "Pretendard", + "createdAt": "2023-06-14T02:06:26Z" + }, + { + "id": 8140, + "recipientId": 77967, + "sender": "현빈", + "profileImageURL": "https://picsum.photos/id/320/200/200", + "relationship": "동료", + "content": "현빈님의 메세지 내용 17", + "font": "Pretendard", + "createdAt": "2023-03-29T03:09:31Z" + }, + { + "id": 99412, + "recipientId": 77967, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/301/200/200", + "relationship": "동료", + "content": "한지민님의 메세지 내용 49", + "font": "Pretendard", + "createdAt": "2023-09-30T06:21:13Z" + } + ], + "reactionCount": 12, + "topReactions": [ + { + "emoji": "❤️", + "count": 766 + }, + { + "emoji": "😁", + "count": 636 + } + ] + }, + { + "id": 31249, + "name": "차은우", + "backgroundColor": "blue", + "backgroundImageURL": null, + "createdAt": "2023-05-16T17:41:45Z", + "messageCount": 2, + "recentMessages": [ + { + "id": 77297, + "recipientId": 31249, + "sender": "정우성", + "profileImageURL": "https://picsum.photos/id/356/200/200", + "relationship": "동료", + "content": "정우성님의 메세지 내용 30", + "font": "Roboto", + "createdAt": "2023-10-09T19:45:25Z" + }, + { + "id": 54855, + "recipientId": 31249, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/188/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 84", + "font": "Pretendard", + "createdAt": "2023-07-01T14:34:04Z" + } + ], + "reactionCount": 87, + "topReactions": [ + { + "emoji": "🎉", + "count": 697 + }, + { + "emoji": "😀", + "count": 765 + } + ] + }, + { + "id": 87008, + "name": "차은우", + "backgroundColor": "purple", + "backgroundImageURL": null, + "createdAt": "2023-05-31T18:24:49Z", + "messageCount": 8, + "recentMessages": [ + { + "id": 2572, + "recipientId": 87008, + "sender": "한지민", + "profileImageURL": "https://picsum.photos/id/379/200/200", + "relationship": "친구", + "content": "한지민님의 메세지 내용 9", + "font": "Roboto", + "createdAt": "2023-05-01T19:29:33Z" + }, + { + "id": 29069, + "recipientId": 87008, + "sender": "차은우", + "profileImageURL": "https://picsum.photos/id/25/200/200", + "relationship": "지인", + "content": "차은우님의 메세지 내용 19", + "font": "Roboto", + "createdAt": "2024-01-14T03:59:30Z" + }, + { + "id": 33287, + "recipientId": 87008, + "sender": "박서준", + "profileImageURL": "https://picsum.photos/id/71/200/200", + "relationship": "친구", + "content": "박서준님의 메세지 내용 61", + "font": "Nanum Gothic", + "createdAt": "2023-08-09T16:33:57Z" + } + ], + "reactionCount": 42, + "topReactions": [ + { + "emoji": "😀", + "count": 832 + } + ] + } +] diff --git a/src/features/rolling-paper/api/recipients.js b/src/features/rolling-paper/api/recipients.js new file mode 100644 index 0000000..3fccdc4 --- /dev/null +++ b/src/features/rolling-paper/api/recipients.js @@ -0,0 +1,19 @@ +import { apiClient } from "../../../api/client"; + +async function getRecipient({ id }) { + const response = await apiClient.get(`recipients/${id}/`); + if (response.status !== 200) { + throw new Error("Recipient data를 가져오는데 실패했습니다."); + } + + return response.data; +} + +async function deleteRecipient({ id }) { + const response = await apiClient.delete(`recipients/${id}/`); + if (response.status !== 204) { + throw new Error("Recipient를 삭제하는데 실패했습니다."); + } +} + +export { deleteRecipient, getRecipient }; diff --git a/src/features/rolling-paper/api/rolling-paper-list.js b/src/features/rolling-paper/api/rolling-paper-list.js new file mode 100644 index 0000000..38442da --- /dev/null +++ b/src/features/rolling-paper/api/rolling-paper-list.js @@ -0,0 +1,7 @@ +import mockRollingPaperList from "./mock-rolling-paper-list.json"; + +async function getRollingPaperList() { + return mockRollingPaperList; +} + +export { getRollingPaperList }; diff --git a/src/features/rolling-paper/components/header/divided-container.jsx b/src/features/rolling-paper/components/header/divided-container.jsx new file mode 100644 index 0000000..88b3d08 --- /dev/null +++ b/src/features/rolling-paper/components/header/divided-container.jsx @@ -0,0 +1,36 @@ +import styled from "styled-components"; +import Colors from "../../../../components/color/colors"; +import { media } from "../../../../utils/media"; + +const gap = { + normal: "28px", + compact: "12px", +}; + +const Divider = styled.div` + width: 1px; + height: 28px; + background-color: ${Colors.gray(200)}; +`; + +const StyledDividedContainer = styled.div` + display: flex; + align-items: center; + gap: ${({ $layout }) => gap[$layout]}; + + ${media.mobile} { + gap: 16px; + } +`; + +function DividedContainer({ children, layout = "normal" }) { + return ( + + {children[0]} + {children[0] && } + {children[1]} + + ); +} + +export default DividedContainer; diff --git a/src/features/rolling-paper/components/header/rolling-paper-header.jsx b/src/features/rolling-paper/components/header/rolling-paper-header.jsx new file mode 100644 index 0000000..5127f4b --- /dev/null +++ b/src/features/rolling-paper/components/header/rolling-paper-header.jsx @@ -0,0 +1,148 @@ +import { useCallback, useEffect, useState } from "react"; +import styled from "styled-components"; +import Colors from "../../../../components/color/colors"; +import Toast from "../../../../components/toast/toast"; +import { useMedia } from "../../../../hooks/use-media"; +import { useToast } from "../../../../hooks/use-toast"; +import { shareRollingPaper } from "../../../../libs/kakao/kakao-service"; +import { media } from "../../../../utils/media"; +import { addReaction, getReactions } from "../../../reaction/api/reaction"; +import AddReactionPopover from "../../../reaction/components/add-reaction-popover"; +import ReceivedReactions from "../../../reaction/components/received-reactions"; +import DividedContainer from "./divided-container"; +import RollingPaperSenders from "./rolling-paper-senders"; +import RollingPaperSharePopover from "./rolling-paper-share-popover"; + +const RecipientName = styled.h2` + margin: 0; + font-size: 28px; + font-weight: 700; + line-height: 42px; + color: ${Colors.gray(800)}; + + ${media.mobile} { + font-size: 18px; + line-height: 28px; + } +`; + +const HeaderTrailing = styled.div` + display: flex; + gap: 8px; + align-items: center; +`; + +const RollingPaperHeaderContent = styled.div` + width: 100%; + max-width: 1200px; + height: 68px; + border-bottom: 1px solid #ededed; + display: flex; + justify-content: space-between; + align-items: center; + + ${media.mobile} { + height: 54px; + } +`; + +const StyledRollingPaperHeader = styled.div` + display: flex; + justify-content: center; + align-items: center; + + @media (max-width: 1248px) { + padding: 0 24px; + } + + ${media.mobile} { + padding: 0 16px; + flex-direction: column; + justify-content: flex-start; + align-items: flex-start; + } +`; + +function RollingPaperHeader({ + isEditing, + recipientId, + recipientName, + messages, +}) { + const { showsToast, setShowsToast } = useToast(); + const { isDesktop, isMobile } = useMedia(); + const [reactions, setReactions] = useState([]); + + const name = {`To. ${recipientName}`}; + + const updateReactions = useCallback( + () => + getReactions({ recipientId }) + .then(setReactions) + .catch((error) => { + // TODO: Error 처리 필요 + console.error(error); + }), + [recipientId] + ); + + const handleReactionSelect = async (emoji) => { + await addReaction({ recipientId, emoji }); + updateReactions(); + }; + + const handleShareKakao = () => { + shareRollingPaper({ + recipientId, + recipientName, + }); + }; + + const handleShareUrl = () => { + const url = window.location.href; + navigator.clipboard.writeText(url); + setShowsToast(true); + }; + + useEffect(() => { + updateReactions(); + }, [updateReactions]); + + return ( + + {isMobile && ( + {name} + )} + + {isMobile ||
{name}
} + + + {isDesktop && ( + message.profileImageURL)} + /> + )} + + + + {isEditing || ( + + )} + + + +
+ {showsToast && ( + setShowsToast(false)} + /> + )} +
+ ); +} + +export default RollingPaperHeader; diff --git a/src/features/rolling-paper/components/header/rolling-paper-reactions.jsx b/src/features/rolling-paper/components/header/rolling-paper-reactions.jsx new file mode 100644 index 0000000..ca74682 --- /dev/null +++ b/src/features/rolling-paper/components/header/rolling-paper-reactions.jsx @@ -0,0 +1,69 @@ +import styled from "styled-components"; +import arrowDownImage from "../../../../assets/ic-chevron-down.svg"; +import EmojiBadge from "../../../../components/badge/emoji-badge"; +import Popover from "../../../../components/popover/popover"; +import POPOVER_ALIGNMENT from "../../../../components/popover/popover-alignment"; +import { useMedia } from "../../../../hooks/use-media"; +import { media } from "../../../../utils/media"; + +const MoreButton = styled.button` + background: none; + border: none; + width: 36px; + height: 36px; + cursor: pointer; +`; + +const TopThreeReactions = styled.div` + display: flex; + gap: 8px; +`; + +const AllReactions = styled.div` + padding: 24px; + display: grid; + grid-template-columns: repeat(4, min-content); + row-gap: 10px; + column-gap: 8px; + + ${media.mobile} { + grid-template-columns: repeat(3, min-content); + } +`; + +const StyledRollingPaperReactions = styled.div` + display: flex; + gap: 2px; + align-items: center; +`; + +function RollingPaperReactions({ topReactions, reactions }) { + const { isMobile } = useMedia(); + + return ( + + + {topReactions.map(({ id, emoji, count }) => ( + + ))} + + + 열기 버튼 + + } + > + + {reactions.slice(0, isMobile ? 6 : 8).map(({ id, emoji, count }) => ( + + ))} + + + + ); +} + +export default RollingPaperReactions; diff --git a/src/features/rolling-paper/components/header/rolling-paper-sender-avatars.jsx b/src/features/rolling-paper/components/header/rolling-paper-sender-avatars.jsx new file mode 100644 index 0000000..2183b49 --- /dev/null +++ b/src/features/rolling-paper/components/header/rolling-paper-sender-avatars.jsx @@ -0,0 +1,79 @@ +import { useEffect, useRef, useState } from "react"; +import styled from "styled-components"; +import Avatar from "../../../../components/avatar/avatar"; +import AVATAR_SIZE from "../../../../components/avatar/avatar-size"; + +const METRICS = { + size: AVATAR_SIZE.extraSmall, + leftMargin: 16, + overlap: 12, +}; + +const Positioned = styled.div` + position: absolute; + top: 0; + bottom: 0; + left: ${({ $index }) => $index * METRICS.leftMargin}px; +`; + +const RestCount = styled(Positioned)` + height: ${METRICS.size}px; + padding: 0 6px; + border: 1px solid #e3e3e3; + border-radius: 14px; + font-size: 12px; + font-weight: 500; + line-height: 18px; + color: #484848; + display: flex; + justify-content: center; + align-items: center; + background-color: white; +`; + +function calculateWidth({ $numberOfAvatars, $restCountWidth }) { + const contentWidth = METRICS.size * $numberOfAvatars; + const overlapedWidth = METRICS.overlap * ($numberOfAvatars - 1); + const restCountWidth = Math.max(0, $restCountWidth - METRICS.overlap); + return contentWidth - overlapedWidth + restCountWidth; +} + +const StyledRollingPaperSenderAvatars = styled.div` + position: relative; + width: ${(props) => calculateWidth(props)}px; + height: ${METRICS.size}px; +`; + +function RollingPaperSenderAvatars({ profiles }) { + const countRef = useRef(); + const [restCountWidth, setRestCountWidth] = useState(METRICS.size); + const numberOfAvatars = Math.min(profiles.length, 3); + const restCount = profiles.length - numberOfAvatars; + const range = Array.from({ length: numberOfAvatars }, (e, i) => i); + + useEffect(() => { + setRestCountWidth(countRef.current?.getBoundingClientRect().width ?? 0); + }, [countRef]); + + return ( + + {range.map((index) => ( + + + + ))} + {restCount > 0 && ( + {`+${restCount}`} + )} + + ); +} + +export default RollingPaperSenderAvatars; diff --git a/src/features/rolling-paper/components/header/rolling-paper-senders.jsx b/src/features/rolling-paper/components/header/rolling-paper-senders.jsx new file mode 100644 index 0000000..4d6aab2 --- /dev/null +++ b/src/features/rolling-paper/components/header/rolling-paper-senders.jsx @@ -0,0 +1,32 @@ +import styled from "styled-components"; +import RollingPaperSenderAvatars from "./rolling-paper-sender-avatars"; + +const SenderCountDescription = styled.p` + margin: 0; + font-size: 18px; + font-weight: 400; + line-height: 27px; + + span { + font-weight: 700; + } +`; + +const StyledRollingPaperSenders = styled.div` + display: flex; + align-items: center; + gap: 12px; +`; + +function RollingPaperSenders({ profiles }) { + return ( + + + + {profiles.length}명이 작성했어요! + + + ); +} + +export default RollingPaperSenders; diff --git a/src/features/rolling-paper/components/header/rolling-paper-share-popover.jsx b/src/features/rolling-paper/components/header/rolling-paper-share-popover.jsx new file mode 100644 index 0000000..6163b61 --- /dev/null +++ b/src/features/rolling-paper/components/header/rolling-paper-share-popover.jsx @@ -0,0 +1,63 @@ +import styled from "styled-components"; +import shareImage from "../../../../assets/ic-share.svg"; +import { OutlinedButton } from "../../../../components/button/button"; +import BUTTON_SIZE from "../../../../components/button/button-size"; +import Colors from "../../../../components/color/colors"; +import Popover from "../../../../components/popover/popover"; +import POPOVER_ALIGNMENT from "../../../../components/popover/popover-alignment"; +import { media } from "../../../../utils/media"; + +const ShareOption = styled.li` + padding: 12px 16px; + font-size: 16px; + font-weight: 400; + line-height: 26px; + background-color: white; + cursor: pointer; + + &:hover { + background-color: ${Colors.gray(100)}; + } +`; + +const ShareOptions = styled.ul` + display: flex; + flex-direction: column; + padding: 10px 0; + background-color: white; + width: 140px; + list-style: none; + margin: 0; +`; + +function PopoverContent({ onShareKakao, onShareUrl }) { + return ( + + 카카오톡 공유 + URL 공유 + + ); +} + +const PopoverAction = styled(OutlinedButton)` + width: auto; + padding: 0 16px; + + ${media.mobile} { + padding: 0 8px; + } +`; + +function RollingPaperSharePopover({ onShareKakao, onShareUrl }) { + return ( + } + > + + + ); +} + +export default RollingPaperSharePopover; diff --git a/src/features/rolling-paper/components/rolling-paper-list.jsx b/src/features/rolling-paper/components/rolling-paper-list.jsx new file mode 100644 index 0000000..d273e32 --- /dev/null +++ b/src/features/rolling-paper/components/rolling-paper-list.jsx @@ -0,0 +1,371 @@ +import ArrowButton from "../../../components/button/arrow-button"; +import ARROW_BUTTON_DIRECTION from "../../../components/button/arrow-button-direction"; +import { media } from "../../../utils/media"; +import React, { useMemo } from "react"; +import styled, { css } from "styled-components"; +import Avatar from "../../../components/avatar/avatar"; +import AVATAR_SIZE from "../../../components/avatar/avatar-size"; +import CardBackground from "../../../components/image/card-background"; +import { useImageListLodeChecker } from "../../../hooks/use-image-loader"; + +const CardContainer = styled.div` + display: grid; + grid-template-columns: repeat(4, 275px); + gap: 20px; + width: fit-content; + font-family: Pretendard; + position: relative; + padding: 0; + + ${media.tablet} { + display: flex; + gap: 16px; + overflow-x: auto; + scroll-snap-type: x mandatory; + scroll-padding: 24px; + + scrollbar-width: none; + -ms-overflow-style: none; + + max-width: 1199px; + width: 100%; + padding: 0 24px; + + & > div { + flex: 0 0 275px; + scroll-snap-align: start; + } + } + + ${media.mobile} { + max-width: 767px; + width: 100%; + padding: 0 20px; + + & > div { + flex: 0 0 208px; + } + } +`; + +const CardItem = styled(CardBackground)` + width: 275px; + height: 260px; + border-radius: 16px; + text-align: left; + padding: 30px 24px 20px 24px; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0px 2px 12px 0px rgba(0, 0, 0, 0.08); + z-index: 0; + display: flex; + gap: 12px; + flex-direction: column; + position: relative; + overflow: hidden; + + justify-content: space-between; + + ${media.tablet} { + flex-shrink: 0; + scroll-snap-align: start; + } + + ${media.mobile} { + width: 208px; + height: 232px; + padding: 25px 15px 15px 15px; + gap: 8px; + } + + &::before { + content: ""; + position: absolute; + ${({ $backgroundImageURLForStyle, $backgroundColorForStyle }) => { + return $backgroundImageURLForStyle + ? "" + : polygonStyle[$backgroundColorForStyle]; + }} + } +`; + +const ellipseStyle = css` + width: 336px; + height: 169px; + background-color: ${({ $backgroundColorForStyle }) => + $backgroundColorForStyle === "purple" + ? "rgba(220, 185, 255, 0.4)" + : "rgba(155, 226, 130, 0.3)"}; + border-radius: 90.5px; + top: 124px; + left: 133px; + + ${media.mobile} { + left: 100.6px; + } +`; + +const roundedRectangleStyle = css` + width: 332px; + height: 318px; + border-radius: 51px; + background-color: #ffd382; + top: 124px; + left: 154px; + + ${media.mobile} { + left: 121.6px; + } +`; + +function getTriangleBackgroundImage() { + const svgString = ``; + const encodedSvg = encodeURIComponent(svgString); + return `url("data:image/svg+xml,${encodedSvg}")`; +} + +const roundedTriangleStyle = css` + width: 170px; + height: 200px; + background-image: ${getTriangleBackgroundImage}; + background-repeat: no-repeat; + background-position: center; + background-size: contain; + top: 108px; + left: 113px; + + ${media.mobile} { + left: 60.6px; + } +`; + +const polygonStyle = { + beige: roundedRectangleStyle, + purple: ellipseStyle, + green: ellipseStyle, + blue: roundedTriangleStyle, +}; + +const CardTitle = styled.h2` + margin: 0; + font-size: 24px; + font-weight: 700; + color: ${(props) => props.$fontColor || "black"}; + width: 225px; + + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + text-overflow: ellipsis; + + ${media.mobile} { + width: 175px; + font-size: 18px; + } +`; + +const ProfileContainer = styled.div` + display: flex; +`; + +const CardProfile = styled.div` + margin-left: ${({ $messageIndex }) => ($messageIndex === 0 ? "0" : "-12px")}; +`; + +const OverProfile = styled.div` + height: 28px; + width: 28px; + background-color: #ffffff; + border-radius: 50%; + + margin-left: -12px; + + display: flex; + justify-content: center; + align-items: center; + font-size: 12px; +`; + +const MessageCountText = styled.span` + color: ${(props) => props.$fontColor || "black"}; + z-index: 1; + em { + font-weight: 700; + font-style: normal; + } +`; + +const CardEmojiBox = styled.div` + ${(props) => + props.$haveEmoji && + ` + border-top: 1px solid rgba(0, 0, 0, 0.1); + `} + padding-top: 13px; + margin-top: auto; + + display: flex; + flex-wrap: wrap; + row-gap: 5px; + z-index: 2; + + ${media.mobile} { + padding-top: 10px; + } +`; + +const CardEmoji = styled.span` + background-color: rgba(0, 0, 0, 0.54); + border-radius: 32px; + color: #ffffff; + padding: 8px 12px; + margin-right: 5px; + + position: relative; + white-space: nowrap; + overflow: hidden; + + font-size: 16px; + font-weight: 400; + + transition: max-width 0.3s ease, z-index 0s; + + &:hover { + max-width: 200px; + z-index: 100; + position: relative; + } + + ${media.mobile} { + font-size: 14px; + padding: 8px 8px; + margin-right: 3px; + } +`; + +const HiddenCount = styled.span` + display: inline; + + .show-on-hover { + display: none; + } + + ${CardEmoji}:hover & { + .show-on-hover { + display: inline; + } + .hide-on-hover { + display: none; + } + } +`; + +const NextButtonWrapper = styled.div` + position: absolute; + right: -20px; + top: 50%; + transform: translateY(-50%); + z-index: 10; +`; + +const PreviewButtonWrapper = styled.div` + position: absolute; + left: -20px; + top: 50%; + transform: translateY(-50%); + z-index: 10; +`; + +function RollingPaperList({ cardData, totalPages, currentPage, onTurnCards }) { + const profileImages = useMemo( + () => + cardData.flatMap((card) => + card.recentMessages.slice(0, 3).map((msg) => ({ + id: msg.id, + backgroundImageURL: msg.profileImageURL, + })) + ), + [cardData] + ); + + const profileLoadStates = useImageListLodeChecker(profileImages); + + return ( + + {cardData.map((card) => ( + + + To. {card.name} + + + {card.recentMessages + .slice(0, 3) + .map((messageCard, messageIndex) => ( + + + + ))} + {card.messageCount > 3 && ( + + +{card.messageCount - 3} + + )} + + + {card.messageCount}명이 작성했어요! + + 0}> + {card.topReactions.map((emoji, index) => { + const countLength = emoji.count.toString().length; + const isLongCount = countLength > 2; + + return ( + + {isLongCount ? ( + + {emoji.emoji} + {emoji.count} + + ) : ( + `${emoji.emoji} ${emoji.count}` + )} + + ); + })} + + + ))} + {currentPage > 0 && ( + onTurnCards("preview")}> + + + )} + {currentPage < totalPages - 1 && ( + onTurnCards("next")}> + + + )} + + ); +} + +export default RollingPaperList; diff --git a/src/hooks/use-dropdown.jsx b/src/hooks/use-dropdown.jsx new file mode 100644 index 0000000..051dfe6 --- /dev/null +++ b/src/hooks/use-dropdown.jsx @@ -0,0 +1,74 @@ +import { useEffect, useRef, useState } from "react"; +import { usePortal } from "./use-portal"; + +const DEFAULT_RECT = { x: 0, y: 0, width: 0 }; + +function makeRect({ x, y, width }) { + return { + origin: { x, y }, + size: { width }, + }; +} + +function calculateDropdownRect(target) { + if (!target) { + return DEFAULT_RECT; + } + + const targetRect = target.getBoundingClientRect(); + const dropdownRect = makeRect({ + x: targetRect.left, + y: targetRect.bottom + 8, + width: targetRect.width, + }); + + return dropdownRect; +} + +function useDropdown({ id, type }) { + const key = `${type}_${id}`; + const { isOpen, setIsOpen } = usePortal({ key }); + const [dropdownRect, setDropdownRect] = useState(DEFAULT_RECT); + + const targetRef = useRef(); + + const updateDropdownLayout = (target) => { + const rect = calculateDropdownRect(target); + setDropdownRect(rect); + }; + + const handleTargetClick = (shows) => { + updateDropdownLayout(targetRef.current); + setIsOpen(shows); + }; + + useEffect(() => { + if (!isOpen) return; + + function handleWindowResize() { + updateDropdownLayout(targetRef.current); + } + + function handleWindowScroll() { + updateDropdownLayout(targetRef.current); + } + + window.addEventListener("resize", handleWindowResize); + window.addEventListener("scroll", handleWindowScroll); + + return () => { + window.removeEventListener("resize", handleWindowResize); + window.removeEventListener("scroll", handleWindowScroll); + }; + }, [isOpen, targetRef]); + + return { + targetRef, + dropdownRect, + showsDropdown: isOpen, + setShowsDropdown: setIsOpen, + handleTargetClick, + }; +} + +export { useDropdown }; diff --git a/src/hooks/use-image-loader.jsx b/src/hooks/use-image-loader.jsx new file mode 100644 index 0000000..8a58963 --- /dev/null +++ b/src/hooks/use-image-loader.jsx @@ -0,0 +1,67 @@ +import { useState, useEffect } from "react"; + +function useImageLodeChecker(imageURL, noNeedToLoad = false) { + const [isLode, setIsLode] = useState(!imageURL || noNeedToLoad); + + useEffect(() => { + if (noNeedToLoad || !imageURL) return; + const img = new Image(); + img.src = imageURL; + + const handleLoad = () => setIsLode(true); + const handleError = () => setIsLode(false); + + img.addEventListener("load", handleLoad); + img.addEventListener("error", handleError); + + return () => { + img.removeEventListener("load", handleLoad); + img.removeEventListener("error", handleError); + }; + }, [imageURL, noNeedToLoad]); + + return isLode; +} + +function useImageListLodeChecker(imageList = []) { + const [imageLoadStates, setImageLoadStates] = useState({}); + + useEffect(() => { + if (!imageList.length) return; + + setImageLoadStates((prev) => { + const nextStates = { ...prev }; + imageList.forEach(({ id }) => { + if (nextStates[id] === undefined) { + nextStates[id] = false; + } + }); + return nextStates; + }); + + imageList.forEach(({ id, backgroundImageURL }) => { + setImageLoadStates((prev) => { + if (prev[id]) return prev; + + if (!backgroundImageURL) { + return { ...prev, [id]: false }; + } + + const img = new Image(); + img.src = backgroundImageURL; + img.onload = () => { + setImageLoadStates((p) => ({ ...p, [id]: true })); + }; + img.onerror = () => { + setImageLoadStates((p) => ({ ...p, [id]: false })); + }; + + return prev; + }); + }); + }, [imageList]); + + return imageLoadStates; +} + +export { useImageLodeChecker, useImageListLodeChecker }; diff --git a/src/hooks/use-intersection-observer.jsx b/src/hooks/use-intersection-observer.jsx new file mode 100644 index 0000000..37e8ddb --- /dev/null +++ b/src/hooks/use-intersection-observer.jsx @@ -0,0 +1,19 @@ +import { useEffect } from "react"; + +function useIntersectionObserver(targetRef, callback) { + useEffect(() => { + const observer = new IntersectionObserver((entries) => { + entries.forEach(callback); + }); + + if (targetRef) { + observer.observe(targetRef.current); + } + + return () => { + observer.disconnect(); + }; + }, [targetRef, callback]); +} + +export { useIntersectionObserver }; diff --git a/src/hooks/use-media.jsx b/src/hooks/use-media.jsx new file mode 100644 index 0000000..efa2cfc --- /dev/null +++ b/src/hooks/use-media.jsx @@ -0,0 +1,65 @@ +import { useEffect, useRef, useState } from "react"; + +const mediaQueryString = { + desktop: "(min-width: 1200px)", + tablet: "(min-width: 768px) and (max-width: 1199px)", + mobile: "(max-width: 767px)", +}; + +function useMedia() { + const desktop = useRef(matchMedia(mediaQueryString.desktop)).current; + const tablet = useRef(matchMedia(mediaQueryString.tablet)).current; + const mobile = useRef(matchMedia(mediaQueryString.mobile)).current; + + const [matches, setMatches] = useState({ + isDesktop: desktop.matches, + isTablet: tablet.matches, + isMobile: mobile.matches, + }); + + useEffect(() => { + const handleDesktopMatch = (event) => { + const matches = event.matches; + if (!matches) return; + setMatches({ + isDesktop: matches, + isTablet: false, + isMobile: false, + }); + }; + + const handleTabletMatch = (event) => { + const matches = event.matches; + if (!matches) return; + setMatches({ + isDesktop: false, + isTablet: matches, + isMobile: false, + }); + }; + + const handleMobileMatch = (event) => { + const matches = event.matches; + if (!matches) return; + setMatches({ + isDesktop: false, + isTablet: false, + isMobile: matches, + }); + }; + + desktop.addEventListener("change", handleDesktopMatch); + tablet.addEventListener("change", handleTabletMatch); + mobile.addEventListener("change", handleMobileMatch); + + return () => { + desktop.removeEventListener("change", handleDesktopMatch); + tablet.removeEventListener("change", handleTabletMatch); + mobile.removeEventListener("change", handleMobileMatch); + }; + }, [desktop, tablet, mobile]); + + return matches; +} + +export { useMedia }; diff --git a/src/hooks/use-modal-dialog.jsx b/src/hooks/use-modal-dialog.jsx new file mode 100644 index 0000000..5bde450 --- /dev/null +++ b/src/hooks/use-modal-dialog.jsx @@ -0,0 +1,41 @@ +import { useState } from "react"; +import { useModal } from "./use-modal"; + +function useModalDialog() { + const { showsModal, setShowsModal } = useModal({ + key: "delete-modal", + }); + const [title, setTitle] = useState(""); + const [content, setContent] = useState(""); + const [primaryAction, setPrimaryAction] = useState(null); + + const openDialog = ({ title, content, primaryAction }) => { + setShowsModal(true); + setTitle(title); + setContent(content); + setPrimaryAction(() => primaryAction); + }; + + const closeDialog = () => { + setShowsModal(false); + setTitle(""); + setContent(""); + setPrimaryAction(null); + }; + + const onPrimaryAction = () => { + primaryAction(); + closeDialog(); + }; + + return { + showsDialog: showsModal, + dialogTitle: title, + dialogContent: content, + openDialog, + closeDialog, + onPrimaryAction, + }; +} + +export { useModalDialog }; diff --git a/src/hooks/use-modal.jsx b/src/hooks/use-modal.jsx new file mode 100644 index 0000000..964b050 --- /dev/null +++ b/src/hooks/use-modal.jsx @@ -0,0 +1,8 @@ +import { usePortal } from "./use-portal"; + +function useModal({ key }) { + const { isOpen, setIsOpen } = usePortal({ key }); + return { showsModal: isOpen, setShowsModal: setIsOpen }; +} + +export { useModal }; diff --git a/src/hooks/use-popover.jsx b/src/hooks/use-popover.jsx new file mode 100644 index 0000000..ffe8ebb --- /dev/null +++ b/src/hooks/use-popover.jsx @@ -0,0 +1,74 @@ +import { useEffect, useRef, useState } from "react"; +import POPOVER_ALIGNMENT from "../components/popover/popover-alignment"; +import { usePortal } from "./use-portal"; + +const DEFAULT_POSITION = { top: 0, left: 0, right: 0 }; + +function calculatePopoverPosition(target, alignment) { + if (!target) { + return DEFAULT_POSITION; + } + + const targetRect = target.getBoundingClientRect(); + const position = { + top: targetRect.bottom + 8, + }; + + switch (alignment) { + case POPOVER_ALIGNMENT.right: + position.right = window.innerWidth - targetRect.right - 16; // 오른쪽 정렬 시 -16px 보정 + break; + default: + position.left = targetRect.left; + break; + } + + return position; +} + +function usePopover({ id, type, alignment }) { + const key = `${type}_${id}`; + const { isOpen, setIsOpen } = usePortal({ key }); + const [position, setPopoverPosition] = useState(DEFAULT_POSITION); + const targetRef = useRef(); + + const updatePopoverPosition = (target, alignment) => { + const position = calculatePopoverPosition(target, alignment); + setPopoverPosition(position); + }; + + const handleTargetClick = (shows) => { + updatePopoverPosition(targetRef.current, alignment); + setIsOpen(shows); + }; + + useEffect(() => { + if (!isOpen) return; + + function handleWindowResize() { + updatePopoverPosition(targetRef.current, alignment); + } + + function handleWindowScroll() { + updatePopoverPosition(targetRef.current, alignment); + } + + window.addEventListener("resize", handleWindowResize); + window.addEventListener("scroll", handleWindowScroll); + + return () => { + window.removeEventListener("resize", handleWindowResize); + window.removeEventListener("scroll", handleWindowScroll); + }; + }, [isOpen, targetRef, alignment]); + + return { + targetRef, + position, + showsPopover: isOpen, + setShowsPopover: setIsOpen, + handleTargetClick, + }; +} + +export { usePopover }; diff --git a/src/hooks/use-portal.jsx b/src/hooks/use-portal.jsx new file mode 100644 index 0000000..767fe0c --- /dev/null +++ b/src/hooks/use-portal.jsx @@ -0,0 +1,15 @@ +import { useContext } from "react"; +import PortalContext from "../components/portal/portal-context"; + +function usePortal({ key }) { + const { portalState, setPortalState } = useContext(PortalContext); + const isOpen = portalState[key] ?? false; + + const setIsOpen = (value) => { + setPortalState((prev) => ({ ...prev, [key]: value })); + }; + + return { isOpen, setIsOpen }; +} + +export { usePortal }; diff --git a/src/hooks/use-toast.jsx b/src/hooks/use-toast.jsx new file mode 100644 index 0000000..8b461b6 --- /dev/null +++ b/src/hooks/use-toast.jsx @@ -0,0 +1,21 @@ +import { useEffect, useState } from "react"; + +function useToast(timeout = 2500) { + const [showsToast, setShowsToast] = useState(false); + + useEffect(() => { + if (!showsToast) return; + + const id = setTimeout(() => { + setShowsToast(false); + }, timeout); + + return () => { + clearTimeout(id); + }; + }, [showsToast, setShowsToast, timeout]); + + return { showsToast, setShowsToast }; +} + +export { useToast }; diff --git a/src/layouts/content-layout.jsx b/src/layouts/content-layout.jsx new file mode 100644 index 0000000..1c42e54 --- /dev/null +++ b/src/layouts/content-layout.jsx @@ -0,0 +1,28 @@ +import styled from "styled-components"; +import Header from "../components/header/header"; + +const LayoutHeader = styled(Header)` + flex-shrink: 0; +`; + +const Main = styled.main` + flex-grow: 1; + min-height: 100vh - 64px; +`; + +const StyledContentLayout = styled.div` + display: flex; + flex-direction: column; + height: 100vh; +`; + +function ContentLayout({ children }) { + return ( + + +
{children}
+
+ ); +} + +export default ContentLayout; diff --git a/src/layouts/onboarding-layout.jsx b/src/layouts/onboarding-layout.jsx new file mode 100644 index 0000000..beab0ed --- /dev/null +++ b/src/layouts/onboarding-layout.jsx @@ -0,0 +1,25 @@ +import { useNavigate } from "react-router"; +import { OutlinedButton } from "../components/button/button"; +import BUTTON_SIZE from "../components/button/button-size"; +import Header from "../components/header/header"; + +function OnboardingLayout({ children }) { + const navigate = useNavigate(); + + const handlePostCreate = () => navigate("/post"); + + return ( + <> +
+ +
+
{children}
+ + ); +} + +export default OnboardingLayout; diff --git a/src/libs/kakao/kakao-service.js b/src/libs/kakao/kakao-service.js new file mode 100644 index 0000000..b782651 --- /dev/null +++ b/src/libs/kakao/kakao-service.js @@ -0,0 +1,22 @@ +function initKakaoSDK() { + window.Kakao.init(import.meta.env.VITE_KAKAO_JAVASCRIPT_KEY); + window.Kakao.isInitialized(); +} + +function shareRollingPaper({ recipientId, recipientName }) { + if (!recipientId || !recipientName) return; + + const appIdString = import.meta.env.VITE_KAKAO_MESSAGE_TEMPLATE_ID; + const appId = Number(appIdString); + if (!appId) return; + + window.Kakao.Share.sendCustom({ + templateId: appId, + templateArgs: { + recipientId, + recipientName, + }, + }); +} + +export { initKakaoSDK, shareRollingPaper }; diff --git a/src/main.jsx b/src/main.jsx index 6b87c5e..ec16707 100644 --- a/src/main.jsx +++ b/src/main.jsx @@ -1,7 +1,9 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; import App from "./app"; -import "./styles/global.css"; +import { initKakaoSDK } from "./libs/kakao/kakao-service"; + +initKakaoSDK(); const root = createRoot(document.getElementById("root")); diff --git a/src/pages/create-post-page.jsx b/src/pages/create-post-page.jsx new file mode 100644 index 0000000..e78bcc7 --- /dev/null +++ b/src/pages/create-post-page.jsx @@ -0,0 +1,147 @@ +import { useState } from "react"; +import { useNavigate } from "react-router"; +import styled from "styled-components"; +import { PrimaryButton } from "../components/button/button"; +import BUTTON_SIZE from "../components/button/button-size"; +import ToggleButton from "../components/button/toggle-button"; +import BackgroundSelect from "../components/option/background-select"; +import TextField from "../components/text-field/text-field"; +import TEXT_FIELD_TYPE from "../components/text-field/text-field-type"; +import { media } from "../utils/media"; + +const PostContainer = styled.div` + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + margin: 0 auto; + + ${media.tablet} { + width: 100%; + padding: 0 24px; + display: flex; + } + + ${media.mobile} { + width: 100%; + padding: 0 20px; + } +`; + +const Wrapper = styled.div` + padding-top: 50px; + width: 100%; + max-width: 720px; +`; + +const PostTitle = styled.h2` + font-weight: 700; +`; + +const PostSummary = styled.p` + font-weight: 400; + color: Colors.gray(500); +`; + +const ToggleButtonWrapper = styled.div` + width: 100%; + display: flex; +`; + +const ButtonWrapper = styled.div` + padding-top: 50px; + padding-bottom: 150px; + width: 100%; + max-width: 720px; +`; + +const CreateButton = styled(PrimaryButton)` + width: 100%; +`; + +const TOGGLE_OPTIONS = ["컬러", "이미지"]; + +const SELECT_TYPE = { + 컬러: "color", + 이미지: "image", +}; + +function CreatePostPage() { + const [name, setName] = useState(""); + const [nameError, setNameError] = useState(""); + const [backgroundType, setBackgroundType] = useState(TOGGLE_OPTIONS[0]); + const [selected, setSelected] = useState(0); + const navigate = useNavigate(); + + const handleChange = (e) => { + const value = e.target.value; + setName(value); + setNameError(""); // 값 입력 중 에러 없애기 + }; + + const trimmed = name.trim(); + + const handleBlur = () => { + setName(trimmed); + if (trimmed === "") { + setNameError("이름을 입력해 주세요"); + } + }; + + const handleCreate = () => { + const randomID = Math.floor(Math.random() * 10000); + navigate(`/post/${randomID}`); + }; + + const canCreate = trimmed !== ""; + + const handleToggleChange = (option) => { + setBackgroundType(option); + setSelected(0); + }; + + return ( + + + To. + + + + 배경화면을 선택해 주세요. + + 컬러를 선택하거나, 이미지를 선택할 수 있습니다. + + + + + + + + + + + ); +} + +export default CreatePostPage; diff --git a/src/pages/main-page.jsx b/src/pages/main-page.jsx new file mode 100644 index 0000000..a1d2cba --- /dev/null +++ b/src/pages/main-page.jsx @@ -0,0 +1,5 @@ +function MainPage() { + return

Main Page

; +} + +export default MainPage; diff --git a/src/pages/messages-page.jsx b/src/pages/messages-page.jsx new file mode 100644 index 0000000..41030f0 --- /dev/null +++ b/src/pages/messages-page.jsx @@ -0,0 +1,265 @@ +import { useEffect, useMemo, useState } from "react"; +import { useLocation, useNavigate, useParams } from "react-router"; +import styled from "styled-components"; +import { + DangerousButton, + OutlinedButton, + PrimaryButton, +} from "../components/button/button"; +import BUTTON_SIZE from "../components/button/button-size"; +import BACKGROUND_COLOR from "../components/color/background-color"; +import Modal from "../components/modal/modal"; +import ModalDialog from "../components/modal/modal-dialog"; +import { + deleteMessage, + getMessages, + getNextPageMessages, +} from "../features/message/api/messages"; +import MessagesGrid from "../features/message/components/messages-grid"; +import { + deleteRecipient, + getRecipient, +} from "../features/rolling-paper/api/recipients"; +import RollingPaperHeader from "../features/rolling-paper/components/header/rolling-paper-header"; +import { useMedia } from "../hooks/use-media"; +import { useModalDialog } from "../hooks/use-modal-dialog"; +import ContentLayout from "../layouts/content-layout"; +import { media } from "../utils/media"; + +const backgroundStyle = ({ $backgroundImageUrl, $backgroundColor }) => { + if (!$backgroundImageUrl) { + return `background-color: ${$backgroundColor}`; + } + + return ` + background: url('${$backgroundImageUrl}'); + background-size: contain; + `; +}; + +const Content = styled.div` + ${backgroundStyle}; + height: calc(100% - 68px); + + & > div { + display: flex; + flex-direction: column; + gap: 12px; + width: 1200px; + margin: 0 auto; + padding: 112px 0 246px; + + @media (max-width: 1248px) { + width: 100%; + padding: 93px 24px 91px; + } + + ${media.mobile} { + padding: 24px 20px 38px; + } + } +`; + +const ButtonContainer = styled.div` + align-self: flex-end; + display: flex; + gap: 16px; +`; + +function ViewerButtons({ onEdit }) { + return ( + + + + ); +} + +function EditingButtons({ onDelete, onDone }) { + return ( + + + + + ); +} + +function MessagesPage() { + const { isMobile } = useMedia(); + const [recipient, setRecipient] = useState(); + const [messages, setMessages] = useState([]); + const location = useLocation(); + const navigate = useNavigate(); + const { id } = useParams(); + const { + showsDialog, + dialogTitle, + dialogContent, + openDialog, + closeDialog, + onPrimaryAction, + } = useModalDialog(); + + const isEditing = useMemo( + () => location.pathname.includes("edit"), + [location] + ); + + const handleEditClick = () => { + navigate("edit"); + }; + + const handleRollingPaperDelete = () => { + openDialog({ + title: `${recipient.name} 님의 롤링 페이퍼를 삭제할까요?`, + content: "삭제한 롤링 페이퍼는 복원할 수 없어요.", + primaryAction: async () => { + try { + await deleteRecipient({ id: recipient.id }); + navigate(`/list`); + } catch (error) { + // TODO: Error 처리 + console.log(error); + } + }, + }); + }; + + const handleEditDone = () => { + navigate(-1); + }; + + const handleMessageDelete = (message) => { + openDialog({ + title: `${message.sender} 님의 메시지를 삭제할까요?`, + content: "삭제한 메시지는 복원할 수 없어요.", + primaryAction: async () => { + try { + await deleteMessage({ id: message.id }); + setMessages((prev) => + prev.filter((prevMessage) => prevMessage.id !== message.id) + ); + } catch (error) { + // TODO: Error 처리 + console.log(error); + } + }, + }); + }; + + const handleDelete = () => { + onPrimaryAction(); + }; + + const handleDeleteCancel = () => { + closeDialog(); + }; + + const handleInfiniteScroll = async () => { + const messages = await getNextPageMessages(); + if (!messages) return; + + setMessages((prev) => { + const newMessages = [...prev]; + + for (const message of messages) { + if (newMessages.find((value) => value.id === message.id)) continue; + newMessages.push(message); + } + + return newMessages; + }); + }; + + useEffect(() => { + async function fetchRollingPaper() { + try { + const [recipient, messages] = await Promise.all([ + getRecipient({ id }), + getMessages({ recipientId: id }), + ]); + + setRecipient(recipient); + setMessages(messages); + } catch (error) { + // TODO: Error 처리 필요 + console.error(error); + } + } + + fetchRollingPaper(); + }, [id]); + + const content = ( + <> + {recipient && ( + <> + + +
+ {isEditing ? ( + + ) : ( + + )} + +
+
+ + )} + + ); + + return isMobile ? ( + content + ) : ( + + {content} + + + + + + } + /> + + + ); +} + +export default MessagesPage; diff --git a/src/pages/rolling-paper-list-page.jsx b/src/pages/rolling-paper-list-page.jsx new file mode 100644 index 0000000..425f9cc --- /dev/null +++ b/src/pages/rolling-paper-list-page.jsx @@ -0,0 +1,191 @@ +import { PrimaryButton } from "../components/button/button"; +import BUTTON_SIZE from "../components/button/button-size"; +import React, { useEffect, useState, useMemo } from "react"; +import { useNavigate } from "react-router"; +import styled from "styled-components"; +import RollingPaperList from "../features/rolling-paper/components/rolling-paper-list"; +import { media } from "../utils/media"; +import { useMedia } from "../hooks/use-media"; +import { apiClient } from "../api/client"; + +const TopContainer = styled.div` + text-align: center; + margin-top: 50px; + min-height: calc(100vh - 64px); + display: flex; + flex-direction: column; +`; + +const CardBox = styled.article` + ${media.tablet} { + flex: 1; + } +`; + +const CardSection = styled.section` + justify-self: center; + + ${media.tablet} { + width: 100%; + } +`; + +const CardTitle = styled.h2` + text-align: left; + font-size: 24px; + font-weight: 700; + + ${media.tablet} { + margin-left: 24px; + } + + ${media.mobile} { + margin-left: 20px; + font-size: 20px; + font-weight: 600; + } +`; + +const ButtonFooter = styled.footer` + position: relative; +`; + +const MakingButton = styled(PrimaryButton)` + margin-top: 64px; + font-weight: 400; + padding: 14px 60px; + + ${media.tablet} { + justify-self: anchor-center; + width: calc(100% - 48px); + padding: 14px 20px; + margin: 24px; + } +`; + +const cache = {}; +function getCachedImage(url) { + if (!cache[url]) { + cache[url] = new Image(); + cache[url].src = url; + } + return cache[url].src; +} + +function ShowMessageList() { + const navigate = useNavigate(); + + const [recipientsData, setRecipientsData] = useState([]); + const [popularDataList, setPopularDataList] = useState([]); + const [recentDataList, setRecentDataList] = useState([]); + const [popularCurrentPage, setPopularCurrentPage] = useState(0); + const [recentCurrentPage, setRecentCurrentPage] = useState(0); + const [cardCount, setCardCount] = useState(4); + const { isDesktop } = useMedia(); + + useEffect(() => { + isDesktop ? setCardCount(4) : setCardCount(null); + }, [isDesktop]); + + const handleMakingButton = () => { + navigate("/post"); + }; + + useEffect(() => { + apiClient + .get("/recipients/") + .then((res) => { + setRecipientsData(res.data.results); + }) + .catch((err) => { + console.error("오류:", err); + }); + }, []); + + useEffect(() => { + recipientsData.forEach((data) => { + getCachedImage(data.imageURL); + }); + }, [recipientsData]); + + useEffect(() => { + const sortedPopular = recipientsData + .slice() + .sort((a, b) => b.messageCount - a.messageCount); + setPopularDataList(sortedPopular); + + const sortedRecent = recipientsData + .slice() + .sort((a, b) => new Date(b.createdAt) - new Date(a.createdAt)); + setRecentDataList(sortedRecent); + }, [recipientsData]); + + const totalPages = cardCount + ? Math.ceil(recipientsData.length / cardCount) + : 1; + + const popularShowCards = useMemo(() => { + if (!cardCount) return popularDataList; + const start = popularCurrentPage * cardCount; + return popularDataList.slice(start, start + cardCount); + }, [popularDataList, popularCurrentPage, cardCount]); + + const recentShowCards = useMemo(() => { + if (!cardCount) return recentDataList; + const start = recentCurrentPage * cardCount; + return recentDataList.slice(start, start + cardCount); + }, [recentDataList, recentCurrentPage, cardCount]); + + const handleTurnCards = (direction, mode) => { + const cardPageMap = { + popular: { current: popularCurrentPage, setter: setPopularCurrentPage }, + recent: { current: recentCurrentPage, setter: setRecentCurrentPage }, + }; + + const cardPageValue = cardPageMap[mode]; + const { current, setter } = cardPageValue; + const total = totalPages; + + const additionalPageIndex = direction === "next" ? 1 : -1; + const newPageIndex = current + additionalPageIndex; + + if (newPageIndex >= 0 && newPageIndex < total) { + setter(newPageIndex); + } + }; + + return ( + + + + 인기 롤링 페이퍼 🔥 + handleTurnCards(direction, "popular")} + /> + + + + 최근에 만든 롤링 페이퍼 ⭐ + handleTurnCards(direction, "recent")} + /> + + + + + + + ); +} + +export default ShowMessageList; diff --git a/src/pages/send-message-page.jsx b/src/pages/send-message-page.jsx new file mode 100644 index 0000000..0aa0275 --- /dev/null +++ b/src/pages/send-message-page.jsx @@ -0,0 +1,250 @@ +import { useState } from "react"; +import TextField from "../components/text-field/text-field"; +import TEXT_FIELD_TYPE from "../components/text-field/text-field-type"; +import Colors from "../components/color/colors"; +import styled from "styled-components"; +import Avatar from "../components/avatar/avatar"; +import AVATAR_SIZE from "../components/avatar/avatar-size"; +import BUTTON_SIZE from "../components/button/button-size"; +import { useNavigate } from "react-router"; +import { PrimaryButton } from "../components/button/button"; +import TextEditor from "../components/text-editor/text-editor"; +import { media } from "../utils/media"; + +const SendContainer = styled.div` + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + margin: 0 auto; + + ${media.tablet} { + width: 100%; + padding: 0 24px; + display: flex; + } + + ${media.mobile} { + width: 100%; + padding: 0 20px; + } +`; + +const Wrapper = styled.div` + padding-top: 50px; + width: 100%; + max-width: 720px; +`; + +const SendTitle = styled.h2` + font-weight: 700; +`; + +const AvatarWrapper = styled.div` + display: flex; + gap: 32px; +`; + +const AvatarOptionWrapper = styled.div` + display: flex; + flex-direction: column; + justify-content: center; + width: 100%; +`; + +const AvatarDescription = styled.p` + font-weight: 400; + color: ${Colors.gray(500)}; +`; + +const AvatarOption = styled.div` + display: flex; + justify-content: space-between; + + ${media.mobile} { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 5px; + width: 50%; + } +`; + +const AvatarPreview = styled.div` + cursor: pointer; +`; + +const DefaultAvatar = styled.div` + cursor: pointer; + padding-top: 20px; + box-shadow: ${({ $isSelected }) => + $isSelected ? `0 0 0 2px ${Colors.purple(600)}` : "none"}; + border-radius: 50%; +`; + +const ButtonWrapper = styled.div` + padding-top: 50px; + padding-bottom: 150px; + width: 100%; + max-width: 720px; +`; + +const CreateButton = styled(PrimaryButton)` + width: 100%; +`; + +const TextFieldStyle = styled(TextField)` + width: 50%; +`; + +function SendMessagePage() { + const [name, setName] = useState(""); + const [nameError, setNameError] = useState(""); + const [relationOption, setRelationOption] = useState("지인"); + const [selectedAvatar, setSelectedAvatar] = useState(null); + const [content, setContent] = useState("I am your reach text editor."); + const [selectedFont, setSelectedFont] = useState({ + title: "Noto Sans", + fontFamily: "Noto Sans", + }); + const navigate = useNavigate(); + + const handleChange = (e) => { + const value = e.target.value; + setName(value); + + // 값 입력 중 에러 없애기 + if (nameError) { + setNameError(""); + } + }; + + const trimmed = name.trim(); + + const handleBlur = () => { + setName(trimmed); + if (trimmed === "") { + setNameError("이름을 입력해 주세요"); + } + }; + + const avatarList = [ + "https://learn-codeit-kr-static.s3.ap-northeast-2.amazonaws.com/sprint-proj-image/default_avatar.png", + "https://picsum.photos/id/522/100/100", + "https://picsum.photos/id/547/100/100", + "https://picsum.photos/id/268/100/100", + "https://picsum.photos/id/1082/100/100", + "https://picsum.photos/id/571/100/100", + "https://picsum.photos/id/494/100/100", + "https://picsum.photos/id/859/100/100", + "https://picsum.photos/id/437/100/100", + "https://picsum.photos/id/1064/100/100", + ]; + + const handleCreate = () => { + const randomID = Math.floor(Math.random() * 10000); + navigate(`/post/${randomID}`); + }; + + const canCreate = + trimmed !== "" && content.replace(/<[^>]+>/g, "").trim() !== ""; + // 정규식 유효성 검사로 html 태그 찾기("<"로 시작해서 ">"로 끝나는 문자 중 > 를 제외한(^ not) 모든 문자 제외) + + const fontOptions = [ + { title: "Noto Sans", fontFamily: "Noto Sans" }, + { title: "Pretendard", fontFamily: "Pretendard" }, + { title: "나눔고딕", fontFamily: "Nanum Ghthic" }, + { title: "나눔손글씨 펜체", fontFamily: "Nanum Pen Script" }, + ]; + + return ( + + + From. + + + + 프로필 이미지 + + + + + 프로필 이미지를 선택해 주세요! + + + {avatarList.map((url, index) => ( + setSelectedAvatar(url)} + > + + + ))} + + + + + + 상대와의 관계 + + + + 내용을 입력해 주세요 +
+ setContent(value)} + font={selectedFont.fontFamily} + /> +
+
+ + 폰트 선택 + { + const selected = fontOptions.find( + (fontOption) => fontOption.title === selectedFontOption + ); + setSelectedFont(selected); + }} + style={{ fontFamily: selectedFont.fontFamily }} + /> + + + + +
+ ); +} + +export default SendMessagePage; diff --git a/src/styles/colors.css b/src/styles/colors.css new file mode 100644 index 0000000..91e7602 --- /dev/null +++ b/src/styles/colors.css @@ -0,0 +1,56 @@ +:root { + /* Palette */ + + --color-purple-100: #f8f0ff; + --color-purple-200: #ecd9ff; + --color-purple-300: #dcb9ff; + --color-purple-400: #c894fd; + --color-purple-500: #ab57ff; + --color-purple-600: #9935ff; + --color-purple-700: #861dee; + --color-purple-800: #6e0ad1; + --color-purple-900: #5603a7; + + --color-beige-100: #fff0d6; + --color-beige-200: #ffe2ad; + --color-beige-300: #ffc583; + --color-beige-400: #ffae65; + --color-beige-500: #ff8832; + + --color-blue-100: #e2f5ff; + --color-blue-200: #b1e4ff; + --color-blue-300: #7cd2ff; + --color-blue-400: #34b9ff; + --color-blue-500: #00a2fe; + + --color-green-100: #e4fbdc; + --color-green-200: #d0f5c3; + --color-green-300: #9be282; + --color-green-400: #60cf37; + --color-green-500: #2ba600; + + --color-gray-100: #f6f6f6; + --color-gray-200: #eeeeee; + --color-gray-300: #cccccc; + --color-gray-400: #999999; + --color-gray-500: #555555; + --color-gray-600: #4a4a4a; + --color-gray-700: #3a3a3a; + --color-gray-800: #2b2b2b; + --color-gray-900: #181818; + + --color-red-100: #fef2f2; + --color-red-200: #fecaca; + --color-red-300: #fca5a5; + --color-red-400: #f87171; + --color-red-500: #dc3a3a; + --color-red-600: #dc2626; + --color-red-700: #b91c1c; + --color-red-800: #991b1b; + --color-red-900: #7f1d1d; + + /* Semantics */ + + --color-error: var(--color-red-500); + --color-surface: #f6f8ff; +} diff --git a/src/styles/global.css b/src/styles/global.css index 81e6a17..dd123e7 100644 --- a/src/styles/global.css +++ b/src/styles/global.css @@ -4,6 +4,8 @@ body { margin: 0; - font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, - Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif; + font-family: "Pretendard Variable", Pretendard, -apple-system, + BlinkMacSystemFont, system-ui, Roboto, "Helvetica Neue", "Segoe UI", + "Apple SD Gothic Neo", "Noto Sans KR", "Malgun Gothic", "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; } diff --git a/src/tests/test-api-page.jsx b/src/tests/test-api-page.jsx new file mode 100644 index 0000000..ef9c366 --- /dev/null +++ b/src/tests/test-api-page.jsx @@ -0,0 +1,290 @@ +import { useCallback, useEffect, useState } from "react"; +import styled from "styled-components"; +import { DangerousButton, PrimaryButton } from "../components/button/button"; +import BUTTON_SIZE from "../components/button/button-size"; +import Colors from "../components/color/colors"; +import { + createMessages, + createReactions, + createRecipients, + deleteAllMessages, + deleteAllRecipients, + getAllMessages, + getAllReactions, + getAllRecipients, +} from "./test-api"; + +const Page = styled.div` + margin: 24px; +`; + +const Row = styled.div` + display: flex; + gap: 16px; +`; + +const Column = styled.div` + display: flex; + flex-direction: column; + gap: 12px; +`; + +const Table = styled.table` + border: 1px solid black; + border-collapse: collapse; + text-align: center; +`; + +const TableHeader = styled.thead` + font-weight: 700; + background-color: ${Colors.gray(100)}; +`; + +const TableRow = styled.tr``; + +const TableBody = styled.tbody` + & > tr:hover { + cursor: pointer; + background-color: ${Colors.gray(100)}; + } +`; + +const TableData = styled.td` + border: 1px solid black; + border-collapse: collapse; + padding: 4px 12px; +`; + +function RecipientsTable({ recipients, onClick }) { + return ( + + + + id + name + backgroundColor + backgroundImageURL + messageCount + reactionCount + createdAt + + + + {recipients.map((recipient) => ( + onClick(recipient) : undefined} + > + {recipient.id} + {recipient.name} + {recipient.backgroundColor} + {recipient.backgroundImageURL} + {recipient.messageCount} + {recipient.reactionCount} + {recipient.createdAt} + + ))} + +
+ ); +} + +function MessagesTable({ messages }) { + return ( + + + + id + recipientId + sender + profileImageURL + relationship + content + font + createdAt + + + + {messages.map((message) => ( + + {message.id} + {message.recipientId} + {message.sender} + {message.profileImageURL} + {message.relationship} + {message.content} + {message.font} + {message.createdAt} + + ))} + +
+ ); +} + +function ReactionsTable({ reactions }) { + return ( + + + + id + emoji + count + + + + {reactions.map((reaction) => ( + + {reaction.id} + {reaction.emoji} + {reaction.count} + + ))} + +
+ ); +} + +function TestApiPage() { + const [recipients, setRecipients] = useState([]); + const [messages, setMessages] = useState([]); + const [reactions, setReactions] = useState([]); + const [selectedRecipient, setSelectedRecipient] = useState(null); + + const buttonSize = BUTTON_SIZE.medium; + + const updateRecipients = useCallback(async () => { + const recipients = await getAllRecipients(); + setRecipients(recipients); + }, []); + + /* Recipients */ + + const handleCreateRecipientsClick = async () => { + await createRecipients(); + updateRecipients(); + }; + + const handleDeleteRecipientsClick = async () => { + await deleteAllRecipients(recipients); + setRecipients([]); + setMessages([]); + setReactions([]); + setSelectedRecipient(null); + }; + + const handleRecipientClick = async (recipient) => { + setSelectedRecipient(recipient); + + const messages = await getAllMessages({ recipientId: recipient.id }); + setMessages(messages); + + const reactions = await getAllReactions({ recipientId: recipient.id }); + setReactions(reactions); + }; + + /* Messages */ + + const handleCreateMessagesClick = async () => { + const recipientId = prompt("추가할 recipient id", ""); + await createMessages({ recipientId }); + updateRecipients(); + + if (selectedRecipient) { + const messages = await getAllMessages({ recipientId }); + setMessages(messages); + } + }; + + const handleDeleteMessagesClick = async () => { + if (messages.length > 0) { + await deleteAllMessages(messages); + setMessages([]); + } else { + const recipientId = prompt("삭제할 recipient id", ""); + const messages = await getAllMessages({ recipientId }); + await deleteAllMessages(messages); + setMessages([]); + } + + updateRecipients(); + }; + + /* Reactions */ + + const handleCreateReactionsClick = async () => { + const recipientId = prompt("추가할 recipient id", ""); + await createReactions({ recipientId }); + updateRecipients(); + + if (selectedRecipient) { + const reactions = await getAllReactions({ recipientId }); + setReactions(reactions); + } + }; + + useEffect(() => { + updateRecipients(); + }, [updateRecipients]); + + return ( + + + + + + + + + + + +

{`현재 생성된 롤링페이퍼 (${recipients.length}개)`}

+ {recipients.length > 0 && ( + + )} + {selectedRecipient && ( +

{`${selectedRecipient.name} 에게 달린 메시지 (${ + messages.length ?? 0 + }개)`}

+ )} + {messages.length > 0 && } + {selectedRecipient && ( +

{`${selectedRecipient.name} 에게 달린 리액션 (${ + reactions.length ?? 0 + }개)`}

+ )} + {reactions.length > 0 && } +
+
+ ); +} + +export default TestApiPage; diff --git a/src/tests/test-api.js b/src/tests/test-api.js new file mode 100644 index 0000000..fed2e5c --- /dev/null +++ b/src/tests/test-api.js @@ -0,0 +1,80 @@ +import { apiClient } from "../api/client"; +import messageBody from "./test-message-body.json"; +import reactionBody from "./test-reaction-body.json"; +import recipientBody from "./test-recipient-body.json"; + +/* Recipients */ + +export async function createRecipients() { + let promises = []; + for (const body of recipientBody) { + const promise = apiClient.post("recipients/", body); + promises.push(promise); + } + await Promise.all(promises); +} + +export async function getAllRecipients() { + const response = await apiClient.get("/recipients/?limit=20"); + return response.data.results; +} + +export async function deleteAllRecipients(recipients) { + let promises = []; + for (const recipient of recipients) { + const promise = apiClient.delete(`recipients/${recipient.id}/`); + promises.push(promise); + } + await Promise.all(promises); +} + +/* Messages */ + +export async function createMessages({ recipientId }) { + let promises = []; + for (const body of messageBody) { + const promise = apiClient.post(`recipients/${recipientId}/messages/`, body); + promises.push(promise); + } + await Promise.all(promises); +} + +export async function getAllMessages({ recipientId }) { + const response = await apiClient.get( + `/recipients/${recipientId}/messages/?limit=20` + ); + return response.data.results; +} + +export async function deleteAllMessages(messages) { + let promises = []; + for (const message of messages) { + const promise = apiClient.delete(`messages/${message.id}/`); + promises.push(promise); + } + await Promise.all(promises); +} + +/* Reactions */ + +export async function createReactions({ recipientId }) { + let promises = []; + for (const body of reactionBody) { + const randomCount = Math.ceil(Math.random() * 10); + Array.from({ length: randomCount }).forEach(() => { + const promise = apiClient.post( + `recipients/${recipientId}/reactions/`, + body + ); + promises.push(promise); + }); + } + await Promise.all(promises); +} + +export async function getAllReactions({ recipientId }) { + const response = await apiClient.get( + `/recipients/${recipientId}/reactions/?limit=10` + ); + return response.data.results; +} diff --git a/src/tests/test-components-page.jsx b/src/tests/test-components-page.jsx new file mode 100644 index 0000000..96bbb2a --- /dev/null +++ b/src/tests/test-components-page.jsx @@ -0,0 +1,289 @@ +import { useState } from "react"; +import styled from "styled-components"; +import smileAddImage from "../assets/ic-face-smile-add.svg"; +import Avatar from "../components/avatar/avatar"; +import AVATAR_SIZE from "../components/avatar/avatar-size"; +import Badge from "../components/badge/badge"; +import BADGE_TYPE from "../components/badge/badge-type"; +import EmojiBadge from "../components/badge/emoji-badge"; +import ArrowButton from "../components/button/arrow-button"; +import ARROW_BUTTON_DIRECTION from "../components/button/arrow-button-direction"; +import { + DangerousButton, + OutlinedButton, + PrimaryButton, + SecondaryButton, +} from "../components/button/button"; +import BUTTON_SIZE from "../components/button/button-size"; +import ToggleButton from "../components/button/toggle-button"; +import Header from "../components/header/header"; +import Modal from "../components/modal/modal"; +import Popover from "../components/popover/popover"; +import POPOVER_ALIGNMENT from "../components/popover/popover-alignment"; +import TextField from "../components/text-field/text-field"; +import TEXT_FIELD_TYPE from "../components/text-field/text-field-type"; +import Toast from "../components/toast/toast"; +import { useModal } from "../hooks/use-modal"; +import { useToast } from "../hooks/use-toast"; + +const OutlinedHeader = styled(Header)` + border: 1px solid black; +`; + +function TestComponentsPage() { + /* Toggle Button */ + const handleToggleChange = (option, index) => { + console.log(option, index); + }; + + /* Dropdown type TextField */ + const [option1, setOption1] = useState(); + const [option2, setOption2] = useState(); + const [dropdown2Error, setDropdown2Error] = useState("Error Message"); + + const handleDropdownSelect1 = (option) => { + setOption1(option); + }; + const handleDropdownSelect2 = (option) => { + setOption2(option); + setDropdown2Error(null); + }; + + /* Toast */ + const { showsToast, setShowsToast } = useToast(); + + const handleToastClick = () => setShowsToast(true); + const handleToastDismiss = () => setShowsToast(false); + + /* Modal */ + const { showsModal, setShowsModal } = useModal({ + key: "test-modal", + }); + const handleModalOpen = () => setShowsModal(true); + const handleModalClose = () => setShowsModal(false); + + return ( +
+

🤯

+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + + +
+
+ + + + +
+
+ + + + +
+
+ + +
+
+ + +
+
+ + + + +
+
+ + + + +
+
+ + + +
+
+ + + +
+
+ + {showsToast && ( + + )} +
+
+ + +

This is Modal.

+ +
+
+
+ + } + > +

This is Popover.

+
+ + } + > +

This is Popover.

+
+
+
+
+ + + + + + + + +
+
+
+ ); +} + +export default TestComponentsPage; diff --git a/src/tests/test-message-body.json b/src/tests/test-message-body.json new file mode 100644 index 0000000..e7844f4 --- /dev/null +++ b/src/tests/test-message-body.json @@ -0,0 +1,142 @@ +[ + { + "sender": "이혜진", + "profileImageURL": "https://picsum.photos/id/522/100/100", + "relationship": "친구", + "content": "축하해! 항상 밝은 모습이 너무 보기 좋아. 올해도 건강하고 행복한 일만 가득하길 바라~", + "font": "Pretendard" + }, + { + "sender": "박성민", + "profileImageURL": "https://picsum.photos/id/547/100/100", + "relationship": "동료", + "content": "정말 축하드립니다! 함께 일하면서 많이 배우고 있어요. 앞으로도 잘 부탁드려요!", + "font": "Noto Sans" + }, + { + "sender": "김소영", + "profileImageURL": "https://picsum.photos/id/268/100/100", + "relationship": "가족", + "content": "축하해♡ 엄마가 항상 응원하고 있다는 거 알지? 사랑해!", + "font": "나눔손글씨 손편지체" + }, + { + "sender": "최준영", + "profileImageURL": "https://picsum.photos/id/1082/100/100", + "relationship": "친구", + "content": "축하한다! 오늘 저녁에 맛있는 거 먹으러 가자. 내가 쏠게!", + "font": "Pretendard" + }, + { + "sender": "정은지", + "profileImageURL": "https://picsum.photos/id/571/100/100", + "relationship": "지인", + "content": "축하해요! 늘 웃는 모습이 인상적이에요. 좋은 하루 보내세요~", + "font": "나눔명조" + }, + { + "sender": "장현석", + "profileImageURL": "https://picsum.photos/id/494/100/100", + "relationship": "친구", + "content": "축하해! 시간 진짜 빠르다. 오늘 하루 특별하게 보내!", + "font": "Pretendard" + }, + { + "sender": "윤서현", + "profileImageURL": "https://picsum.photos/id/859/100/100", + "relationship": "동료", + "content": "축하드려요! 덕분에 프로젝트가 잘 진행되고 있어요. 감사합니다!", + "font": "Noto Sans" + }, + { + "sender": "김태호", + "profileImageURL": "https://picsum.photos/id/437/100/100", + "relationship": "친구", + "content": "축하해! 정말 수고 많았어. 이제 새로운 시작이네!", + "font": "나눔명조" + }, + { + "sender": "박미영", + "profileImageURL": "https://picsum.photos/id/1064/100/100", + "relationship": "친구", + "content": "드디어구나~ 그동안 정말 열심히 했어. 앞으로도 화이팅!", + "font": "나눔손글씨 손편지체" + }, + { + "sender": "이준수", + "profileImageURL": "https://learn-codeit-kr-static.s3.ap-northeast-2.amazonaws.com/sprint-proj-image/default_avatar.png", + "relationship": "지인", + "content": "축하드려요! 앞으로의 새로운 도전을 응원합니다.", + "font": "나눔명조" + }, + { + "sender": "최유나", + "profileImageURL": "https://picsum.photos/id/522/100/100", + "relationship": "친구", + "content": "축하해♡ 우리 추억 정말 많았는데 이제 또 새로운 추억 만들어가자!", + "font": "Pretendard" + }, + { + "sender": "강민호", + "profileImageURL": "https://picsum.photos/id/547/100/100", + "relationship": "동료", + "content": "축하합니다! 함께 활동했던 시간이 좋은 추억이에요.", + "font": "Noto Sans" + }, + { + "sender": "홍서윤", + "profileImageURL": "https://picsum.photos/id/268/100/100", + "relationship": "가족", + "content": "축하해! 언니가 너무 자랑스러워. 앞으로 하고 싶은 일 다 해봐!", + "font": "나눔손글씨 손편지체" + }, + { + "sender": "노진우", + "profileImageURL": "https://picsum.photos/id/1082/100/100", + "relationship": "친구", + "content": "축하해! 새로운 변화가 기대되네. 응원할게!", + "font": "Pretendard" + }, + { + "sender": "임소은", + "profileImageURL": "https://picsum.photos/id/571/100/100", + "relationship": "친구", + "content": "정말 축하해! 그동안 고생 많았어. 이제 좋은 일만 있을 거야!", + "font": "나눔명조" + }, + { + "sender": "조민석", + "profileImageURL": "https://picsum.photos/id/494/100/100", + "relationship": "지인", + "content": "축하드려요! 앞으로의 여정을 응원합니다.", + "font": "Noto Sans" + }, + { + "sender": "김다은", + "profileImageURL": "https://picsum.photos/id/859/100/100", + "relationship": "친구", + "content": "축하해! 정말 열심히 하더니 결실을 맺었네. 너무 축하해!", + "font": "Pretendard" + }, + { + "sender": "이현우", + "profileImageURL": "https://picsum.photos/id/437/100/100", + "relationship": "동료", + "content": "축하드립니다! 앞으로도 많이 배우고 싶어요.", + "font": "Noto Sans" + }, + { + "sender": "박지민", + "profileImageURL": "https://picsum.photos/id/1064/100/100", + "relationship": "가족", + "content": "축하해! 아빠가 정말 자랑스럽다. 건강 조심하고 화이팅!", + "font": "나눔명조" + }, + { + "sender": "정수빈", + "profileImageURL": "https://learn-codeit-kr-static.s3.ap-northeast-2.amazonaws.com/sprint-proj-image/default_avatar.png", + "relationship": "친구", + "content": "축하축하~ 이제 더 바빠지겠네. 건강 챙기면서 해!", + "font": "Pretendard" + } +] diff --git a/src/tests/test-reaction-body.json b/src/tests/test-reaction-body.json new file mode 100644 index 0000000..5018692 --- /dev/null +++ b/src/tests/test-reaction-body.json @@ -0,0 +1,42 @@ +[ + { + "emoji": "👏", + "type": "increase" + }, + { + "emoji": "🎉", + "type": "increase" + }, + { + "emoji": "❤️", + "type": "increase" + }, + { + "emoji": "👍", + "type": "increase" + }, + { + "emoji": "🔥", + "type": "increase" + }, + { + "emoji": "😊", + "type": "increase" + }, + { + "emoji": "💪", + "type": "increase" + }, + { + "emoji": "🎊", + "type": "increase" + }, + { + "emoji": "✨", + "type": "increase" + }, + { + "emoji": "🙌", + "type": "increase" + } +] diff --git a/src/tests/test-recipient-body.json b/src/tests/test-recipient-body.json new file mode 100644 index 0000000..83520d8 --- /dev/null +++ b/src/tests/test-recipient-body.json @@ -0,0 +1,90 @@ +[ + { + "name": "김민수", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/id/683/3840/2160" + }, + { + "name": "이지영", + "backgroundColor": "purple" + }, + { + "name": "박준호", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/id/24/3840/2160" + }, + { + "name": "최서연", + "backgroundColor": "green" + }, + { + "name": "정태윤", + "backgroundColor": "beige" + }, + { + "name": "한소희", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/id/599/3840/2160" + }, + { + "name": "임재현", + "backgroundColor": "blue" + }, + { + "name": "송유진", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/id/1058/3840/2160" + }, + { + "name": "강동훈", + "backgroundColor": "beige" + }, + { + "name": "윤미래", + "backgroundColor": "purple" + }, + { + "name": "조현우", + "backgroundColor": "blue", + "backgroundImageURL": "https://picsum.photos/id/683/3840/2160" + }, + { + "name": "배수지", + "backgroundColor": "green" + }, + { + "name": "신예린", + "backgroundColor": "beige" + }, + { + "name": "오준석", + "backgroundColor": "purple", + "backgroundImageURL": "https://picsum.photos/id/24/3840/2160" + }, + { + "name": "안채원", + "backgroundColor": "blue" + }, + { + "name": "문지훈", + "backgroundColor": "green" + }, + { + "name": "서다은", + "backgroundColor": "beige", + "backgroundImageURL": "https://picsum.photos/id/599/3840/2160" + }, + { + "name": "황민규", + "backgroundColor": "purple" + }, + { + "name": "김나영", + "backgroundColor": "blue" + }, + { + "name": "이도현", + "backgroundColor": "green", + "backgroundImageURL": "https://picsum.photos/id/1058/3840/2160" + } +] diff --git a/src/utils/formatter.js b/src/utils/formatter.js new file mode 100644 index 0000000..cb992c5 --- /dev/null +++ b/src/utils/formatter.js @@ -0,0 +1,15 @@ +function formatDate(date, token = "-") { + let _date; + if (typeof date === 'string') { + _date = new Date(date); + } else { + _date = date; + } + + const year = _date.getFullYear(); + const month = `${_date.getMonth() + 1}`.padStart(2, "0"); + const day = `${_date.getDate()}`.padStart(2, "0"); + return `${year}${token}${month}${token}${day}`; +} + +export { formatDate }; diff --git a/src/utils/media.js b/src/utils/media.js new file mode 100644 index 0000000..35e0f74 --- /dev/null +++ b/src/utils/media.js @@ -0,0 +1,7 @@ +const media = { + desktop: "@media (min-width: 1200px)", + tablet: "@media (max-width: 1199px)", + mobile: "@media (max-width: 767px)", +}; + +export { media }; diff --git a/vercel.json b/vercel.json new file mode 100644 index 0000000..3a48e56 --- /dev/null +++ b/vercel.json @@ -0,0 +1,3 @@ +{ + "rewrites": [{ "source": "/(.*)", "destination": "/" }] +}