# ๐Ÿ‘ค ็”จๆˆท่ง’่‰ฒๆ˜พ็คบๅŠŸ่ƒฝ ## โœ… ๅทฒๅฎž็Žฐ็š„ๅŠŸ่ƒฝ ### 1. ็”จๆˆท่ต„ๆ–™ API **็ซฏ็‚น**: `GET /api/user/profile` **่ฟ”ๅ›žๆ•ฐๆฎ**: ```json { "user": { "id": "็”จๆˆทID", "email": "้‚ฎ็ฎฑ", "name": "ๅง“ๅ", "createdAt": "ๅˆ›ๅปบๆ—ถ้—ด", "updatedAt": "ๆ›ดๆ–ฐๆ—ถ้—ด", "ownedTreesCount": 2, // ๆ‹ฅๆœ‰็š„ๅฎถๆ—ๆ ‘ๆ•ฐ้‡ "collaborations": [ // ๅไฝœ็š„ๅฎถๆ—ๆ ‘ { "treeId": "ๅฎถๆ—ๆ ‘ID", "treeName": "ๅฎถๆ—ๆ ‘ๅ็งฐ", "role": "EDITOR" // ่ง’่‰ฒ๏ผšOWNER/EDITOR/VIEWER } ] } } ``` ### 2. ็”จๆˆทไฟกๆฏๅก็‰‡ๅขžๅผบ **ๆ˜พ็คบๅ†…ๅฎน**: - โœ… ็”จๆˆทๅคดๅƒ๏ผˆ้ฆ–ๅญ—ๆฏ๏ผ‰ - โœ… ็”จๆˆทๅ - โœ… ้‚ฎ็ฎฑ - โœ… ็”จๆˆท ID - โœ… ๆ‹ฅๆœ‰็š„ๅฎถๆ—ๆ ‘ๆ•ฐ้‡ - โœ… ๅไฝœๅฎถๆ—ๆ ‘ๅˆ—่กจ - โœ… ๆฏไธชๅฎถๆ—ๆ ‘็š„่ง’่‰ฒๆ ‡็ญพ ### 3. ่ง’่‰ฒๆ ‡็ญพๆ ทๅผ | ่ง’่‰ฒ | ๆ˜พ็คบๆ–‡ๆœฌ | ้ขœ่‰ฒ | |------|---------|------| | OWNER | ๆ‰€ๆœ‰่€… | ็ดซ่‰ฒ ๐ŸŸฃ | | EDITOR | ็ผ–่พ‘่€… | ่“่‰ฒ ๐Ÿ”ต | | VIEWER | ๆŸฅ็œ‹่€… | ็ฐ่‰ฒ โšช | --- ## ๐ŸŽจ UI ๅฑ•็คบ ### ็”จๆˆทไฟกๆฏๅก็‰‡ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ ๐Ÿ‘ค ็”จๆˆทไฟกๆฏ โ”‚ โ”‚ ๆ‚จ็š„่ดฆๅทไฟกๆฏๅ’Œ่ง’่‰ฒ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ โ”‚ โ”‚ [ๅคดๅƒ] ๆต‹่ฏ•็”จๆˆท โ”‚ โ”‚ test@example.com โ”‚ โ”‚ ็”จๆˆท ID: cmiak... โ”‚ โ”‚ โ”‚ โ”‚ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ โ”‚ โ”‚ โ”‚ โ”‚ ๆ‹ฅๆœ‰็š„ๅฎถๆ—ๆ ‘ 2 ไธช โ”‚ โ”‚ โ”‚ โ”‚ ๅไฝœๅฎถๆ—ๆ ‘ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ๆŽๆฐๅฎถๆ—ๆ ‘ [็ผ–่พ‘่€…] โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ ็Ž‹ๆฐๅฎถๆ—ๆ ‘ [ๆŸฅ็œ‹่€…] โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` --- ## ๐Ÿ“ ไปฃ็ ๅฎž็Žฐ ### ่ง’่‰ฒๆ–‡ๆœฌๆ˜ ๅฐ„ ```typescript const getRoleText = (role: string) => { const roleMap: Record = { 'OWNER': 'ๆ‰€ๆœ‰่€…', 'EDITOR': '็ผ–่พ‘่€…', 'VIEWER': 'ๆŸฅ็œ‹่€…' } return roleMap[role] || role } ``` ### ่ง’่‰ฒ้ขœ่‰ฒๆ˜ ๅฐ„ ```typescript const getRoleBadgeColor = (role: string) => { const colorMap: Record = { 'OWNER': 'bg-purple-100 text-purple-700 border-purple-200', 'EDITOR': 'bg-blue-100 text-blue-700 border-blue-200', 'VIEWER': 'bg-gray-100 text-gray-700 border-gray-200' } return colorMap[role] || 'bg-gray-100 text-gray-700' } ``` ### ่Žทๅ–็”จๆˆท่ต„ๆ–™ ```typescript useEffect(() => { if (session?.user?.id) { fetch('/api/user/profile') .then(res => res.json()) .then(data => { if (data.user) { setUserProfile(data.user) } }) .catch(err => console.error('่Žทๅ–็”จๆˆท่ต„ๆ–™ๅคฑ่ดฅ:', err)) } }, [session?.user?.id]) ``` --- ## ๐Ÿ” ๆต‹่ฏ•ๆ–นๆณ• ### 1. ๆŸฅ็œ‹็”จๆˆทไฟกๆฏ ```bash # ่ฎฟ้—ฎ่ฎพ็ฝฎ้กต้ข http://localhost:3000/settings # ๆŸฅ็œ‹็”จๆˆทไฟกๆฏๅก็‰‡ - ๅบ”ๆ˜พ็คบ็”จๆˆทๅŸบๆœฌไฟกๆฏ - ๅบ”ๆ˜พ็คบๆ‹ฅๆœ‰็š„ๅฎถๆ—ๆ ‘ๆ•ฐ้‡ - ๅบ”ๆ˜พ็คบๅไฝœๅฎถๆ—ๆ ‘ๅˆ—่กจ๏ผˆๅฆ‚ๆžœๆœ‰๏ผ‰ ``` ### 2. ๆต‹่ฏ• API ```bash # ็™ปๅฝ•ๅŽ่ฎฟ้—ฎ curl -b cookies.txt http://localhost:3000/api/user/profile # ๅบ”่ฟ”ๅ›žๅฎŒๆ•ด็š„็”จๆˆท่ต„ๆ–™ ``` ### 3. ๆต‹่ฏ•ไธๅŒ่ง’่‰ฒ 1. ๅˆ›ๅปบๅคšไธชๅฎถๆ—ๆ ‘ 2. ้‚€่ฏท็”จๆˆทไฝœไธบๅไฝœ่€…๏ผˆไธๅŒ่ง’่‰ฒ๏ผ‰ 3. ๆŸฅ็œ‹่ฎพ็ฝฎ้กต้ข 4. ้ชŒ่ฏ่ง’่‰ฒๆ ‡็ญพ้ขœ่‰ฒๅ’Œๆ–‡ๆœฌ --- ## ๐Ÿ“Š ๆ•ฐๆฎ็ปŸ่ฎก ็”จๆˆทไฟกๆฏๅก็‰‡ๆ˜พ็คบ๏ผš - **ๆ‹ฅๆœ‰็š„ๅฎถๆ—ๆ ‘**: ็”จๆˆทไฝœไธบ OWNER ็š„ๅฎถๆ—ๆ ‘ๆ•ฐ้‡ - **ๅไฝœๅฎถๆ—ๆ ‘**: ็”จๆˆทไฝœไธบ EDITOR ๆˆ– VIEWER ็š„ๅฎถๆ—ๆ ‘ๅˆ—่กจ - **่ง’่‰ฒๆ ‡็ญพ**: ๆฏไธชๅไฝœๅฎถๆ—ๆ ‘็š„่ง’่‰ฒ --- ## โœจ ๅŠŸ่ƒฝ็‰น็‚น 1. **ๅฎžๆ—ถๆ›ดๆ–ฐ** - ้กต้ขๅŠ ่ฝฝๆ—ถ่‡ชๅŠจ่Žทๅ–ๆœ€ๆ–ฐๆ•ฐๆฎ 2. **่ง’่‰ฒๅฏ่ง†ๅŒ–** - ไธๅŒ่ง’่‰ฒ็”จไธๅŒ้ขœ่‰ฒๆ ‡่ฏ† 3. **ไฟกๆฏๅฎŒๆ•ด** - ๆ˜พ็คบๆ‰€ๆœ‰็›ธๅ…ณ็š„ๅฎถๆ—ๆ ‘ๅ’Œ่ง’่‰ฒ 4. **ๅ“ๅบ”ๅผ่ฎพ่ฎก** - ้€‚้…ๅ„็งๅฑๅน•ๅฐบๅฏธ --- ## ๐ŸŽฏ ๅฎŒๆˆ็Šถๆ€ - โœ… ็”จๆˆท่ต„ๆ–™ API - โœ… ่ง’่‰ฒๆ˜พ็คบ - โœ… ๅฎถๆ—ๆ ‘็ปŸ่ฎก - โœ… ๅไฝœๅˆ—่กจ - โœ… ่ง’่‰ฒๆ ‡็ญพๆ ทๅผ - โœ… ่‡ชๅŠจๆ•ฐๆฎ่Žทๅ– **็”จๆˆท่ง’่‰ฒๆ˜พ็คบๅŠŸ่ƒฝๅทฒๅฎŒๅ…จๅฎž็Žฐ๏ผ** ๐ŸŽ‰