1 line
261 KiB
JSON
1 line
261 KiB
JSON
{"knowledge_relations":[{"id":1,"source_id":"3f7ad31d-ce9c-43e7-9a5c-0778114efc03","target_id":"8637d161-f362-42da-b905-7c7b9cb6c2d6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3f7ad31d-ce9c-43e7-9a5c-0778114efc03 -\u003e 8637d161-f362-42da-b905-7c7b9cb6c2d6","gmt_create":"2025-11-30T08:30:59.883463059+08:00","gmt_modified":"2025-11-30T08:30:59.883463098+08:00"},{"id":2,"source_id":"3f7ad31d-ce9c-43e7-9a5c-0778114efc03","target_id":"6f1dfa66-1f21-4bd3-bbd9-8f2f802ddd02","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3f7ad31d-ce9c-43e7-9a5c-0778114efc03 -\u003e 6f1dfa66-1f21-4bd3-bbd9-8f2f802ddd02","gmt_create":"2025-11-30T08:30:59.883664004+08:00","gmt_modified":"2025-11-30T08:30:59.883664043+08:00"},{"id":3,"source_id":"3f7ad31d-ce9c-43e7-9a5c-0778114efc03","target_id":"dd6a7583-4c9e-46e6-a352-1f435cac06ba","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3f7ad31d-ce9c-43e7-9a5c-0778114efc03 -\u003e dd6a7583-4c9e-46e6-a352-1f435cac06ba","gmt_create":"2025-11-30T08:30:59.883820774+08:00","gmt_modified":"2025-11-30T08:30:59.883820807+08:00"},{"id":4,"source_id":"3f7ad31d-ce9c-43e7-9a5c-0778114efc03","target_id":"e9aeef0a-cd8f-48a8-9901-119b30c319a7","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3f7ad31d-ce9c-43e7-9a5c-0778114efc03 -\u003e e9aeef0a-cd8f-48a8-9901-119b30c319a7","gmt_create":"2025-11-30T08:30:59.883957582+08:00","gmt_modified":"2025-11-30T08:30:59.883957612+08:00"},{"id":5,"source_id":"b8926193-0213-47a8-ae4d-e286f795f40e","target_id":"cbc68262-985c-4b1a-a0dd-80755c2e91dd","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b8926193-0213-47a8-ae4d-e286f795f40e -\u003e cbc68262-985c-4b1a-a0dd-80755c2e91dd","gmt_create":"2025-11-30T08:30:59.884097763+08:00","gmt_modified":"2025-11-30T08:30:59.884097795+08:00"},{"id":6,"source_id":"b8926193-0213-47a8-ae4d-e286f795f40e","target_id":"f806270a-c464-4eb2-9c84-337e6e2867de","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b8926193-0213-47a8-ae4d-e286f795f40e -\u003e f806270a-c464-4eb2-9c84-337e6e2867de","gmt_create":"2025-11-30T08:30:59.884252142+08:00","gmt_modified":"2025-11-30T08:30:59.884252173+08:00"},{"id":7,"source_id":"a1a06e15-7fe8-4cec-9cd5-836bbcf2f921","target_id":"3cfe3999-267d-472b-ade7-db5cffe1df95","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: a1a06e15-7fe8-4cec-9cd5-836bbcf2f921 -\u003e 3cfe3999-267d-472b-ade7-db5cffe1df95","gmt_create":"2025-11-30T08:30:59.884420221+08:00","gmt_modified":"2025-11-30T08:30:59.884420252+08:00"},{"id":8,"source_id":"a1a06e15-7fe8-4cec-9cd5-836bbcf2f921","target_id":"b6f4c52b-a50f-4e58-b353-11959f00efac","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: a1a06e15-7fe8-4cec-9cd5-836bbcf2f921 -\u003e b6f4c52b-a50f-4e58-b353-11959f00efac","gmt_create":"2025-11-30T08:30:59.884548803+08:00","gmt_modified":"2025-11-30T08:30:59.884548835+08:00"},{"id":9,"source_id":"a1a06e15-7fe8-4cec-9cd5-836bbcf2f921","target_id":"539d01bc-c6e8-482e-a1e4-cabd1e736e35","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: a1a06e15-7fe8-4cec-9cd5-836bbcf2f921 -\u003e 539d01bc-c6e8-482e-a1e4-cabd1e736e35","gmt_create":"2025-11-30T08:30:59.884695761+08:00","gmt_modified":"2025-11-30T08:30:59.884695792+08:00"},{"id":10,"source_id":"a1a06e15-7fe8-4cec-9cd5-836bbcf2f921","target_id":"645e5060-b7e3-49b0-976c-18ecedb566b6","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: a1a06e15-7fe8-4cec-9cd5-836bbcf2f921 -\u003e 645e5060-b7e3-49b0-976c-18ecedb566b6","gmt_create":"2025-11-30T08:30:59.884827179+08:00","gmt_modified":"2025-11-30T08:30:59.88482721+08:00"},{"id":11,"source_id":"a1a06e15-7fe8-4cec-9cd5-836bbcf2f921","target_id":"7f8c0d35-f894-4c04-884f-637a527b2590","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: a1a06e15-7fe8-4cec-9cd5-836bbcf2f921 -\u003e 7f8c0d35-f894-4c04-884f-637a527b2590","gmt_create":"2025-11-30T08:30:59.884958371+08:00","gmt_modified":"2025-11-30T08:30:59.884958401+08:00"},{"id":12,"source_id":"a1a06e15-7fe8-4cec-9cd5-836bbcf2f921","target_id":"280c8ca4-4232-4e9d-b761-7d27a86de9c4","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: a1a06e15-7fe8-4cec-9cd5-836bbcf2f921 -\u003e 280c8ca4-4232-4e9d-b761-7d27a86de9c4","gmt_create":"2025-11-30T08:30:59.885083674+08:00","gmt_modified":"2025-11-30T08:30:59.885083705+08:00"},{"id":13,"source_id":"a1a06e15-7fe8-4cec-9cd5-836bbcf2f921","target_id":"e6b0a823-cd17-4a44-9cc6-3459c1c6012c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: a1a06e15-7fe8-4cec-9cd5-836bbcf2f921 -\u003e e6b0a823-cd17-4a44-9cc6-3459c1c6012c","gmt_create":"2025-11-30T08:30:59.885214978+08:00","gmt_modified":"2025-11-30T08:30:59.885215009+08:00"},{"id":14,"source_id":"7e7e49ca-df06-4ee0-8157-456ee19a8c4b","target_id":"2ef5d36e-2c5e-42fb-b2a9-81796892ef05","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 7e7e49ca-df06-4ee0-8157-456ee19a8c4b -\u003e 2ef5d36e-2c5e-42fb-b2a9-81796892ef05","gmt_create":"2025-11-30T08:30:59.885353963+08:00","gmt_modified":"2025-11-30T08:30:59.885353999+08:00"},{"id":15,"source_id":"7e7e49ca-df06-4ee0-8157-456ee19a8c4b","target_id":"821f82f7-558d-4be9-813b-d68b25159953","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 7e7e49ca-df06-4ee0-8157-456ee19a8c4b -\u003e 821f82f7-558d-4be9-813b-d68b25159953","gmt_create":"2025-11-30T08:30:59.885545558+08:00","gmt_modified":"2025-11-30T08:30:59.885545591+08:00"},{"id":16,"source_id":"7e7e49ca-df06-4ee0-8157-456ee19a8c4b","target_id":"d6259521-0d14-4e0a-9769-ec128cc07175","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 7e7e49ca-df06-4ee0-8157-456ee19a8c4b -\u003e d6259521-0d14-4e0a-9769-ec128cc07175","gmt_create":"2025-11-30T08:30:59.885691471+08:00","gmt_modified":"2025-11-30T08:30:59.885691505+08:00"},{"id":17,"source_id":"29101806-be9c-4752-98e2-f895c71a4289","target_id":"ede4cb6a-c092-400e-b165-2c01a379a5f5","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 29101806-be9c-4752-98e2-f895c71a4289 -\u003e ede4cb6a-c092-400e-b165-2c01a379a5f5","gmt_create":"2025-11-30T08:30:59.885842686+08:00","gmt_modified":"2025-11-30T08:30:59.885842724+08:00"},{"id":18,"source_id":"29101806-be9c-4752-98e2-f895c71a4289","target_id":"048edc31-b8e7-49e8-82a9-26d158318a1e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 29101806-be9c-4752-98e2-f895c71a4289 -\u003e 048edc31-b8e7-49e8-82a9-26d158318a1e","gmt_create":"2025-11-30T08:30:59.886011839+08:00","gmt_modified":"2025-11-30T08:30:59.886011879+08:00"},{"id":19,"source_id":"29101806-be9c-4752-98e2-f895c71a4289","target_id":"1be6ace7-eb14-4597-9099-aa6274f1d6ef","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 29101806-be9c-4752-98e2-f895c71a4289 -\u003e 1be6ace7-eb14-4597-9099-aa6274f1d6ef","gmt_create":"2025-11-30T08:30:59.886167718+08:00","gmt_modified":"2025-11-30T08:30:59.886167757+08:00"},{"id":20,"source_id":"29101806-be9c-4752-98e2-f895c71a4289","target_id":"7cdfc1b2-afe1-44df-b07a-7cfd9335ec31","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 29101806-be9c-4752-98e2-f895c71a4289 -\u003e 7cdfc1b2-afe1-44df-b07a-7cfd9335ec31","gmt_create":"2025-11-30T08:30:59.886331091+08:00","gmt_modified":"2025-11-30T08:30:59.886331124+08:00"},{"id":21,"source_id":"29101806-be9c-4752-98e2-f895c71a4289","target_id":"6bb2ef37-e371-4044-a371-abf3d491ecda","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 29101806-be9c-4752-98e2-f895c71a4289 -\u003e 6bb2ef37-e371-4044-a371-abf3d491ecda","gmt_create":"2025-11-30T08:30:59.886499998+08:00","gmt_modified":"2025-11-30T08:30:59.886500029+08:00"},{"id":22,"source_id":"29101806-be9c-4752-98e2-f895c71a4289","target_id":"c61d767c-c848-488a-aa63-e211f59bd00d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 29101806-be9c-4752-98e2-f895c71a4289 -\u003e c61d767c-c848-488a-aa63-e211f59bd00d","gmt_create":"2025-11-30T08:30:59.886639368+08:00","gmt_modified":"2025-11-30T08:30:59.886639399+08:00"},{"id":23,"source_id":"028f0a60-9699-4230-9605-c67fe0478573","target_id":"10e2d2f7-a881-489a-a037-7b23b10384ed","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 028f0a60-9699-4230-9605-c67fe0478573 -\u003e 10e2d2f7-a881-489a-a037-7b23b10384ed","gmt_create":"2025-11-30T08:30:59.886757958+08:00","gmt_modified":"2025-11-30T08:30:59.886757991+08:00"},{"id":24,"source_id":"028f0a60-9699-4230-9605-c67fe0478573","target_id":"d1d6065d-7ebe-4f2e-90be-db57457da3bf","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 028f0a60-9699-4230-9605-c67fe0478573 -\u003e d1d6065d-7ebe-4f2e-90be-db57457da3bf","gmt_create":"2025-11-30T08:30:59.886871799+08:00","gmt_modified":"2025-11-30T08:30:59.886871829+08:00"},{"id":25,"source_id":"028f0a60-9699-4230-9605-c67fe0478573","target_id":"4b7ed05a-35f3-44c8-921a-e812dde03dbb","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 028f0a60-9699-4230-9605-c67fe0478573 -\u003e 4b7ed05a-35f3-44c8-921a-e812dde03dbb","gmt_create":"2025-11-30T08:30:59.886987131+08:00","gmt_modified":"2025-11-30T08:30:59.886987161+08:00"},{"id":26,"source_id":"3cfe3999-267d-472b-ade7-db5cffe1df95","target_id":"a2b4c485-307c-4263-b3a4-fec369b67308","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3cfe3999-267d-472b-ade7-db5cffe1df95 -\u003e a2b4c485-307c-4263-b3a4-fec369b67308","gmt_create":"2025-11-30T08:30:59.887220944+08:00","gmt_modified":"2025-11-30T08:30:59.887220976+08:00"},{"id":27,"source_id":"3cfe3999-267d-472b-ade7-db5cffe1df95","target_id":"b7822259-7797-4c18-93b6-1fe08fe7c47c","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3cfe3999-267d-472b-ade7-db5cffe1df95 -\u003e b7822259-7797-4c18-93b6-1fe08fe7c47c","gmt_create":"2025-11-30T08:30:59.887335744+08:00","gmt_modified":"2025-11-30T08:30:59.887335775+08:00"},{"id":28,"source_id":"3cfe3999-267d-472b-ade7-db5cffe1df95","target_id":"4dab5305-46a6-475a-9a2b-ae58d37e3746","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3cfe3999-267d-472b-ade7-db5cffe1df95 -\u003e 4dab5305-46a6-475a-9a2b-ae58d37e3746","gmt_create":"2025-11-30T08:30:59.887470457+08:00","gmt_modified":"2025-11-30T08:30:59.887470488+08:00"},{"id":29,"source_id":"3cfe3999-267d-472b-ade7-db5cffe1df95","target_id":"e59713bd-6038-48dd-a3f9-115274cade0d","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3cfe3999-267d-472b-ade7-db5cffe1df95 -\u003e e59713bd-6038-48dd-a3f9-115274cade0d","gmt_create":"2025-11-30T08:30:59.887585161+08:00","gmt_modified":"2025-11-30T08:30:59.887585191+08:00"},{"id":30,"source_id":"b6f4c52b-a50f-4e58-b353-11959f00efac","target_id":"d5c723ca-573d-4321-b802-dd063cc10e23","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b6f4c52b-a50f-4e58-b353-11959f00efac -\u003e d5c723ca-573d-4321-b802-dd063cc10e23","gmt_create":"2025-11-30T08:30:59.896500707+08:00","gmt_modified":"2025-11-30T08:30:59.896500747+08:00"},{"id":31,"source_id":"b6f4c52b-a50f-4e58-b353-11959f00efac","target_id":"b3670256-c2c9-4ff0-9273-26195b854671","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b6f4c52b-a50f-4e58-b353-11959f00efac -\u003e b3670256-c2c9-4ff0-9273-26195b854671","gmt_create":"2025-11-30T08:30:59.902040194+08:00","gmt_modified":"2025-11-30T08:30:59.902040233+08:00"},{"id":32,"source_id":"b6f4c52b-a50f-4e58-b353-11959f00efac","target_id":"f6aa16e0-a3ea-4587-bb00-3826cced7ddc","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: b6f4c52b-a50f-4e58-b353-11959f00efac -\u003e f6aa16e0-a3ea-4587-bb00-3826cced7ddc","gmt_create":"2025-11-30T08:30:59.902224015+08:00","gmt_modified":"2025-11-30T08:30:59.90222405+08:00"},{"id":33,"source_id":"539d01bc-c6e8-482e-a1e4-cabd1e736e35","target_id":"faf9acb8-cd59-4180-a4f2-8f4705f35513","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 539d01bc-c6e8-482e-a1e4-cabd1e736e35 -\u003e faf9acb8-cd59-4180-a4f2-8f4705f35513","gmt_create":"2025-11-30T08:30:59.902740707+08:00","gmt_modified":"2025-11-30T08:30:59.902740745+08:00"},{"id":34,"source_id":"539d01bc-c6e8-482e-a1e4-cabd1e736e35","target_id":"3212a68c-6229-4c2a-8495-3758f2cadf5a","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 539d01bc-c6e8-482e-a1e4-cabd1e736e35 -\u003e 3212a68c-6229-4c2a-8495-3758f2cadf5a","gmt_create":"2025-11-30T08:30:59.902934348+08:00","gmt_modified":"2025-11-30T08:30:59.902934392+08:00"},{"id":35,"source_id":"539d01bc-c6e8-482e-a1e4-cabd1e736e35","target_id":"50e7dee3-d4dd-4785-91af-1b900acd369e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 539d01bc-c6e8-482e-a1e4-cabd1e736e35 -\u003e 50e7dee3-d4dd-4785-91af-1b900acd369e","gmt_create":"2025-11-30T08:30:59.903119094+08:00","gmt_modified":"2025-11-30T08:30:59.903119145+08:00"},{"id":36,"source_id":"539d01bc-c6e8-482e-a1e4-cabd1e736e35","target_id":"a7ec8d25-b883-46fc-a480-cfdc2920c2cc","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 539d01bc-c6e8-482e-a1e4-cabd1e736e35 -\u003e a7ec8d25-b883-46fc-a480-cfdc2920c2cc","gmt_create":"2025-11-30T08:30:59.903277675+08:00","gmt_modified":"2025-11-30T08:30:59.903277719+08:00"},{"id":37,"source_id":"539d01bc-c6e8-482e-a1e4-cabd1e736e35","target_id":"e12124c1-303f-450c-a91d-d01b3c16b284","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 539d01bc-c6e8-482e-a1e4-cabd1e736e35 -\u003e e12124c1-303f-450c-a91d-d01b3c16b284","gmt_create":"2025-11-30T08:30:59.90344168+08:00","gmt_modified":"2025-11-30T08:30:59.903441714+08:00"},{"id":38,"source_id":"645e5060-b7e3-49b0-976c-18ecedb566b6","target_id":"9a857a68-d685-4170-94ec-49e51b25e178","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 645e5060-b7e3-49b0-976c-18ecedb566b6 -\u003e 9a857a68-d685-4170-94ec-49e51b25e178","gmt_create":"2025-11-30T08:30:59.903782769+08:00","gmt_modified":"2025-11-30T08:30:59.903782803+08:00"},{"id":39,"source_id":"645e5060-b7e3-49b0-976c-18ecedb566b6","target_id":"fe39064e-91c6-4e18-b8f0-f4ed1a45ad09","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 645e5060-b7e3-49b0-976c-18ecedb566b6 -\u003e fe39064e-91c6-4e18-b8f0-f4ed1a45ad09","gmt_create":"2025-11-30T08:30:59.903909368+08:00","gmt_modified":"2025-11-30T08:30:59.903909402+08:00"},{"id":40,"source_id":"645e5060-b7e3-49b0-976c-18ecedb566b6","target_id":"6784ade9-b14b-407f-9253-9a5c9c9aa738","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 645e5060-b7e3-49b0-976c-18ecedb566b6 -\u003e 6784ade9-b14b-407f-9253-9a5c9c9aa738","gmt_create":"2025-11-30T08:30:59.904039531+08:00","gmt_modified":"2025-11-30T08:30:59.904039577+08:00"},{"id":41,"source_id":"645e5060-b7e3-49b0-976c-18ecedb566b6","target_id":"23a6e70d-c5f9-4819-8ad5-c4c209121095","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 645e5060-b7e3-49b0-976c-18ecedb566b6 -\u003e 23a6e70d-c5f9-4819-8ad5-c4c209121095","gmt_create":"2025-11-30T08:30:59.904191082+08:00","gmt_modified":"2025-11-30T08:30:59.904191112+08:00"},{"id":42,"source_id":"280c8ca4-4232-4e9d-b761-7d27a86de9c4","target_id":"850a2d43-6591-4da1-b642-5cc373d5194e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 280c8ca4-4232-4e9d-b761-7d27a86de9c4 -\u003e 850a2d43-6591-4da1-b642-5cc373d5194e","gmt_create":"2025-11-30T08:30:59.904615058+08:00","gmt_modified":"2025-11-30T08:30:59.904615093+08:00"},{"id":43,"source_id":"280c8ca4-4232-4e9d-b761-7d27a86de9c4","target_id":"7f43f639-526e-4658-8c46-abf65d558c6e","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 280c8ca4-4232-4e9d-b761-7d27a86de9c4 -\u003e 7f43f639-526e-4658-8c46-abf65d558c6e","gmt_create":"2025-11-30T08:30:59.90475406+08:00","gmt_modified":"2025-11-30T08:30:59.90475409+08:00"},{"id":44,"source_id":"280c8ca4-4232-4e9d-b761-7d27a86de9c4","target_id":"b49df3a4-b488-45ca-9b49-36f8b6187b26","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 280c8ca4-4232-4e9d-b761-7d27a86de9c4 -\u003e b49df3a4-b488-45ca-9b49-36f8b6187b26","gmt_create":"2025-11-30T08:30:59.904885862+08:00","gmt_modified":"2025-11-30T08:30:59.904885892+08:00"},{"id":45,"source_id":"3212a68c-6229-4c2a-8495-3758f2cadf5a","target_id":"6a747b98-68fc-48d4-8654-302fe96220e1","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3212a68c-6229-4c2a-8495-3758f2cadf5a -\u003e 6a747b98-68fc-48d4-8654-302fe96220e1","gmt_create":"2025-11-30T08:30:59.905419708+08:00","gmt_modified":"2025-11-30T08:30:59.905419742+08:00"},{"id":46,"source_id":"3212a68c-6229-4c2a-8495-3758f2cadf5a","target_id":"3a6496f7-c062-4f2b-873f-f816079ab7e8","source_type":"WIKI_ITEM","target_type":"WIKI_ITEM","relationship_type":"PARENT_CHILD","extra":"Wiki parent-child relationship: 3212a68c-6229-4c2a-8495-3758f2cadf5a -\u003e 3a6496f7-c062-4f2b-873f-f816079ab7e8","gmt_create":"2025-11-30T08:30:59.905559514+08:00","gmt_modified":"2025-11-30T08:30:59.905559547+08:00"}],"wiki_catalogs":[{"id":"32730baf-703e-4ac5-9a1c-18db77b29474","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"项目概述","description":"project-overview","prompt":"创建全面的内容,重点介绍CarrotSkin后端项目。解释其作为Minecraft皮肤站后端服务的目的、核心功能和系统架构。涵盖用户认证、材质管理、档案系统、Yggdrasil协议集成等主要功能模块。描述基于Gin框架的分层架构(Handler-Service-Repository),以及与PostgreSQL、Redis、MinIO/RustFS等外部系统的集成方式。为初学者提供高层次的系统概览,同时为经验丰富的开发者提供技术决策背后的权衡分析。包括系统上下文图、主要组件交互图以及典型用户工作流示例。","progress_status":"completed","dependent_files":"README.md","gmt_create":"2025-11-30T08:02:55.6632188+08:00","gmt_modified":"2025-11-30T08:05:48.688607751+08:00","raw_data":"WikiEncrypted:0MI1/XkBoMl0lTbK6t0Cn/+8FdvqrJ62ianMLvZj02elJtBUgH0Ns0veIx1WPtM9wwkxI+/XAqHLxJLlHB8wV7f+ZSFsWmYrjwHaKSwENxBxN1ucZGW6XlNSs2MVdc8o81dHE6Xi9yxQ6cvUeNEyy3tEqgETfC6jipaDaAsg8gfAsG9pq3JgMkLpxP7m0GB1H0vBEr3Z4bQRqHmdvNWlgAEj/fJ3WNDURMDsCMWyBIza8bwg4j7Y9Tltz50Cdovxe9ZtW4Nt5MvnU0r2UEuvAxUWtqYy2jAYgGABEvjcpwxH7t9BzbSSZFCfI12MV/v0rDpZSnyXK0OAjTUVT8CJaHqzVnXlko/uSWdehvvkJkeqCmJY+pMYIXjA3zxg1B/CSuQRVzUIVWQRrbsN8XOmjCZqctwZxIvPrd7kzGJyGqIfnnOmkms3D5OZnzsKT09eLhzxe9lqmDFcP0/nGHfjuzyGNtsx+4SXl1IM1tlOei9k6hNZb7PimnJy0msN7LmW2Xyo1feuayAG9GzUus7dwH1KXdWxUQfV/7SHWAig2mSU6cJ0NbG8LO69s0e3nTx29H23pvOgbnvLZhi/eb0ayOKp1rbaA2EAE9iWN/ekNPrOqyAXpkzWYwccL4u6C9lOwwMue6YnpheifaPsF4mRx/NRRq8gvAhJiLwjKWspSxB5ce84Fk5R/fR5TnpYlpKhvM6SiQwm7vm2YFdTT7AfKdLFjwJehYVMBkKUKlm8b55Oo8+hKAPRBpp7dHAA8LJXdPp6ONHQhrevfeeodDbbfd4I+JbiCc9anf4mEZp4DHMAYaMM2ed2jua+Qt+48Lt81zDYsftZyWF5C+BxE9sTjuPhxHhsOEqtdK12zd2i2xAkG5NLNFR60hwZ2/BKDW0y2ebi9OXM2nMgqaWOG/9vxpxb9BgD4jWbbd/c5Br1xOuVCJlDdyV00jxbZ5ZyrHtkHtqK0cMYNEzYTbEhwo1+ZijBb92GVSP4GbEY8lyYyQ4pZVC+BoOknHBq7LQTlSLYLr5CTlFHKj+rRDNI/SGrfWhOgJ2m9yxbJSAVET/X5fNcp3kbhbNpiRw7uwEubCZa"},{"id":"eae75e89-3b0b-400e-8204-120e8d6705cf","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"JWT认证","description":"jwt-authentication","prompt":"创建详细的JWT认证文档,重点介绍CarrotSkin项目中基于JWT的用户认证机制。详细说明JWTService的结构设计、令牌生成(GenerateToken)和验证(ValidateToken)的实现原理。解释令牌中包含的声明(Claims)字段(如user_id、username、role)及其安全意义。描述认证中间件(AuthMiddleware和OptionalAuthMiddleware)如何在Gin框架中拦截请求并解析Authorization头。提供实际代码示例,展示用户登录后如何生成令牌,以及后续请求如何通过中间件完成认证。为初学者提供JWT工作流程图解,为高级开发者提供密钥管理、过期策略和防止重放攻击的最佳实践。同时说明MustGetJWTService单例模式的使用及其在系统中的全局作用。","parent_id":"a6e048ce-402b-4fd3-ae08-096cd645d9f7","progress_status":"completed","dependent_files":"pkg/auth/jwt.go,internal/middleware/auth.go","gmt_create":"2025-11-30T08:03:12.318217781+08:00","gmt_modified":"2025-11-30T08:10:15.609242687+08:00","raw_data":"WikiEncrypted:8ebUGRa7qCwWfB8YHyDHESvFrQQaaYoCnwBeRxsXQ/og3PWEge7/R/oFQgPSCOP58cf24NhZWzgIdScQJ3QAIo4FOM+eVO6qfMpuF1/UQKJvFM2VaWNYzuHHtWrK7Vx6lQIX22CprvrD647A801auaiBdYy/rJQf3/xC/ioYipIfuRuzjPF3YKrwC9LJV1vRMMk/avoZ5uYqtSdTAhf7LMa9dUVIqnhUVYBBjnf/W+vlSnvcPhTN5l846FbngGPkkHdn38wcEZeQRkRwACwqLidXvWOUVnHHz0w9kQA9LHtoJYdOuFhsIjIWlyQKsB+8jfKuJ48umJgefDd4iLsXN4lPcd7lBUB8OzO7fvuEqpgT42zM+nPVDw+LyQq1OrpHmBA3WZ1acD+Gy+r44hMpR6IrdVCWiRti1B2kQeEJcwdrJEVd+nfDvAwd2QjVqi3tQH5HgMmiRPV/h2sUDrhC4WQcRnEEthhLL2XVVD+fhoJDO0QvuzXHUTdVIu7Clshy03TQbfNh4se9TavnDzNnSWeXfY0WVJylQAEUzqzWzYnCTLY3nsrksLH9kWbqOCaftBQNBqCpZ9E++GCWbO2M9zpNUUCiHZJjnWhoqS6+HaaxXFDlnWiS+sWju1f3ufhA7DDukOT+77x+aFba8/0P7E9Rsq+kILp+YNo2t+9nVOJkUPyQp1kAhr46IT6U2IZmULRlX1hlvDlhY0sFhvqW6ZVrL9Vw/GGUoCVrfxOBwn11YLGiLM5lYxO+aMjS8AgNO4aIQyLgmfwNwVi0sCpiyJqeqUQpJ/EACCHUFTcCxMNJwV69bkqJnmBNH23pf0Cpu3VVrgRmeLG0+vkbTXOfCRSJgM1DaZJ8ES18x7/D6C7Fnu4361XvHdqC4jUK2Q/fncfXyzlJzi9X0JNYvJMk3jBAsHHFt/qBKwIm8kgNiQ8E91rwdlf8slUjJf9Pk91PYGmfiiNPtG+QISW3KfAJGqL+ZDxrs2RlpYYMrOn+u3A4j3hXZ5QrwwsD8gHDR4UZfxNTy3wyYA6rvEOe1lh9r+kwYxBRkJrItXqy9B04efcqXWh+GT9xfm0e35fmY0U1HlvjeczD4JN7wamRPywsdlnKdtjyVHxf9Wjcfp7rezvKzWoEubUdP9GDOzjgevGY0MARmA3zGY6jHGOU3jMhsre18N3lizqGI9Ec8ktmx8qW7/fGph7YtaoDYBdcEOxz01u5LMQha0Ynn5JK2bXJmU2sjS92h2+oJlEtlzVJ3tUz6hREWWQ1Gr1Q6pXGqzvAz1pUDthNd1+U5zM1o9vWP/m6aXJg5cmM5B7NFJLv7/O0l8iwuCMfMyzVZvf/3MGfGGuRgdXjT1tP4DOAzbz2BbAiqRU8MLfZ9sWI45TnTZYW8OpiF8GeqCBpKgPM27uVTj41MpE4pDyf9Bjw046yi/hqt3bkp8xNgZYfQRD5+Z8=","layer_level":1},{"id":"c94a4776-d898-4c7c-9c83-4c0b5277e26c","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"用户模型","description":"user-model","prompt":"创建全面的用户模型文档,重点介绍User结构体的字段定义、数据类型、GORM标签和业务含义。详细解释ID、Username、Email、Password、Role、Status等核心字段的作用和约束条件。描述User与UserPointLog、UserLoginLog之间的关联关系,包括外键约束和级联操作。为初学者提供用户状态流转图(正常、禁用、删除),为经验开发者提供积分系统(Points)和属性扩展(Properties JSONB)的使用模式。包含数据验证规则、唯一性约束和索引优化建议,并结合代码示例说明如何安全地处理密码存储和敏感信息脱敏。","parent_id":"199e1e8c-1238-419a-929b-7ff5de856b10","progress_status":"completed","dependent_files":"internal/model/user.go","gmt_create":"2025-11-30T08:03:18.437456194+08:00","gmt_modified":"2025-11-30T08:10:15.589391497+08:00","raw_data":"WikiEncrypted:piKNT601qxwAxFbFc+bbNzJoKRWjVA24DZgSuXUMKeYDI+Vpob6SIDpceCgG+l/AnQUMcMNO668D8L/pjc+DxNfz4opjFr47eGmfSFEoSOj02BUmYIq1+8tBBZwM0NM6Ap/R8/fH+93JriF2hkhH/QI1LHPrXcHtAJ6YHErKMPqrJ/AEnX8wfK76ltX2WNP2hmUhumJyZfyeFgcgKK4DrE50mF1xs0yYdaQX3SXBkNcXic+mFiMNzT5wc63rpzzb2PNogrxbkSyNb5wNjSCRa6sadqr6l0V6q1cDgDwnc9i8lOD7xRvVsTXb0XCLz4uVja/1KXUePqS6LAsBR/jbMb4WhEhXZTPaM0qgiJaojdtP6C+6Omidorre8rH1hPXrSTUDIGQbrQ/bRINtkdDsMKsWe0CyisNDFoP/AI1nmuPFclLcGGRdmHjgck8RPODvC7pQJxrhAbmk1fE0TZn2p+S1A15ih9hWSGJ7wchBTu6q+put/LbgrBUSYW2gusKem/mArc9D+twL7C90RW6hc0FtrD9Nzy/7FrYd8hhX6l3bNocqVarRM4GR+2vaPOJsYpzzmqMapaPC0uk+t2iNolIKvv3v/USKsOemtmJB5qsRW5UP0WEHzN9fmyt0dO+5sH2uCrWpEH74jCE3gyxBIKa1vyHQJz+0kjXGZEWB6aRu4jkdKubBs8b1CTfl7RiiLLwtNs8Klz9CgdzuL7LVzWeZqkAuEm8sSbE6HahlnGbX263ZgHvnk440yg283NdPX2cv2HZh7I3ScAGbOyik9xWEC2eFOhmZoKDBKTfzvqsLVT715wEyoBrP7gM6a6Svr7VEoUdYr610I16yBtFT9CcQzuduzl/fbJ4pp0QJZUiyMvSGWa404rksiIMCzIonoS9spSCNtmNsFoTuZRjnIJ/WoZeOItMoQVo1R1Wddwx+UjlH5+GQNiPj/8bD0wsnTvCiO0fKqJervbhsam3uITuvHIDXsSQ5CGdI+90TZgyGu1QpvDCaY7JmPtqqNiOJJY/UbzBBSNJSG+46JO+ESNkaJY9dbiDmmDyqtVditkHKCVyPIDPINLKHh9fKxw2uaB8yJmfEn+52MG68SbTcv3yY0M+UMBCKPtxRVOxZzrLp0hebnvu2QIfvRdyJzdiJ4jxzib57vZp88VLIQYiUyNDLpc521VpgWvIldn6lMBWCM4g4JdV8jy4IzxY+Q2tpMV+bTPLlyGqlV5YE4dSOkg==","layer_level":1},{"id":"6fd593fc-6c64-46b8-bccd-83c6d693db38","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"认证API","description":"api-reference-auth","prompt":"创建认证API的详细文档,涵盖用户注册、登录、发送验证码和重置密码等端点。基于routes.go中的/auth路由组,详细说明每个API的HTTP方法、请求参数、响应格式和错误代码。重点解释JWT认证机制在登录流程中的实现,以及验证码服务如何与邮箱服务集成。提供实际的请求/响应示例,帮助开发者理解认证流程。同时说明安全考虑,如密码加密存储、JWT过期策略和防暴力破解措施。","parent_id":"b982bbd4-8d08-4a9d-855a-8695e5091347","progress_status":"completed","dependent_files":"internal/handler/auth_handler.go,internal/handler/routes.go","gmt_create":"2025-11-30T08:03:28.234013981+08:00","gmt_modified":"2025-11-30T08:10:46.706805118+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg8ZUMSpnp1xCvBq18OreEntmPwAkKTvj/xz4caW7WUVHnVnVIbucfIx/iU9hqeW306YU7F4lEP+WNj6qJMOXQRghXljFNDYh6KMVz/FLzvKC8++fohoYv1tgSeOjOQxfyAR2aO4K60JLFqDQ01ctijZ5uWrVpwabqfHvHJW8XzgBA2x5SEI+cW5jXls0g54so3Ra0at4yKEERzDe8vobQD2FEZRvhKBm1j2LGgmbBOBR46p0y/CXaVi2c1y8SRE9yNApUHNN1PN1sUpTHp7QHDOMJcZx2aFMHdawtj7VZAduZzj7NCHIVMeO/9IHWe14iyDlN2RlmUxYVduw+TIVpd/j4jvsNRlmynCpVDc8Z6Fg+tdKnZi0OiKmLq0SOzJ7xFwE9+vOwARBnOEXKsWoMRWnSaxpzRy6k/I0yIjY3bXgvve/PvA1zkkrzx8CzG+huurKwKBleVgzcdGGHvokiR/Dk1L3U0oen3delrNCjrmX9olxy/leDaBrWdDI05OQj+rvR5alRtwp0n02JzFRJwsEEuIbrCZGBOQ9FwaP9NKCa3AAJmr+hje/1BmtRralXhAtkAtl18if7l2D6ubABYFlCi3wqIq+3ybtPhXUmCq12Gey9B6NaDOwLveXd7u8x7VQmhE5o/OF9xomCizl+dNzAYgDHc55ep/QfkIJvFXlpAlkgi5+4bBHL9eRMSeOLssC3yLjEpJnRWRpypjLFPaAoVKpD6bf7gpDdIovZ/EXd5gMkRfBV9z6w1rmMO8zJEdQ4riK9G5JVHNCXZ0s5uTbfqXsvm7XDJpzbHjOkhNmIJnZvjwf2hjnLmKM7FgfdPqi/wiDiTKYWL/mVqUL2GCWHN1FWwGSjr8+SBifgA1IabaqiltyoNuun8Lh8l8Aa8FvrkjUXPeC8AuGbQNQ7P7Q4uv4PXr8VPd4Le2YISSTQ9aeI5N4n2yiQ4Bn27EHl2zcUhqSSRNOlhnae3GYPQKtqvesDkDCaNaZg1lwMoR/79ORD02tCjxBUh8MJLT0XSpI+8xsfrXn6c1CUOjN5ktbcPUzF06UOdl8W+OtjTTC/PaJ7PRaPf2jEeJA+bcunZytqVESMDTNupnGnJ9lFUEk1zITrWO+Kh+cLU0fGk8K","layer_level":1},{"id":"5ac3ffa0-5981-41d9-9c1d-b4bcf85254cc","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"用户服务","description":"user-service","prompt":"创建用户服务文档,重点介绍UserService的职责、方法和内部逻辑。详细说明用户注册、登录、信息更新等核心功能的实现细节,包括用户角色、状态和积分的默认值设置。解释用户头像逻辑(优先使用自定义头像,否则使用默认头像)和用户数据验证规则(用户名、邮箱、密码非空且邮箱格式正确)。提供服务层与Repository层的调用关系示例,帮助初学者理解业务流程。为经验丰富的开发者提供扩展点指导,如如何修改默认角色或添加新的用户属性。","parent_id":"4a428141-bd7f-4a26-9a2e-c6b8a671400d","progress_status":"completed","dependent_files":"internal/service/user_service.go,internal/service/user_service_test.go,internal/model/user.go","gmt_create":"2025-11-30T08:03:33.383063331+08:00","gmt_modified":"2025-11-30T08:11:35.014900305+08:00","raw_data":"WikiEncrypted:7GMpDAULkInIjOJUaNlZ4ppEEcQnQc4rUg8oCehH/uot9+b0MPef6594cvWxcXMmN9D1LDEBqMUBrGHBm3Tu2GTn1JQSny7VumOqdUEeHUFTyO50QJ+U797HwVWBuytfrqf2Zigf/K5ApMSJh6lBd4btEVfuJskPnHsSzke/3/tOarw892C38Gv4QGvjybIYeTA/lWTJWuHCvvNR7ccNy3BMwttBhofqDkHWAH96Ul/1k1vBJ+bVQbtssZA+TZVs4RzoKSHU8ZoAWbjxAeEErvFEWk1BS6Miw9370otYgod8OKdEQwNoOL7L367SHwUwzjOmUqNOJfzXyG92kpT3S6OxI4Wf8XKxyoneS979Wl056ArKHpYJNTKgUB0pTk2rLLZqhNKxCsRdV4gDhrYeSZFl3+t9D94VSzwI1pYK1quyS5clx5OIuOntJxktzVQciZSqYW4MVhmo0Ug97xYA7kgXisHlJOG2QKS3X3p62M3Ph37kjXjsrczKPMf53RKOZlBb8aW+/9UlSkQVezzjfqvFlKui10UqHCtuwaTaSjuzgIBfwlPHhnzni+iLHTEQ+PYpFiQO2tmRhbprcLa2hY4UZST9jRqR0unwcIBvjOcAJQ3utdYxsWBNBZJuacL52hpyW9NbR7apniAzkCCPGFcij6MInbKK7RcvJWb8lIFuMTvCxOtmm7O9jTfV/tCBa/xoND+HRDIUgT2pD5xMIC/wYMO+Sl1vYUNLvtDTxBPzWGeXPHuHUpi3jnNiMo863zRQonopRz64oMLmxUuWvFCCQg7oLQ9Kja7F1gwuV6jqhjsXwQudZhgh7Rb6c9jgx61jVFkYbqsb+l5Ap+PdVm6vK0eagWa90aN8omwJE/ucnksUgA7C4fc0cZTO0uD1QMy/kHweZSDPwa923ZlGz+ZtsK8xb/g3KsphctSdP8doSI7NnlFchWzoCMUfREBtl0STIyNjDs4vap4uTE5Z/tCi8767ex00SbtDTNm/o7NpO7rfSDRV42Nii18a6DqpbDhWpQLZwDOdWrXKwJTjrieYMvhTbA8zzkL011zsa00wDnphagiBZITea1WC3gAgSi1iNVoLoaC2sDE8h6g9JVBhdRcBM5znbiKE3uRjTJJ01V+OcQK+FIA41ZfiY8xJa/kmvJoGiWapzMWctW2NMRe37PEBe4FLHTRtiYJjRFiUZF7F1cyZxx/wgtcIY9Iw","layer_level":1},{"id":"eaef6b6f-244a-4f26-9b3e-8980fd557566","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"邮件服务集成","description":"email-integration","prompt":"创建邮件服务集成文档,重点介绍CarrotSkin项目中基于SMTP的邮件服务实现。详细说明email.go和manager.go中的核心结构体(如EmailManager)和方法(如SendVerificationEmail)的实现逻辑。解释如何配置SMTP服务器参数(主机、端口、认证信息)并初始化邮件客户端。提供发送注册验证、密码重置等场景邮件的实际代码示例。阐述与用户认证流程的集成方式,包括验证码生成、有效期管理及安全考虑。为初学者提供本地测试配置建议(如使用MailHog),为高级用户介绍错误重试机制、连接池优化和监控指标收集。","parent_id":"41b4d066-f7bf-4893-8d7d-726ba5ad6534","progress_status":"completed","dependent_files":"pkg/email/manager.go,pkg/email/email.go","gmt_create":"2025-11-30T08:03:36.162532004+08:00","gmt_modified":"2025-11-30T08:11:35.671811099+08:00","raw_data":"WikiEncrypted:/tgmwByRb9hMFGCVx/eV9zoOoYTqmYqbNx7hmfJvEucwssG5gpc0oZN3sIV2X2/qaWxx1VYh9W8Hh/9Kmo/3/5qEqiC4CSc1OrFrfQF6KGni/gTg0vUOvjHWz1W3TRthDkJZXLx7RVYZofYjQ6zQV5BzLcydS/SKUntj//hiqmumf32cZ6oOvYjRm6PWHRTHnQ0fRcm0d66ROev0C7+8vnZhVpHAFiHoWRF7aKZvi1bweKwBrizQft4eARCXv8z/6k38sOgAe/sthJgExdhc1F8fq01wFmyWWY9BCKvG8ffI4ujor2yI9GgLbm02q8WE9zsx7Ge+plsDsqlohVCIyGr8u7vYwNdgmTlTvaTV4v2vdP0kiYmdycZ0YJiV1K+CNEFuU2U7+L/xNX8/vT7m7xeQeE0zwGfZmvNrUPoSQKiL370envjnFePRDOl+fMHwMMKS9+xDgC7z3vasOVWc9S+Zx/tu97hXoqX5I4W3tpw+Z0q8OQvlVfKVbTPQhrOUaqn7S77EO8A0rSMrnA+cAJ8+8/ft2l1EHVuFPQynroEkGUjHxPqf5swutVqRIgy0B9TqhrHVWsrbnbHXK860Hbk47GgghCfHz1ZPOINGwEnr5mu0qgbg1xUN86GuyR8uzXRMe/KpONFQboQmTtJ494fT2IE/5b9i7nIgYlXr3Hwi9sy3pz7KqEmoPV65oYmtPMM2OtstZ5I3uyPv944Ld2sNsY3RPaMIihXU9G9bmo5P0qd5bCQfLFGVYmYqaa4SbWXRfe0e9tXWTFCslkNR1JGuut9EbE2jrUOaAW2P+IG1MUjnpXRQVqtiyvxOwh3PmlbUe/+2Zb5eJYEYlBLdFDqdJoJp9oTQwN8YVWq85F4upIAmgFi5xHeXMjr60O2TGzxfIFNV+vvbAA6cS434zVI6xyCUgvFzgjx+ufZuJ8vWyIyWf8goChv0QBFi0AfxbQan7beTpNKYnKV1/mE/YzYhuwF9P6oecr+BUn8T7uy3fct8/tgWFqptTs/nkKuiGnApyU0jo9WJAzsp/AHOJIjHVTYc4811WU/TVSvZBEIXMMkGwlSHkF8aC+kxTXdvu+guDEttyUHaOLrHh3C0RnDKVC/B3zeM81FwLUh+ROZ5gz9ED3bNYZzGWlO70eJHm5iNUfSnwAMK84rlUHtC8KVngCD5jc51y7epwwhy6PHSV/91L2XmvUKa4arBq7XHYhpJKkEBYXOlNjkc4EtTpg==","layer_level":1},{"id":"f235ed89-3a57-41db-9187-a6e6336b7784","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"个人资料管理","description":"user-api-profile","prompt":"创建用户个人资料管理API的详细文档,涵盖获取和更新用户信息的端点。重点说明GET /api/v1/user/profile用于获取当前登录用户详细信息,以及PUT /api/v1/user/profile用于更新头像和密码。解释UserInfo数据结构的各个字段(ID、用户名、邮箱、头像、积分、角色等)及其JSON序列化规则。详细描述更新密码时需要同时提供旧密码和新密码的安全机制,以及头像URL更新的流程。结合user_handler.go中的GetUserProfile和UpdateUserProfile函数,说明JWT中间件如何注入用户ID,服务层如何调用repository进行数据操作。提供完整的请求/响应示例,包括成功和各种错误情况(如未授权、参数错误、用户不存在等)。","parent_id":"03318cbc-4041-48ed-8bd1-f304a381c6c4","progress_status":"completed","dependent_files":"internal/handler/user_handler.go,internal/service/user_service.go,internal/model/user.go","gmt_create":"2025-11-30T08:03:57.240223045+08:00","gmt_modified":"2025-11-30T08:21:18.385863082+08:00","raw_data":"WikiEncrypted:SmmNTSq96N8aZksVSKE+8+fFip3xylwIkZVAf7VAZKswSLkG2f8qfdT2v43l2+4rqlDP3DCfz9G4p/LwMF8Ogix53bqsYduGMcX2Z/C/PeVNmLgqAoiujOnJXrj2JzNwBWe0tGtv2duho/pdSyoqSyxG6pgGpo6w413hXW26HvB1u3Pk6NLTbSyxv3/xgZC5rW4DFR8+nOwfQ2jOHqhy11f6wR4z1mKMmv5TJq1CLGDQwZelFdcfwI6hgahW62yh4vgd1wxzzzfoPj2czkUuZmDtgNfd9+mZH+dEo5I+X26M1gbyExzxT/PfmCjij/oLmjR7jYm1dvOrt6m63M3cOfszp1OTOyqAqf5iPfxm4ZgtgSGWTKzG/xXg90nmrCh6re0hUvfbftwj96+BCkVKCAh8WJUtWjjFoJlyX0t9tYKOa8BWtoalWGG454V5UyDkoPKGsdnFpbCm07tknkiWDECMr6XvnBmPwagUgK9N9nK9Q9TNSTdNbrVCfazV54Bq+nEUpb5lQ8Nvu8eBHVLrEllk9KWeULdVohQCd1bEsY0wpcv8IDoqhCej1GwssBPfO+WxBqNGPfruIvejs1+uNe/YFxA+XOEdivNDxy6TOQWWdVUvrNG4vv1jGIRM4qiiq3OCtFEvdRJP74xQU2muJLGDXDsUXWUYy/nzkOKa7yJ8tWQoho/2L/jGxGvlgIqXAN34jirfV7Wlb24/5m314+DG9l3o5KfwV7AuUzoIy1WKteBv4wzaruFguHCOA6JBr0SlsW+4X4TB6rcG1lv0f9euaT3A4eawIPtBdwStmNX56IMivBIr349r1yoP5biLTcbJ14wM3sDXFsWpvmAxo/sPk7SgqHwrPZqxklHKMLyEIIdwvODQ4vEAlCETcT5WZ3+1hTbrvzae3WzSkDlEjNwITztLnSbBxJy5O2G5IVuu6k9xRRlbGZ7dP5zz/GxDMWK82u9OzcNHbB0Tpj7in3rTI8Dtszer8FfUYLCfxm5tOFMyDJbQgro4+uCW/X8Mxw6WE40zeO7THx/scbOewwTwXJjMzoxwky2Nm9iebxgw+jDcJJby9Nj16i8CRzBraFFvNj+FHgflMEn9O2nj01SCSJw/oeNp6tp4r8ytWpGsCKA83MtogL/yKuKceNgwNHYdpmAK8m52UMrl+JEReLi/oXjXen/bKtLYoNPp3MGbasIlbYZuGDqA0TZFvFHFfAmFsjxAZ1rLL8MVb6u0sM9SAHW8rSXGF+GAxdqvnQIkQHJNMmivV/egFcFTqCm3G+1TQEGn+13nVeumzgcsZ6aecM3fkL/IRDOEyM40S3rnUNnGBu0XtAmEpe7QBp20oxmxKcADuaQnOdckrrkdWimWGgCDQV6cogcOHIldeeEPQ6tpRscaBLna2zPbX4G4R3g+9nTom5uOZQEZkeS2ng6LT+6TQfI2csTDq1texNjgclpyX8uapPtb6CEbwlyEY7nWOcYBYhkhRJyNOprgn0AYtg/PqFw2TjWi5al85QXS2R2z4rZMhr4o54ysjRIV","layer_level":2},{"id":"85cc17d9-9b6f-497b-a933-b33c86fb1d3d","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"服务器配置","description":"server-configuration","prompt":"创建服务器配置文档,重点介绍CarrotSkin项目的服务器模块配置。详细说明server.port、server.mode、server.read_timeout和server.write_timeout等配置项的作用和默认值。解释如何通过环境变量SERVER_PORT、SERVER_MODE等覆盖默认设置。为初学者提供配置示例,展示如何在开发和生产环境中调整服务器行为。同时为高级用户提供性能调优建议,如超时时间设置对高并发场景的影响。结合代码中的ServerConfig结构体,说明各字段的数据类型和约束条件。","parent_id":"b05ad424-1454-4cb4-9d82-791cfcf7d650","progress_status":"completed","dependent_files":"pkg/config/config.go,pkg/config/manager.go","gmt_create":"2025-11-30T08:03:59.905376693+08:00","gmt_modified":"2025-11-30T08:11:36.226637841+08:00","raw_data":"WikiEncrypted:DfAL4INOq29Pd0V8no8kjDVdqiAmsd9wMMZq8rmSjh8FLYWG7Zize54U3wNePVMaL31W9Jopj16LxWxpeOPxVAQH/qk05v30QJgvmtMQaVFWoh21nDPUbPKRREQ4/9h7bnXDY/Nnnp4LUMjxzF8ivbavadj2c8QnzzP/2ZG+l/0lEQkmdz3ZSgL2sag21FAog1sxigZRHiLPgQRjdYYg5rnubJ1g6zlZPKZhjWxS1GK1AlokvQjpSd9e0kdDdxrBx4R/T718wZHQLSYaEHx/LZEVDC0EDkVLk6W01RCXdVox5U1tvHsWBs1kmbB54jRYzgwNDmSgCXbeAeSbIA6jgpt0lpth+bF4B+hjmmr6N2bb6Y2tms00AmMi1G1B3RCT0FAQWgxfh0WmKOio33hHIu42vmVCZ1o0K78LR7bkV240h9AVznlMxedsT/98n89BTkfLwW/gIUZETQVpqme0UVdrA3HcwflXJauG7lawW4lwX7q34mgItOmV5C4K/dtYx6BbXnkhImS2sysms2i43z+6kXCy9OV4hQ2Py0HJfTOW19cO1D22pKumo0zYVK3KGqb33u5Wt/6FgR8Wd1AW5/aKVIaF00cziHzPL9gsUTDUk7/OTcIfMrU8J5i/xR62VETsA31DSnnQPYzIszZpkwSn4yjumPusTW9g3quN14PxEv3nPwRlgTZxd4PXpKTtMYBysaNM9YdPN/g8N8bKoy0Smb+eCuctXm7KK4PhIu/dDEb+23Q5+tZiJJgwYovNKsxGfyaZZUbLOSuF36ZECMoSI++wL+zqkDpmGrF529wOideiQOZ/l44qWoJZCWC4jHWg+sEHkb5r7rMUnjeZVJbz06XLUV8h9ekIY4/tcyqzp5NKW2oRyqFB0yySXjmXNNfK2VidQFk1vkUZ1xzR/xDYQ6mWTvGzsIZfb4+cEaNT7q3tiK8SAe4r5ZDU3nvCYeRGKDbYD4bR9TGFRwMvsJEa2eiZim0yZZpUVrs9TnlR+Ki7TZvNKGiJU1oaWKbgFjIn1HdYxNOhUJ1jqhINfsAYPMSmU+d7cCprJ0GGXjkvDFsW35ajPEXO68JQAISFAOvKBWupYGPjT6n7xjEIpHCH4wB0CzhsoeTREyJz7GA=","layer_level":1},{"id":"41190bcc-3fd3-4a2a-8772-b26e142f39e7","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"用户注册","description":"api-reference-auth-register","prompt":"创建用户注册API的详细文档,涵盖/api/v1/auth/register端点。详细说明HTTP POST方法、请求体结构(包括username、email、password、avatar和verificationCode字段)、响应格式(包含JWT token和用户信息)以及错误码(如400参数错误、409用户名或邮箱已存在)。解释注册流程中验证码的验证机制,以及用户密码如何通过pkg/auth/password.go进行加密存储。提供实际的请求示例和成功/失败响应示例。说明安全考虑,如密码强度要求、邮箱格式验证和防暴力注册措施。","parent_id":"6fd593fc-6c64-46b8-bccd-83c6d693db38","progress_status":"completed","dependent_files":"internal/handler/auth_handler.go,internal/handler/routes.go,internal/service/user_service.go","gmt_create":"2025-11-30T08:04:00.377286761+08:00","gmt_modified":"2025-11-30T08:21:54.468668789+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSgwUhInTJnzwP2a6KHGwzPCb3jIeDxpD+Jy/g6xj7ttmUYbJktd4iYw9kfYPpSb2vtlHTSXk/swminkCRCjyPZBXpGjuMpZoL7WUvr84wLOgEF8wM03j8W05SgxQO7tHGFqdnAGsoOGkNQfYvMbhXgixPwqpMutkFnQHPwcNdicXOa8LcUM1pdZxr3ls77jQKYzNh0FXRiXKQN3h3SuSRaJIUOapMFoLb1gXxxPrOv8rx32RAPA12t2NrT2r6MeiChA5rdRHLCvresBKjymPDKulLJE+kQDuGO43IuVb05FMH70SvqtCsHGZdHH9wMXhsgCZdZxi5f5c3bQdXujliQwn6KA4UNm4ae6y8VbmBOICcp9/IY7m0kv1TkHXX0iNZVQ/9XyfNAv534RR6ehg81uN7wlFtpyEgpD1hOQR++wML9k9ooWpHBaaVxg3AbNVovmGfyZoo6/pD8dqc0PRJ3qH6RPOOv7h3h7GGh/XwjpWmu2oUk2i/GsBgJF6QNcCb/HN2MJMJGkLYWsIrS22WcOZ1UY+i7snAV/y+NMOIzXQTioQsKcDolfhn2P7GWkARk4Ss/F8Cp4r4uXsPpA71yncB0HS5a7oF5IlDI3z2VM22ScxwBJ2zGTO05eL9fjsTSZanKOeJM+tkZFxcZiGZatMH1lDox9XxCExFGZijjBhLleb3OfTjyKolKpQNytbqr9o3UevHJL/GawvEwOUN9mMJtpKqpoBDM3M/IsSrE+P0ge0xXK4XKTsPEeSpWb4zR75ax83qOdGTwUl/qcKUoyt3Apqhq6W8Lqg8+C2dOJSudCHI2W28Cpq5tuDhEiclTWmNjLVLCnYER5nkC86IxC139bI0t2o8SRbHxhgF0z+3eyzLjbI4MzZGf5iEmX6DTXimk1zcstQlPCTgWCaXaCnvQZIfY5oSuCvlGCmND3YsKny4cLML0tLAUKFFt0ykQQjMREtqWR8v6dv6Lft3WRCSjdtNSby1A+06vi5c6EgX22mPvfRf2eT+S9jbUPzuJmnEnbaXDveR4NL30WwZIBhIexPt234o6giseUypQ5592w3EyoBfQWvhkMqje6U1a0uYhnWME1R82bN/b9JhHcB2y3JDpXhX5T5kEXASxbG0//Csnq7gBNWob97iSkZB97K2WT3RgI29SDi/eMWwTnHlkvJoNdxTmO8tQvZrYWow","layer_level":2},{"id":"b5e9f8a7-545a-438c-a589-795e2448a293","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"材质搜索","description":"api-reference-texture-search","prompt":"创建材质搜索API的详细文档,涵盖关键词搜索、类型过滤、公开性筛选和分页功能。基于texture_repository.go中的SearchTextures函数,解释查询逻辑如何处理关键词匹配(名称和描述)、材质类型过滤和公开状态筛选。结合texture_service_test.go中的分页测试用例,详细说明分页参数的处理规则(page小于1时设为1,pageSize超过100时设为20)。提供完整的请求示例,包括不同筛选条件的组合查询,以及响应数据结构和错误处理机制。解释搜索结果中包含上传者信息的预加载机制(Preload)及其性能影响。","parent_id":"f92758cd-1d31-4875-9ac8-9408d5143422","progress_status":"completed","dependent_files":"internal/handler/texture_handler.go,internal/service/texture_service.go,internal/repository/texture_repository.go","gmt_create":"2025-11-30T08:04:20.230319805+08:00","gmt_modified":"2025-11-30T08:22:09.536384017+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSgyL/Md6tjWhpIbtHQmhMXljHnoDNtAfOJxrB7ITDGf/7cV2fYgOMjqu2+jtAGGMHygvVl/pTWxjq1GORYdAlEImTT5ZShlfjiMiV0QjHsDRnJqjsSe3zZESz3iINbs1ORqvUKyPBu+lRSxqBvAJKQob7xCzqqMzy5zxw+mD6Tv/TiMeAhn4Cfcb5VacrzSJS8C6EMGMMIVf9MTk3wkBdDayQU80s8B2oMuq20ycjkKdAatZqqAwiVrGHUYOD0+YU/JGruBt4CzioS8BR4IkjkoY/EztLGBkRTyHVVQUUI+Rr4ulEgOwbAVj3NLItHyd4jmgp0BljQ3EYk1qyW90C6dH7OiXGAM69adRm2gZ+7yNa+QYjHTDTMUs2KOQuGOFm4Afy27XlRFrpoWbmP9ey2EArWwDF0TzYbyyqphSC+4mOMXNvPiZHGhurh9gsCnY5KxHky08MjT9kSszxm2L2S5JTOkSA1HMpyC6DT7pJAEobLAEUKCcbAwm/iXCFH5C/wFsKTFcQ7PjOcmOqU4V4dwf2uiTOpj6yMS2yf4/WJV8v1d4Y5DuKjwCjUo0F8ptryF9Wfm6QwjQpYvoFjBzq2JgqwX9cbgRvTqBLt4aYvk+hD32JuJYD+M55Kxds+P0zqokPOaHkFuyVRdzjSYgT+h+g3ou2BAf+RvaSATVa3PxCArgCvk7KwMZHUP+8VgkWoegsYrwMOjm/vm4VxiFyqDv+H4xGpyZmCpYJuW19XqeZqalVozCUdGKkRw5bzfp7jBPTvGuW6go1k09wvDhUJkxAxuCVwY36pA+CLE68XEcqKo6Xg6jQQ6LvHi7Oiah2uXfYnS2Wd4jeljfVTe0yT7K/ntcYJPyFCRDOH61ZQiTlTTEAMKZbLyVPputYAk3vE5U9gNy4ugfHQb6OFkWGblP4XuZ5rHLzxaXszhtAv7tisWJCdXz5lu8fOuW7IwMYPJbJTkc+pco96X0PeA+7oYnd/e/KQVISU4yVqLN+fJfxL7kWe4pJSTAUJ2KSPA0L0lqBB+3P9+5dHA3lPekWU3F/bJM1QrVrgz3L95qJOyud9gQY3k8BKyGDLCaOg5iT3pWm9F6Tsp0IonK0B9aXM1jeOparYUbJnLUH7qOZYMgnG8C+/5YIISkfi3c5Qey0EuJ4GO/tAUIxAk3r7pwL1Yrg+4zpAqwk2g6e7wYkDYlmPkEROnxvPLH3JHL7ZwwHOD95e0adid8tDBnkJGm9ae57IWw4vJHUB2Fbls/O7qCEKmXr3Y5R2H0cErlMvfLP7YqCXKuq1rckEOmkj7rFC0o=","layer_level":2},{"id":"f0c34d0d-b748-4f91-b2ff-c15916757723","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"创建与列表","description":"api-reference-profile-create-list","prompt":"开发档案创建与列表管理API的详细文档。重点说明如何通过POST /api/v1/profile/创建新档案,包括请求体中必需的档案名称(1-16字符限制)、可选的皮肤ID和披风ID参数。解释系统在创建时自动将该档案设为用户活跃档案,并将其他档案置为非活跃状态的业务逻辑。同时记录GET /api/v1/profile/端点用于获取当前用户所有档案列表的功能,包括响应中包含档案UUID、名称、活跃状态、关联材质等信息。提供完整的请求示例和响应数据结构,并结合profile_service.go中的CheckProfileLimit逻辑说明用户档案数量上限(默认5个)的控制机制。","parent_id":"394f74e0-ba8d-4994-a84a-5ba48d385e83","progress_status":"completed","dependent_files":"internal/handler/profile_handler.go,internal/handler/routes.go,internal/service/profile_service.go,internal/repository/profile_repository.go","gmt_create":"2025-11-30T08:04:22.500423689+08:00","gmt_modified":"2025-11-30T08:22:53.290307145+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg/XwJnQS3ujeSdmTfQruu6yah/xPdeUXCIYIhv+dHmlNhVaR23dm6qWOqb2N/uSSSeNnjKOC8zK1I/YKEy03pckBVP7toX+Pp3m8zsDLCn3bwSaubWuJ2B2xHQtI4sqLsS17qyS52MXeTwaGA71XLwHusK56tZnWm5H5IlUbkGBftvmhYf2RBad+kMhf0/snOC+W/5zYbIIjF6s7cZD20JI1jKOe8yDgIsAK8xcjZSmP/FcFfI807lgfzW68Zvz0vKr7QoVWIZmKRyqlVAWf+rktdeMwyAZoz8j2zAef7d8u4q2AJdk8l41AlS3LQ/EHTcAuU4bdxmAwz48z7SwrTBg7YWVu9urpXshNoIOAg97gWvuvnQLKPdWD730MDoLemDGKe/wK6vJso9LJJ1+4+J9f6Eqq4/eg90pGCT6YTGn2C7y+8e/NULZf0624DX0F9l7AUHN94JCe4QEod2kIhAsPPvBcOHlfJChQjG0YRMWHDooGJkxh/7w7b58gptYtdAr7LT7PFNt2kmMWhWwOg6iwsJGT8pZblsOE2NdXej1DuvXT/VWIGY53iRrv2gtY1QTwRRGTss7TjLs3/sueq2dVvgEchuIhxQFZkVvRdQ+E5ODgUZA4g/amPYh4iavkzlNuM7vR/cmz3I1ANuJrKyJEk0EJ7AHWG5JzQ7u3iolyY33Hhh0vS/VJmYgbQV9EcXR0K5QZXvF2t9y8bWzzDMJHSR24ilqyqyt5VH7FkE7VBzl7EH/hC9P9fjvIOoq8Rxl2q/2W1Mt+lTHAtJuRzbShA28D/VWS2b6bdNRTBqLD0HlJj15XutaywBdGu2NfvGmEcONes85m4eR3sfC120yM/DUEGsP/lO3QUb7OKZkZIfT8dPSwA+5bBZZpGeNv60zTGcXj/fzSBfsfHuGiz3WEwsWJHEgiYSfRsUpACS81ugb7bs/Jp62zQwSPd8qQttkJGewFBryKgXakavfHoLCTa6NlUHIvDGuv/I8tA40BVeMdcgQESHQaUF5hQggE9o9DPz2dGGl658sDxx8bljWtkyW7lVhK+XjaCOtxFKU1BnUr6XIhA+Oj8VgwUr3GcpOx4LcSSpX/APdkFvh81QMbao6j6I6t+pf6BikR+VTcRVvPa/D4H/mWb32xIHLtbw4XvJ0jhUSTZM2w/i4y7te8pPc4HVtsIwTSbQ1n6Q6jCvNcCvwNP7sLdfxtaqAFoQRfiHTxHyHgGv7f++ZuWwd1KXH4XSwXVjqBgq2WiBLhv7+Wsbtc1/PUZms28nZqENQw1FiGy4GYFKGcVQ8CsEULYlE69yTPrtQTLsKekCO1vQdgSb+N1h4/yJQe1NdYgjuMR6mnUKDqsItOR7RYK0KB7nml9WEs1eTcPm3Qzknj78JpM8wG4+yCyYd/hUanfkbeEac6fq2jcjgqHAbojjPeD4bMtdmVJYmiFJom7ooWxcBseIZRmr7ckGXdgerpGh/irPQvPGyvXatJKK5MkB4=","layer_level":2},{"id":"152cfadf-a496-433d-b28c-2fdbbbe7a22d","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"认证服务","description":"yggdrasil-authentication","prompt":"创建Yggdrasil认证服务的详细API文档,涵盖/authserver路由下的authenticate、validate、refresh、invalidate和signout等端点。详细说明每个API的HTTP方法、请求体结构(如客户端令牌、凭据信息)、响应数据格式(包括access token、profile信息等)以及错误码(如403 Forbidden表示令牌无效)。解释authenticate如何验证用户名密码并返回用户档案,validate如何检查令牌有效性,refresh如何在令牌过期后重新生成新令牌。结合yggdrasil_service_test.go中的SessionData结构,说明会话数据的存储机制(Redis)和TTL设置(15分钟)。提供实际请求示例和与内部用户系统的映射逻辑(如通过GetYggdrasilPasswordById查询密码)。","parent_id":"21debfcc-c026-47b1-b462-fdba6e17b157","progress_status":"completed","dependent_files":"internal/handler/routes.go,internal/service/yggdrasil_service_test.go","gmt_create":"2025-11-30T08:04:23.829075686+08:00","gmt_modified":"2025-11-30T08:23:30.436535513+08:00","raw_data":"WikiEncrypted:XfNX4oZehM80K7xiLZZwPBrlQEEzPlKWghv+hbKlJ29Hl8lSlx6Ys7GPiU0lzHGay+4ZV73lvQm4oN32TyEuEwaDV80frdmJdBuwOKxiKqko1GcWCLYFbwMNHuZed/GQcq88dsBHKP6It3Jh6gg/fst1CwChVb7Zq2ZS+Kei3Yqnrlksp66jEfR139/OSNjCSk54A+pfgEoXeHMTE4bTXgsAj8oKtXcNkUvUbtn7GWeo8zBTRUqdwz5UIMHtoRtum8VM6ahe044ZP1RY54fa6sl++ZWqk+SDzRqVf7KZHSWEQcjbym21zAsfH3kkN3/8IBGfynTgbRS2lIF68ZiSkPGCg0Ca3Ty9eeGpGifoZ3SR9CzXNz+COiGM/qZ+quDnIa0DIF1nqg7cUAynAMvKrkWoulEG8iGaKjC6qU0gRDlkFkd0tuO4uITvOhYYomj2chmSAwV2kM1d1a+fpZlOAfflMbu0d3Ud8wSqpA9lMTJ+zFr+ffUVuv/dNwxVVgyXkZoMhPPJ84tbZ/NRgJ7GfJJITCQn1RmBlc4ZC2bQN96CkCO13jI/M4BIJQ+zDbbUuB/KIk8LGfvrMh+pBkiuQqTnjREtA2dzWpt6Bl8dh015CZGXYCSkw9tEVXiJArrivNyxcKrN5sIlBBzeu+kgGvFsIiOz6Yy62INikVmylMwMOvPiw6eShx/VdkTPeTmsO17dqpD7mTulB7Bf8+aXeIiv6c0DkmBtttR5d0+nvOCIQk/lj31hgN01pz164xsjHGsfzc6jpPny9e5OFbWr0Q08KozNtkw31l/FrOvmZMOklQ7UAkeAO6YMnP9a1eyjAP2RsveIOpLR53aWmjp2z0m5mC3IkIxCvZ1O30dG/WRx1ZkZJYZFIQjZ1Tke4p8z0hSkwBH8SU3xfARfzbZgcO5awv+wTGgGU3n1wfOvZAMUnNzL8ZujjymEbk99SXWx/j1br6Wj/uii5vegBcD2+ksEPVm3XQAESWWGOIQTDCwK0427hbghfTkKr7SsxBKe1ViXb07YlnKmjtxX/QZNEjMe3JslGFBZwFj6Qo419pOe9ROW44EYxIVLuth0MfLbEU2670swT+6M15YsEmLxEg/QRNXFwZqEnL7SV42OtSSulZFYJCiV6tBoYzv1tA/9N34jhlb0ZhM2VhuFkSzqiYAOrX6x83ODn+lyNBDW6j6hYfHLLSEusFX/ty9cqlsH1ou0Ew0yLzdM4QDUiMgv56PvPUgBFLtHSfTDOJfRTdaCF1LziZ2AZHSNJ39hPp9IkQfemhBGSGrO6AvbCHLgn9qMJ+6tk42KjrMPvvPWRYXS+Mm46sX903HjSxHpO5hg13sZ22hgdu6Kuf2WzHRmf1SI/LdhU4ERGiTse18DBOWuIKOsBM7l41ib8Yg5qQRNjdqCeSikgDlks70PASl9AGHjrDqbblVN2ydNpw9rQq4UVT2/WRq53AxoZJoI5preg+RUk17vG47zArofReOojQ==","layer_level":2},{"id":"b128e094-7b2e-49a7-9737-8aab28691acd","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"材质上传流程","description":"texture-upload-process","prompt":"开发材质上传流程的详细文档,重点描述从生成预签名上传URL到创建材质记录的完整流程。基于GenerateTextureUploadURL和CreateTexture两个API,说明客户端如何通过分步操作完成文件上传。详细解释GenerateTextureUploadURL接口如何调用storage模块生成临时上传凭证,并返回PostURL和FormData供客户端使用。说明CreateTexture接口在文件上传完成后如何验证用户权限、检查上传数量限制(调用CheckTextureUploadLimit)、防止重复上传(通过Hash校验)并持久化材质元数据。结合代码示例展示请求参数结构、响应格式及错误处理机制,包括达到上传上限、权限不足、文件Hash冲突等场景的响应。","parent_id":"dd0cebe2-7ac4-4c48-8aa6-511b6d9ef7e7","progress_status":"completed","dependent_files":"internal/handler/texture_handler.go,internal/service/texture_service.go,internal/model/texture.go","gmt_create":"2025-11-30T08:04:38.254189744+08:00","gmt_modified":"2025-11-30T08:30:00.700773378+08:00","raw_data":"WikiEncrypted:A8Ib0jJdr5SBHRrM5U0HapWOeebkuCAJn0oSW62BCLXKfMFEsAyD939hJHIpq4De73b8JxMwDvmohJbaV0Dw5UNPxe73TUpcnz6QCTFNpVfT82EsnMIDjUcYM+DRaAdEV5PRLiZ44XpmWbJ4HzK9AP7L17oxqx/iXAOp+aDGioP/1aeNc4uwWutTBaNqoE6wdoNjJw754RNBzt/cU5/TbG5gNDddtACvX999hYYUAjhXVl+bNh6uakX88gP97kgbDRDm2l1yuh1CaO4NjpbbGYl8faYp7ryTVM827iJi7TtdB2Oll7Lu6Jj666bbr/0m8XKzE60eFu6XjwuS47vZ3ly6SUxDPOzHfaiGynu9JsrWUuSVboAJLNkMsDieIa3gTxQLaG1m+SFBVNkMpNYvHh7K0ziYr3A5dwyQ2ziumK1NPAm9u62wlDBW/6BYtMjnUyr2n3MLakfX7wN0iOHAsS8yTL5HD/jTwWfWzqz+GwVeHUxzgLCyNA1Onu+trHpLBLuZ1gzPEn2wrSp1bymLb/06aIMF14WpfSPyQkguz/WMcu3KeE2Lj8PNarpTeubSvFpdMKJwm/aHOjzKfwSeJyop5LF945NcU4w9kpf0G0Phc5RI/Tl4MF8a+Tk/Yje5+1H57Gn2LHUGS003W/MIv1S8U2NNsJYTdjA4CkKwfUVwp5Cmmq4SqHva0y5zWTCiuL2GxJmr1qTvIYmM9ebCaIfaAGL3bt7Qv6o+78x6X0TCOURkMdQcQi0mTC1YhZa3QN3woq4r96m+jU9o+m8KuHibF3Y8lczvi4R6VmzkjShn5D9NE7tqYYNwNAthmNmq0PrOXBO4dWoSEprhX6dIAhAzpr4yI0OUnuOmbXhM9uBc0XOYjFicZmi43ydp6pIJL13JOulrzYXRsYPaFVgFoSyYpl0MROWEaoty/vW48+gu9hHzRWR0vEihrF+94WMVqzn2QWfFueoUxqXRmeEMEdilBrXJwMolcOFm56I9Y/9oyqKyC329S7+ChEZzwwlhKIBDYd1zKjhnt01Y+RRP/yxFTCD0QbUgyDIqAt+dVJXqm4kVCeab0RPBN5AUo6bliIbC++M3DITIaJLnnUtrTUlt62ztrlmgizKt/VJ8tXcoviaNhxAQDhp2zyJy7qdCJ/e3UG4o5F7qH2zSjnA3rpmgu5t+JAutEHIepbgwCcCYFvVOBuizhMUTWKxaYp4G7wl6S5ys7I1LqCkdwR3Y88AYnJObRvbGsCKhlPx7sT2uxzXNQ3o/FwU2+i7C2VLFCLrN/yTwISrQOOR7KzwKAb3bQKgFtBkBhhSf54qBYyRam+PLhdiGO2h+t0VLaTQKN26kRsNEkWHBb0CDSp9hObZ0Dw8rwxgsMzWgLJy3SOxAtBJ9kC1+QaTTjXkARHPrB2GIX/vEvCt8Mm/KeIcDjgBLa0ZqkB3ng3RcgfDiO1vN10NhTUAstQCJWg0wq369fxtdstr6kU3Aaw2+R6OMIw==","layer_level":3},{"id":"dd59e65a-8360-489b-a623-15f7b53c41b6","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"快速开始","description":"getting-started","prompt":"创建全面的入门指南,重点介绍CarrotSkin后端项目的设置和运行。详细说明开发环境的先决条件(Go版本、数据库、对象存储等)。提供逐步说明,包括如何复制配置文件、设置环境变量、安装依赖项(如swag)以及生成Swagger文档。包含使用dev.sh、run.sh和run.bat脚本启动项目的具体命令和说明。为初学者提供清晰的路径以成功运行项目,同时为经验丰富的开发者提供常见问题的故障排除提示(如环境变量检查、依赖项安装等)。","order":1,"progress_status":"completed","dependent_files":"README.md,scripts/dev.sh,run.sh,run.bat","gmt_create":"2025-11-30T08:02:55.663327245+08:00","gmt_modified":"2025-11-30T08:05:40.623698258+08:00","raw_data":"WikiEncrypted:qfgbutC7oyxR6nMxrwk1ODnNMBEQ3/sG78fQT1yXWju83LC7H/jAM8CEAvWT8huE5OClmQiIfNYNxHQ9s7RRS0qKOV1Xow/Q40Lf5w81YuvH8ThkAHZyNs2Denvy2Ct+9miZhnQUyAx0ESjJHo3JUyWmTgUM6brXb8Is/mfsyfIDL6iZcOxmsAHgyVvkN22UBqYCMNpF8rEWNFTRyrHQrTOMP/lbXsF2/hOBBdnpYAN96OCTWu3eFX5r1YtPODqFxHDY+PfYTKJcjsagSNpZXWF4rVxZYvVKreDzEPED9mTWkqEFT6DVfA20QTOgJ18EtnS8OSUY1ts7GzbKpx8zZxS08KntngC92c7n+I0Vq+7fGciLG1HEiC0zqexWDgecBxiaEnRvQXA/nG2v3QstYo92LY8VGu1K5pwWB/cDTmjNOehOxD/qzB1uJnhnXSIzoFCHlzus3epOu7YSzlgKmMAbmuqAsVFbi91KVYsU2mdNW67tIib6Qp8mSn9I5zEDOrwfCwByytnKXW4dx3ul6uNFCajs56w9fnFON7pKE271547JEGmWmrJOxC6Bmh88j+1VrqzB52LyVi4JlX8Uf64xnAO+56svfn/9TGD1952ukb+ltEbHfWgUnLAkSkwfRsL2D/9wnXHicnOFv8cVsuoVePpd9J2wv6cCZ6lMUTOk+1LmSvmKpUVvHpYusqtvsKlruo/w7IHxyXGCL/4HpHVb3m1OGVMmhfvbZf7MKV1szA8iWiDQeyJa9kMStUhrlzxchEdXOS/kKGIPlANfPhD58LFLR7vWnbY7p77XYyT3zGLHlVapdputN2DS1pG9SOYtUc3iA1W53AM1A+1m12u5TF4RWvp+pig2cp1SXp2CN5rRBEQExi/9qA2d0o2FhReoCOMLkidu+9+MLD7KmQTjrS3t3KZms3W8m9jFoHBsRbyPxlB8cmkyAGSonzaVDEIWTBr5CFNk3Of7Jr6JtdxNorUCNe6UuSWrNeYBPIuCI57OufiqxSNfG2SKbS66Nclldnl4hUBMS8Q1WJtlSZw4h5pPStx6Ra3tk1kAv8TXj89nkNWPrcryfUF9+qX+9+gYIVVb1nARz7zTmao9FPYX0Gy96yzcpmEYDDZ+Ii4="},{"id":"2123bf68-dad6-49ef-8872-ab05d95e3a43","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"RBAC权限控制","description":"rbac-authorization","prompt":"深入阐述基于Casbin的RBAC(基于角色的访问控制)权限系统。详细解析rbac_model.conf配置文件中的各个部分:请求定义(request_definition)、策略定义(policy_definition)、角色定义(role_definition)、匹配器(matchers)和策略效果(policy_effect)。解释g(r.sub, p.sub)表达式的含义,即如何通过角色继承实现权限传递。说明权限检查在中间件或服务层的调用方式,以及如何将用户角色(role)与访问资源(obj)和操作(act)进行匹配。提供具体的权限策略示例,如管理员访问系统配置、普通用户管理自己的材质等。为开发者提供如何添加新角色、定义新资源和操作、以及测试权限策略的指导。同时讨论该模型的安全边界和潜在的权限提升风险。","parent_id":"a6e048ce-402b-4fd3-ae08-096cd645d9f7","order":1,"progress_status":"completed","dependent_files":"configs/casbin/rbac_model.conf,internal/middleware/auth.go","gmt_create":"2025-11-30T08:03:12.318349258+08:00","gmt_modified":"2025-11-30T08:12:36.088292848+08:00","raw_data":"WikiEncrypted:SBjMjUirgbHGfkxkezFF208BDhSOMN7Dw9xzuyqO08VdLLrpiK1U/nbK8gi90OLabKy6AUHHGGxCvELndGEBHhBzaZ0avX/fDjx4Mad6TEfMwquImQqWW7n6PbrwwmvGHDCqcLTc87IWTNBAa2DES5uHE18LBU42kRP21WK0bgyrtkwSsSCWkE/lG6p/G6ys3ctNSs2cXAYs7s7e7XnCGeViy2VYruNibibPfm9Hs+xgeLXsH1OuazurpXJZ2nclIN+SyelxHAne3D3vfcRy9rz3NlF/PGcVUyYH7r5dOiR63eW2GBauqjGKnWO3Hutq8UGwdJCQTP7nNJI4hXoYdg9nQF/NkLQAGhCfIar/ztQao6LLjq4kCJbCswksK0rCSCs7YRYkqwjf5e2mUyw2ToAaF6O96LFYjeJSj07riBCQFZihl9ELC4Vpf6LpKmHArxMF6ybkhDROZOcHnVHSkzy3frosOqhWYm3dHMJvNBps+oxwppzFPKl2wY+GiRVND+ukNrTrSDgyfzP41FDvC4+gwR5luFZ1q/IJRWGHqO//sB88Lffm2HtjqOniYxYV78LhoJaNs0JsXo3dxlfLwE+q3ZIUDdvzFZkV48/wXT1gPmwib1T9mIQpNndRuGm4JNmUDL80VJaxv1HSdMQNcWBYj6e5MS3fhi6EKrwiQjr94gtSqrE1MuIBfT0uoXTPWjGBHFmMnZCcHTz2PRq6aBeX+A/2AbKwClF1bLNmXpjK+ap1BgitxApTZFVPNlh0d2p47YWMR+oJRYX3hUqhzag5SEw/gM4cGa9aqcD1l+iGHjar2LICG0QzBGvAJEkEFEDB9o6sQVFApPtkRL2CNUUUJFQubSC1FJjpafJ+YBi6r7k7SVWQzaX7JsvJrxs+0OIrad5ijLPuUa9Ra7QuN9IKaFJMh28InBtKaHhjggugbUOA87FqivGRJxAh8ch7dt5BqorALtLJ+WdKEWsXKl2N7N2T0lfFs5hzAxVujhVurWjVmlV8r4KspHb/b0NrKUApGVvFVjqmKREaATezVWSq4gpGVrAiikAumQeySOboTZh118pXooNS/at+mAe7eFdUHqxavKb6xTpD77uWIcvLjVdKZTTY8auUgDUBMS6VgcXZ2u3QCMyyt9NWwPqsaBSxP5hOKedKqstt7URFja/hRmQ+Sx4trJA8tz+FiNPTQwyH7R6dy5rNV0BItkChNBDQ0X4+PKpkt+cnys/FCrgCgnvy1xvmg8N7YujjlZKcom0HTazBH55bG1cL8WsvUAQOGmtxdVSS4vGrT3BWobuDiZJzz0jIQBbYm+vMWLVsiVz3XLtDsCqTAQD0nquCoSyoQYq8hMDglqjJqaWW4j1q7wDw6ti5T9d99dH+D0bPGi6EPTB9j07muB3x5TOx47hLX7VM6+iNtrTBg7846qTqBkmHYa32G9vrZWuqZbXk3ee/HmKyCFXdOAQ662z26qkYGfOfuWvjVUcbInBSP9xThrq3K+14PJO/xhmK8GK7sVofNOE0o60T3tXSxlMa","layer_level":1},{"id":"1b76a9ba-2d88-4026-ae6e-96b1c50e9592","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"材质模型","description":"texture-model","prompt":"开发详细的材质模型文档,涵盖Texture结构体及其相关类型(TextureType、UserTextureFavorite、TextureDownloadLog)。深入解析材质类型(SKIN/CAPE)、哈希值(Hash)、URL存储、尺寸与Slim模型标识等字段的技术实现。说明材质状态机(正常、审核中、已删除)和公开性控制(IsPublic)的业务逻辑。详细描述与用户(Uploader)、收藏系统和下载日志的关联关系,包括外键引用和索引策略。提供关于材质元数据管理、下载计数器并发更新优化以及收藏功能去重机制的实践指导,并结合GORM使用示例展示复杂查询模式。","parent_id":"199e1e8c-1238-419a-929b-7ff5de856b10","order":1,"progress_status":"completed","dependent_files":"internal/model/texture.go","gmt_create":"2025-11-30T08:03:18.437578272+08:00","gmt_modified":"2025-11-30T08:13:07.682963547+08:00","raw_data":"WikiEncrypted:A8Ib0jJdr5SBHRrM5U0Hagr7SDkF57JVIoO+GBZGyszgzGN8QQHPGV0m8Bb+lvQdsmoAIAzy8vZeMCDil5+IRUeTsnC7kVT3FhKrfs7IZbcl2v1TdNdz0jcI76dQJfThRSE308+AZbtZMwwGjiDNF+uVuJiuqpsfMjFSliJJ2A7bK777lXYaN0/q0xcUdZEGuSfdA0qpHiL2nVvu+4AOjzJXd1iZTq0igbvXE2Pu6D28A2wfrYUXj/oLexIEcS6KUUCxpikDG4tba3IIj3PJTVBqTiGN6pg8a3ia2ZlPeCqLgKmkPuuSY4eAb8j21fZoybmOk961jsQxhFKYv1XzqRFdmRxneZ+VdO0v7lQYQ+/QBBHKbd67F8mjC4Okg62vFbqvSSH1H+6ufLnS5haBu7Bn2U29a3I9PMhS83V1apU7AQA7j60DFyM+N9lrxm16B8f1+9NTI4nn/HcLIUJZe6dutvJN0AxqPaBd1mBN+4xC2cq6OgIE/C3dOeDgcRrzBiWXbBTE5KKG9dOLSt6TpEN8qqNqIHlEY7zII24X5cc1VrD0Ep9ZVe0784aMdb8BOaywSBowxFP1LTUvrjpL51NqUFgg8i5tvQtR7Sse3hRYnW1XpwhqLsIwhu9ffXRjcw+ogjnBonndWWwVhfrZlSOps6doSBR8NECY0EmmJhWmDNz7j+534/YkFt7q7xi1q3aNCaQdZzRiN3UtGp/KU6HrhKMAStWtbYmreED0Ee9An1xTKbkLLKtL+yrQtTlwHWwvysdw8WQLYHJTaLei/I9paY6frcMWfSpKmS28gevUdM5GQVm2rHOqdQOudeQKHwxUFiHS6qdNVumlt+3qFeTSStixuHxSyYSCGWZDl/v+O2TRiNEtMmhXO74/04UBH9rd/J/uo4vY44zcKF4R0FF2wy5mV5bsjkiosnwlKwLtvBE9VmWcX37TKZ0PDw0bOz6reEANrP0EWewYSNEPW2bi2N4Vx0FyYhCyq9019Gk+7ooGJJLZKVxYbAqfTdB3x2PQLsCM/kcIit0VqoDK067A+aAbVtLkl0L69EV3IhXpQYR+hFEAfLYg9WRZ/29cluP6GyazlRqmZy+VsP7HNoAom6zM5QKgor7B58NF/Y/Re6x8FLQbMU8gE6tuCJr8DIrOy6k7yhME7uVXfXxqMK0Io6hM3nHKpv8/2/3H8msjRD1xUr2pTadbOQaXplaaKBGi513HnXE2DdmdOKv8cdJxuhAK//7ErQ4ebv4umgMhePs+hGg0c0m9ITj0tUCnNlVBpbvcmwaCbZeAaXC07LXK3O9C68FzVNzzaX9M5aA=","layer_level":1},{"id":"03318cbc-4041-48ed-8bd1-f304a381c6c4","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"用户API","description":"api-reference-user","prompt":"开发用户管理API的详细文档,涵盖获取和更新用户个人资料、更换邮箱、管理头像等操作。根据routes.go中/user路由组的定义,详细记录需要JWT认证的用户相关端点。解释用户资料数据结构、头像上传流程(通过预签名URL)以及邮箱变更的验证机制。提供完整的请求示例和响应模式,包括成功和错误情况。同时说明中间件AuthMiddleware如何验证用户身份并提取用户信息。","parent_id":"b982bbd4-8d08-4a9d-855a-8695e5091347","order":1,"progress_status":"completed","dependent_files":"internal/handler/auth_handler.go,internal/handler/user_handler_test.go,internal/handler/routes.go","gmt_create":"2025-11-30T08:03:28.234160893+08:00","gmt_modified":"2025-11-30T08:12:58.787626804+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg0AuVwC4c3HOzweRncvDFGSc0qwpRL7H5GOQrjqwWZaz3231jzp7VOyBqvqXXNTipLuKYhdu/SEatjGEKBQPckd7JUGG2KGwQ+/gt76iPVN9N4iScZXrlK0kRzHZtYJJxieOGEnWC0RVigjXJqx/SpW8nj06OzrhGB26vqKW8XzNuN4SIiDO9xzt2lo37OJCiJgZwn0FqYYU24XIT5DgQBpJIKykTohSp7f7loirLqP1aDiNVXDotaDMvAF89vKHS7TUFn6RvQ48Aw8eHU5SwSzYRy/pe+9cHcZl2URpuhuj2pagrta21w4sgMXOlO/xvGYxCpJ8DagyBecLylHOwPeSeqnhxjfOBBAs2JbH0og6GFYyVjuGDXHJ5IeuVOVfPat0fhZCRGP4WoefLaR2iumFfdDgSjcNGO2RvCw82ImInHVQx1tLpK31EM0ugnPWCiNj80eLTmFZNmmOOufXN5nAL6IhFoNaEkc0tWZDJs3oGqE8RHTuunz41wbbMjptizzlcE5oibU93jPrJihipPZ8lmx8EL9MQtjONi2V/fB3iD3xk/MnS42x2nXic6hRpvmIiMe+q6Ev4AdSPo+KKif3LYZuKi8CWPuvjNXBISa1HDzfrZrwnaVpGC4Hmkh7r3qGgvukc5gFRuf2rHdd1wfElOHZhiBORJso/5QTIQrwqAvussrCDd97azlEpqqrrSgUawM+1ZfFBKBAbEz/IEt/QflAJAjtHeJ1bltdDuqwV2bW+71x3GtTNH8T4eQLKcKYddJbuQDXSFGin8rJtx7mbOXuzIsk2zyEpHVub8zRnJuvCtBw4+hnLLshKLJt8rc+813uxTz8V6dDd4Fve1OC3Oz7900xdmrYnH9GdNEf5TdaGSl9HB5IhMXkuVEOgEmYEY+uslm8csUcisM/ElFmZGtiggqbyP9c7skbxWtspnmoPpd+QNoz9TnJwUNewG62lf3mebgMoF+CXhHHexwWQp19i4nfYrHTtMPc9SSBBZwH8IoS6TWS9Hqk2OhPA3MNscA2KZtTDIdoPyhcr7IuSq0sLlAXu0LA13XaZMHRCGFsPxGBvxwKLzpwybpeXy6FZiEkEpv+F4UMGwXbAnj1WXK3lYl9PQrJVuav10t59tuqvnv2+SiJlWkjJY4khw==","layer_level":1},{"id":"60372f58-1710-4da4-a4fe-56706cf1c8bb","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"材质服务","description":"texture-service","prompt":"创建材质服务文档,重点介绍TextureService的职责、方法和内部逻辑。详细说明材质类型(SKIN/CAPE)验证、状态管理(正常、禁用、删除)和默认值设置(下载数、收藏数为0)。解释材质上传、搜索和收藏功能的业务规则,以及如何通过服务层协调Repository层进行数据持久化。提供材质状态验证逻辑的具体实现(状态为-1表示已删除,无效),并说明常见问题如无效类型或状态的处理方式。为开发者提供性能优化建议,如如何高效查询热门材质。","parent_id":"4a428141-bd7f-4a26-9a2e-c6b8a671400d","order":1,"progress_status":"completed","dependent_files":"internal/service/texture_service.go,internal/service/texture_service_test.go,internal/model/texture.go","gmt_create":"2025-11-30T08:03:33.383229208+08:00","gmt_modified":"2025-11-30T08:14:22.113936377+08:00","raw_data":"WikiEncrypted:A8Ib0jJdr5SBHRrM5U0HagflkZmOTLddbnumEK75Allwg33aewm4AC60XJbwc3wDHxBmOmTgE1C/u4u+1IuPlz5PVIu1ZH4QHisGEXE2DSNm6vaqRLcuVWBJvu8vDaNevtRkddZqjiYEQNrqmskf6m0dofsi15eRBVtIAMmliBFd877HkDvo+tsLX7408QkEOtcrGs1s4YlDr8TSktzdS7zPBZgSnWpiA6snz62hzgPvJpTsluO7QYTcxRf49bJahDKqk0Krbjb3KMxtP6TtkvRFL+EGDHRgeVZ6CvS+/mqPRJXba63x3xUwgDDxWkYvkYFRx+Mg0hSLsK85h9OP1EXuYkmYm1m3oBC16aSxXZXnvZdkvLHIpcFujNnotFhwaJ6XhSx2rrCr3Hu9Iwl9aqYLFfN/KLqRusqXa5i/Hy5leeuurci7d/WUAKGGdo2BSeXGhc26wxYZkSmljiUQAk86bJJHMvhZyLtCMpRhlaady9o91wnil2iyJleyZRMgWtI0qWM6Mj+fqN5oLp5qJonXfWe4sObS8W1JCgaxqDii7fn33PFM3DVe0PPrz9paSRWlBMtGo7gXcuvE9s+bc/bfL95fAGG2shigIYtapVvXSBVPXEt53ngeLIjqmHiZHx+zVQ6kKxovHnnI8CyBXPF6EMJP2dSjHc67sWGbJZeuY+NqjUrQCPwF39oaEl2Is6lZe2tlENWw6HhjKuHfSHBmxuZLcrKOjsuG1rpAVsr8DqpaAo2v26FdVJHFwe7Wr67NTZxICSXsc1Qfw/5W7m9cMdIj8FpyTh/8Tt2UgCQvIy6qCOOFW8OkI3WrVW3pfgY/WvaHT7kScBDjwyiaRaSR3j29QPjjx7L7YHySn5JThU4zaa2Zr2QDdx6rNMu9DSzpdy3qxprCzs5EzGVEIOYN/qugclqI1QigCSO3P/ouFtRf8mklnLOPf/NWnWHyUYFrDE2N949JhcxJVeLopqRjVcABdrj0l8IeCuWLdcq0poNfTpDFDpfLXAoMFHvHVfhelXajBJS4CIAEYFD1x2foZVMVrwe8qKxti837EJzEISOYxSpLIELePuRWz2IRCU3GQp8AosPyiWjATbcDWoLSi13+jAEEamxcfF8Gm5bbuNAko/+pMDKZZa/qPR912BzrDksj8tzzwBUumjH/0ts8ehFg/G6MsETV9p39CYbZcICHXfnu79hiSxfvrreRQ0a3CJ+DRdObIJrZf5pHAw==","layer_level":1},{"id":"8e641e56-15d2-459c-9b3b-8cade88e633b","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"对象存储集成","description":"storage-integration","prompt":"开发对象存储集成文档,深入解析CarrotSkin如何通过MinIO客户端与S3兼容存储系统交互。详细描述minio.go中初始化客户端的流程,包括访问密钥、端点配置和TLS设置。说明manager.go中Upload、Download、GeneratePresignedURL等关键方法的实现细节和调用方式。提供皮肤/披风文件上传、私有资源临时链接生成等典型用例的代码示例。解释分片上传、断点续传等高级功能的支持情况。为运维人员提供性能调优建议(如并发控制、连接复用)和故障排查指南(如签名错误、网络超时)。","parent_id":"41b4d066-f7bf-4893-8d7d-726ba5ad6534","order":1,"progress_status":"completed","dependent_files":"pkg/storage/manager.go,pkg/storage/minio.go","gmt_create":"2025-11-30T08:03:36.162716937+08:00","gmt_modified":"2025-11-30T08:14:41.909255936+08:00","raw_data":"WikiEncrypted:9FtCQC0DeAGG21+hIR4h+JmAbZjObdbF2c7n/K3vR0zsQnnDhdaPb4/8FnVnywM9/m0B714b97/AdfPYQtVtW7YgYihg8mzxUKURPnSmodESGwWGMzBOVxlyAhxvXI2sbrOQn9gFtSfub/uGWchvWe4tP3bKQHbppQJwWrjQWBUVIsdEuByvDwS1Jib6HI0Qs2mvG76Pv6BMIynnUPV9E7YeZS3H/wJG5X351LeliCd8XQI3g2zlhaOUWXIKcYdZfPVdhKm009MLsdgvJ2iBNb0n5Qspf0kwdaj04qo73ChMY8yE7EvcNi/GiaNFd8hnLqwH1pBymVsAHgsT6TiGtxt2vkz/ONww8hKhQ+9HNKPcVLztXXzFytFBJDRUVVxJSmhirDZDZMsHeeUFY9jY4nUUIusFXXCaLyoKbECBUqFi57fZJsDu9zZHPUYms3Hu5DKapY+/gxAti+GM9H2jTbLHrRYiprXCJHOQndNATwUjpw9gDuxSIvmqLrlQGruL3ZC79ISSrR2llLL4yRkl7RUMuxFujrq4WE+hpWxOYfrCy4VwM5BN5x8OG5vzp2cOKsqayB1e8NLX912EWQvKhcjTt3A2F5hz5GaSCfm9sTikaWtPYSd/gR4MkHn6WZkCXNpVnXjHnbKVFlw8ukjL30jMsbme+ypnMbpF6xhjcKEzF4XhNU1FGxXkmeTTVLqg5OC9Dn4ZiKM3HQNAHMoImc1cwBRKpsZBifbj3b1698u8owED+UZK3JPlP7kNab6wkb17NhLP1loAlpVRg4oNIILiHKEgMxyUS33qu1Glj1Y620f+XEkHSkpKCBzMJHULp5UFeARqURm5MpS8VgAPH3jmUB8y1Xse6D7l6hIxl60CspotGiJy25DjKH7XdOVFxOOXqaa3wpsrWzivNtieZv203ihGSlQ8jlNNJLBAW8iICp4urquE+DMtYaYSKv4xboW8o34W8piB3MPWMbQ/qXobjoeR1wAkwJGH/yBeMDlmGPuOU4tyGD1FbGrgEQ9cY+kd5+ZIoNDJd2+3R1UuNIXGBIx+UJgdb+4hdLjD2VK3Mu8pm3W50aUfw98J+GpNQn5gRkJx5n05t3IBVhXYmDxZaNfiES2zkltXxcbjqW8E4SFhYXpQwsLTY1svHISaWTx6PNEU+IMi8bbtpXvB5g==","layer_level":1},{"id":"8c4a7b9f-ebf3-4fd0-be5b-cdaaae28ae3e","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"头像管理","description":"user-api-avatar","prompt":"开发头像管理功能的完整文档,涵盖生成上传URL和更新头像URL两个API端点。详细说明POST /api/v1/user/avatar/upload-url如何生成预签名URL供客户端直接上传头像到对象存储(MinIO/RustFS),包括请求参数fileName的使用和返回的PostURL、FormData、AvatarURL等字段含义。解释PUT /api/v1/user/avatar如何在上传完成后更新数据库中的头像URL。描述整个头像上传流程:客户端请求预签名URL -\u003e 使用返回的表单数据上传到对象存储 -\u003e 上传成功后通知后端更新数据库。结合GenerateAvatarUploadURL和UpdateAvatar处理器,说明upload_service和storage包如何协同工作。提供完整的curl示例演示整个流程,并说明900秒(15分钟)的URL有效期。","parent_id":"03318cbc-4041-48ed-8bd1-f304a381c6c4","order":1,"progress_status":"completed","dependent_files":"internal/handler/user_handler.go,internal/service/user_service.go,internal/service/upload_service.go,pkg/storage/minio.go","gmt_create":"2025-11-30T08:03:57.240357953+08:00","gmt_modified":"2025-11-30T08:23:19.989282908+08:00","raw_data":"WikiEncrypted:SmmNTSq96N8aZksVSKE+81A9cDqBgKR/WW7b1QsPk6KBauPBv++OaMX7l/GbY3hFWgKAf5m7UNvFL+oM1C5S9HlpufjydPHUqTwUrm03tiCu/jCXvxs0y5KJ0BWnh1eSZfaF/dA/IInShx3EfmEBCiCPHtpNClfUQgTraAys8XfGinQvGpskrmi/wLsXnG+zYAtZh7IkBvg3vdQSzM07TO9Arfw2eIEIxjm7xjHha0oC78f6r8M/pDaPhoBAQrn/AzTYwnNfUi9p+nMcI5dJg1yAsA0KSyP1+Vnn1zhKVmobLWSv6+jT8K61FR42QjJpxcRpibVP09C+q0zG42kS7pao4kuzCJr/NMFsfuJ7+vd+tZ6YRu3KqI3NvPOPlCkGv23/j087mqPY72L0/B0jxU2IjUB6mKcAmbxJ8tQh03IDMU//wPdKQ89wWfcqOvLacBw3uig0mycGGR4S9ojxx5VAVn9frpjsjm8NMxglb4c69ANCWdxVo0EVp3/CROrRJ2qvFcNY+BTlDHieD0XKgE8XsFt8bZZqduA43KeRwmjf5QlkscRsS770eIL/G7vsyv8RukT3jXUibaLGZzFOD54/GxrQQImxY3t4qNMjTe7qxr9tsl3fhTl9v0TYqhds3wmwlg6VORhnNvMm7yDGRyp+1GW7dDfT9VvMXS/ITqC2WLM5BYg1EYw7JXBbJgHXVgm4gTEpzyUcgLvsXrYHXLfBvCTKNRnXn31XCp6971F1YVbkXbcRctKhs1kWR5maSEWJ/TYnAx57eMuGZEJBzuTx38y5S4TaVPq0YkyttJc0XUuQQPHrtxkN7urKpKr92r6sLabEskEaUcKO1CsaGpcOoQWBWa7K9/WIzfVlNFWToVpTNj/M+v4Wog72/nYY4FGK4ciCmxlucx+BSNjjsqiZ1kx2lL+mH7QK5auHFnihUh9+ztXd3xUh5V/ghzlSC30baQCFnF7JWfJOWp9gKlwPGI1xKNWT3k2JZtn1/v+358tlhUch8bKjtDnOIUk3t2DOrUgZ4fPZl1qJy/6TxOieYh41TVPdtnqX/OKkFZxJBmu8dRBq52GJ7RrSGYJX5dR3hAdlKfQ2zAUtPQl1tsdp0I5WQqU+HuNdoXr0oc9JGAkMM8F2R9sUMNNp1vclDrIHyvBGukND6rnfQL/MnEn9VH45fDo9uaZyqwVNMfG3aBPpcFrVh2yjVtnEBwogFDMnAG6acBGZS87gnry8Tsa+oWHiY0kl3RPtVsZ73DhxT3gmBj3SmguNQ9OBACPTGhdBQFocgcGHCiNlWcA/jj8rAI54R+oP5ytPzHx4coNSu247QltzfNc366BIBJgqWHQqcF8M72/bqjaykvuuy4lFzKfkTWNnbSDmYvGmJmdRAwzgvLaLaog0TiBwrFRSjgYB1ztuVnzYEHwy88KGAERe3h6dyu7YVWcarulWrZ3b50wLfOO9qHXTAHIFApsxoDohOD07m2oHC9LROJ8QzYfudNhE6TzMgDTz9QeOxeomlr/QmMH/6lCylp/zTombuzhGHSACkTLKecVIjhzrZCTV8/tBIiK/rmbT3R/Q0W8=","layer_level":2},{"id":"cb190d05-4b2a-4bf4-9c84-5e7e0a05aca9","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"数据库配置","description":"database-configuration","prompt":"创建数据库配置文档,重点介绍CarrotSkin项目的数据库连接配置。详细说明database.driver、host、port、username、password、database、ssl_mode、timezone等连接参数的用途。解释连接池配置max_idle_conns、max_open_conns和conn_max_lifetime的工作机制和性能影响。列出默认值并说明如何通过DATABASE_*环境变量进行覆盖。结合DatabaseConfig结构体和数据库初始化代码,为开发者提供配置最佳实践,包括生产环境的安全配置建议和连接池调优策略。","parent_id":"b05ad424-1454-4cb4-9d82-791cfcf7d650","order":1,"progress_status":"completed","dependent_files":"pkg/config/config.go,pkg/config/manager.go,pkg/database/manager.go","gmt_create":"2025-11-30T08:03:59.905522952+08:00","gmt_modified":"2025-11-30T08:14:38.05922316+08:00","raw_data":"WikiEncrypted:veTYwq2y4io5qXerCTrkkFIbPLS24lpjasA+uCz79jMeOQpuJhuP44OLRhCn4MTH7aBT11DiXe6Thcw/3YSVSrU9AD11YR9MjB62S6clIPQFEKpcyXvQ1ogau6wFIwt71ZxAi6PAdi1V1lZcoeM/CJggJgfa2xwSu0y5HXleFozfoecB7HLQ+46amNSQ5qm9xcVnCLZwGuE/ZB+I0hMATAJEnq5+pB+I3iH21WpvExC04ReN+bAcsWMs2QVontPXCiN2hrxHikfT4dKBDsyIviOX83V5fqn8GQXFZouhDJHtmkYdNvWEP0egxBJ4yv1mDA5wjxyivMLjujcEdj01BbTzJhIDZVDKigscBlAZY3mKjEQT0sSNpckos5cqp705y+I0Jh3Wo6Qn1+aef9AfYLi8FgikIGEcpAa9tE2zPZYZI7xmseothLPz9SIvc1lFywfNLhnWmJ7WR75qOHAPLYuNTqSKYctYimfLFnT5CnWDESTYk7XeXuKFHwFqnl1nb9XHcYD5mBPUCzxXYB0La9n6TZTEGLD98r6o2AKHaTdWK8YcwKYb379j1t3WjzTRYgerQZiRTdxBaeJrjssSzFRFjuxtcPMSamoB8yq0K/8VfUFMrjB4kno9msMoylquA0cSi1hGCvvBl0HVx6tWzdsVuRKW+akbLv/xydZbeAKlukTdVW6fpBPXtTLUke131xgidqnTYTXOynFUfhah1N272soHXCJcPGduydlbpc746PtkEbIKDFBLpFd+QMUruSPvQbY6EzYyIh2rXPdXoXCgZDkwCd6uKt/U7IBrDhWTNOGe0HTCsyLn1TtTaV1E1wC6gR77yqctg8t7fzabI6Iksc0Quz3oT/F1K1VLsfvA3c8VLvzzFLBJzP1Ia33fCHsogRlvpzVs2MLMedxKVYYVgkMYzGO42jk+N8jZxBteXJZ0AXLDiVk6KZn5nndfJXKsFgjbtJSofj3P2D3Rx51m+V/JVxRw4BXy65Pr+ILb+xrP+dTad/J3FBpQbG88G0nSE2U5Cdd4zpjybKnwHiehawESHMriu/TNJGzn2X67ZbVR1qC+ZkitGZrQGUTWdtL0cZtrdvFOzWOilIn/MATaurmjE6oFM4RuYUzIFI0=","layer_level":1},{"id":"f673e8b8-b461-4789-8848-dd8dcb99b77e","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"用户登录","description":"api-reference-auth-login","prompt":"创建用户登录API的详细文档,涵盖/api/v1/auth/login端点。详细说明HTTP POST方法、请求体结构(username字段支持用户名或邮箱登录)、响应格式(包含JWT token和用户信息)以及错误码(如400参数错误、401认证失败)。重点解释JWT令牌的生成过程,包括访问令牌和刷新令牌的签发,以及令牌中包含的用户ID、角色等声明信息。描述登录成功后如何记录用户登录日志(IP、UserAgent)。提供实际的请求示例和成功/失败响应示例,并说明安全考虑,如防暴力破解的限流策略和密码错误提示的模糊化处理。","parent_id":"6fd593fc-6c64-46b8-bccd-83c6d693db38","order":1,"progress_status":"completed","dependent_files":"internal/handler/auth_handler.go,internal/handler/routes.go,internal/service/user_service.go,pkg/auth/jwt.go","gmt_create":"2025-11-30T08:04:00.377566114+08:00","gmt_modified":"2025-11-30T08:24:08.325637446+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg/j5E9riWJYH+Qf5q3cKcFl4H2ndyA7qoEwTangWQyq3GsdTfN3gkS0gXjlj+Vo4zNGPZxLBjzjH96gGtFTLtZu+OfTXJiMlS3eieNrVYICZZ1UfDz/nf1z8crD5pzwOqiMbtvaZE7iTaAduV2C9ok/R3H0UbjWmAwn0+voleqLn43saK0CGM1l7ybnKFPkTQaH7LUD0Ge+pdstcXsGhEh0a2MuXKFY5WwW/jWhpuVfkbUpI4L0A6T3TBFanrnN8PrNm677GwTkYk9DYLKWxTy7ITe5UlOk7hviyqQWymMdXH0LXSS5dpMKcKsCi+ULBplL7FwungCjgUuxp0SaFHKu9+QSfQBH9aErxBHOi7XYAdqf0EMru3mjF/jtxs1bTZ9oNXnBpdr5QA8qibXw3u1+zMyDBFBVC+qBMy80IAnh3obGZvAfp2kVjeXWxcNndhfSh2Oy6WTfsQ/8nONHKVCu3N7W2ETAvcsxvL6Z4x3GTztk/P9r6hSx9cw6evYHi2TS9wTxatiyx2zDYEn+uTGXhVUMmHXl5tDFksz2Z9j2zi5b5arFR0snEFDxfSD6V0DN3hg3g3mFN7kxflIlbmzUY2Hrur9u2bsAcj9h2BhFyrE5EY1Os2Ph3EJNwX7lB8e7Q/2i/rkFZ5D83UzZEVW78fi+5cHy7mU1n86u9W4kFkC88YO2xAD//i5FhHJINFtbf/ctNUYTfNpCzA6GVMCtO9MI1QnHkM0x1oxmG0WlbaZWwb3aVM+fKfuDnvYjcCgEmogJzmKBMHVHExBHi6JyrSk05AK7yvKU3Eg58yBtnhbNUshPkVtk/ijCtmWrRyPwma106DLmyYa69k0GHqCs5lUnWUEBk6ydYLrs8Hup8TsLXpqtag1pXjEcyJn5qGLOaffirp2h6WUfjwzK52wAXSTJoNXuxnSOVI9C4/m8uRDBiRdm2A2w3Sqj1lrVij1l19118UCdeQuK1pWZkbEQChklY2EBtOaNVSnNuHxyc2PM37qhMdEmayNeulEkseQwjiFCgwucIaS0nLQw8Rd1jjpUFx4PLGHxLw63d/FLkusPeChb9x73d6wxOlEImE8Y+gRmNxXHkCLRlRr6ot3El/H6ISpJOtLHqA+UQAGW2zqVMgtbadfSuTMKz2c62lDYutDwO+7Gzxu48LtuggZTWinED/hx+Be0QgT8hrc9GX8nQ/RSdelChYv3qZ/E+CelMZIUQXzhROE6hFTZ5bgT5sdTmXup5/I3TFFw3lWSbaAw2dEn4No1+U1mREra/yrTjDreuV5AoILXH8NudvB4=","layer_level":2},{"id":"dd0cebe2-7ac4-4c48-8aa6-511b6d9ef7e7","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"材质上传与管理","description":"api-reference-texture-upload-management","prompt":"开发材质上传与管理功能的详细文档,重点描述生成上传URL的流程、材质元数据创建和上传限制检查。基于texture_service.go中的CheckTextureUploadLimit函数,说明用户上传数量限制的实现机制。详细解释材质更新API的权限控制逻辑(只有上传者可以修改)和字段更新策略(仅更新提供的字段)。结合代码示例说明如何处理材质名称、描述和公开状态的更新操作。包括上传流程中的错误处理场景,如达到上传上限、权限不足等情况的响应。","parent_id":"f92758cd-1d31-4875-9ac8-9408d5143422","order":1,"progress_status":"completed","dependent_files":"internal/handler/texture_handler.go,internal/service/texture_service.go,internal/model/texture.go","gmt_create":"2025-11-30T08:04:20.230507581+08:00","gmt_modified":"2025-11-30T08:24:33.326242517+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSgyL/Md6tjWhpIbtHQmhMXliOpZQf12Ek95cYL/I9S0YG+i+Trr8p7NqFbHCkW1Q5vxNsNgyoggRgOZOOChCaLc02dXxjhF5FFgcMfh9mtoh3AqJ4J211z254P//21Sb0rC3ZdkfZ3XXlOB4+9livC7raw0pp79U1zgYi1L1Js23aVP14+0Jt9DOB09dulyi89SRDaddh+c8TN/tqqWfO5hwhiFdRSzRL/xo8gKDMR4NEIqAqf2MoKcX6iuf5qapfCnfvPC9yAjxjldFSJTw4W0V+M1HRuaZyVQqeosI28NQ15llHMuq1CwZeMa7Vaj0aotgXsm6+S0MAfxiaNK9MeU3rZdAqmfreoU/fJ1nY/3sqj5GU2Ue+JwnXw13LUYnodjpEXBR0xG2CNYobRYB0l+PcbR8uXKonz2lBV11Tee8daWCdMct9NxMLA0/WXX5u4dtRACjLqpz2BmiEBdMafnVaYyO1l3zsl2Isnp8KcKql0ohDp0eIGvHXaGWstJMGuHiELLxLvLScst9E2iH1Dxk3BUIH7wU32bUP88eQ5EC6C1NTZPtl+vkuBJa+xyHJwbEoMInoSpdOnzzIpuBj7ziulijM1Ldu5jDqFPS7+fXG091Mw6qkfxJoey7gpBIB2XbFx8zuDYB+1n+LJA6KyWj09Czct2R1r8y64jp8vE18QyhBWzWvnbhwVTj2VzGxsZqx2Jr2C2xY/ZWk9ycQrOoSSWI4dCPy2FQJvzHQK+ZLc1/ZYinm7bhYAmzZQSH6Fauf3wzUt94buXDVmodIHa832iM4JdsWPpMRigTct/OvIJrpbqoLOaKh9wvDZKmrCyPFYwM9ICQC5JqhUlLsFuY5pqgd4E5gWfodbaje2ZaMIVs+kFRVhbCU/4yd3ddEmZIeuG6NjKGNoxEf5JnHLJFm1hMm/AzAfmKkm0Duw64h3wUGF/LY96wqlxE1l3HkB3PCrUb1jEujT9bSo9Gr3PNsJelt483596gHPPhWie+IusG55IqWcveT4NPyhqgMr0SfSiLv3erx+4aumE//C7fy0bt+z0gthYqanjxZZ9XxTOAnJqRyNBd/pw/ehLlV3IHuQC0lPRR6VrVbqt7mvE6IM0vSOcF9n5U5xDLIZFW9CRACW6z50Qv689ojY9tJnp7dQzPloSMxcxbAuvsiSTxer+ndyWDZQa/r4I8uxWVzmNQd4BygVxfSicTLhfpgGpkoujheiAy7Yqx0eDegrwhApaNZ7vICIy7mZdsuBUFfhc9IIzbHATUL3UbpzCUjWzEcQYDG0pu1ofmRmJ5v3mg=","layer_level":2},{"id":"4cd6cb1f-26a0-44df-b3ef-745a5471cfbf","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"详情查询","description":"api-reference-profile-detail","prompt":"创建档案详情查询API的文档,聚焦GET /api/v1/profile/:uuid端点。说明该接口为公开路由,无需认证即可访问,用于根据Minecraft用户UUID获取档案的公开信息。详细描述响应数据结构,包括档案UUID、用户名、创建时间、最后使用时间、活跃状态以及关联的皮肤和披风信息。解释该接口在Minecraft客户端连接服务器时通过Yggdrasil协议调用的集成场景。提供成功响应示例和可能的错误码(如404档案不存在)。结合代码说明查询性能优化考虑,如数据库索引使用。","parent_id":"394f74e0-ba8d-4994-a84a-5ba48d385e83","order":1,"progress_status":"completed","dependent_files":"internal/handler/profile_handler.go,internal/handler/routes.go,internal/service/profile_service.go","gmt_create":"2025-11-30T08:04:22.500565487+08:00","gmt_modified":"2025-11-30T08:24:56.136371025+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg/XwJnQS3ujeSdmTfQruu6zAnU4bmmIM4YFSIWtXH20ntHwXk9mFADgh8CO5gNXNZ8bdfcoJf3i1wGDptYeqOUkuYdaOGl57jXwgnb0UrSLADj/4XxuelOJzkimNdXdl5OekX0M76nCAvx4Kgoq+EW358wLfJlrf4HZFpVgT64kvYPZ/fGLcmvC/WpRUY28W6y9dxbR7/cPEgFFo54FrB+E53e5I4R9EcoqDB4/mQRI5Tr15vKrjJ9lsBW4J8v0MSnT/ZmXiqRO5aebrBEMrNKOmdkyM96/GrxTzxkEsy+DM3MAaybsJowxczT7uaPqxDIUAafGz9IhTOq2KF4alFEdX4+SLpi2tOMsraoMsGJ/z8QON+cfi3lH2F0znWYTJ+l2bvpXKEDctUSTE3Lu+FDYnBKBdx6lNDgACSiFuHdY/5k3JcrrwEanvd5UPvGv1goFRdMTz23dCVX4RxYW5iSreyyMSi1/lBnCS+MxUtDs7ji2tf923HQXOZKpK4CjubxKjSxje5eyGqx7idA0MymDZAGpsNTajS5aKOlb0NKaAGgl9Klw6SGwyHUA1bsIELwwRhKb4NV0o0RYcIAsFXzqhHaVw7H/i643wIyltCeuRRYrz8uT+IrnScgBIPkXq+8KXZOn+FNb9oinSV6uG4qB+rlzDrVRHz9qaZElf9xLM4tKw3YTUizjmG0ZU9kKccQcNab97N0thz48JSBv5PqgzU6VZw3PMefRrQuU8FLzYkQrtPMmHN5KKwUES8AGsLd+E+SJBYhVoP1C2o8Gg4yNeOBTFWnrPk6JB94TWI64aOucQm+MAsmhuVrqvabeaGkS1BATIgWha6nh97BJGcHaQKKA4tigVAQx/k9AbWMWT6NMcSe4B7HRmfWNa52YzPetTtGt/hkX+3Ad/BAPju8NbyQAaCas89Rr3UlndzCplVnS0+Ld+Dh2n8dkznJqRVhbccf9RjrqqVSaV3i1ju0fuxo+M3LVuojnFfv9TNtzc1U1oJzC05jhCjWltVAqiuWXLTBvPaloWXBjOuKr0JY8wfJQQVyjPWJeskLkZAAteXs0WZfaFVQg1S88v3kOFo9sNPf+7u9MvvqCvFU1BbuYTJUVUMdDQUxz/ZtsaxIhzeyaZ3QeBZf+5bjVZ7ctkVzMDAio2h4WciAMCqb0nfAkbgAeWIqr0VLpHMzrPIYQorCgtrk0/bH0/R1AbGpPxXBjUKDLfsAduFHCzW6fjWH0=","layer_level":2},{"id":"357d2fe1-e16c-4b7b-aee1-0942254f5b7c","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"会话服务","description":"yggdrasil-session","prompt":"开发Yggdrasil会话服务的完整文档,聚焦/sessionserver路由组下的GetProfileByUUID、JoinServer和HasJoinedServer三个API。详细描述JoinServer如何接收客户端的accessToken、selectedProfile和serverID来建立服务器会话,并将数据以'Join_'为前缀存入Redis(参考SessionKeyPrefix常量),TTL为15分钟。说明HasJoinedServer如何验证某用户是否已加入指定服务器,通过比对IP地址和时间戳实现反作弊机制。解释GetProfileByUUID如何返回指定UUID玩家的公开档案信息(包括皮肤、披风URL)。结合测试用例中的SessionData结构,阐述IP地址、用户名、accessToken等字段的用途,并提供与Minecraft客户端交互的完整流程示例。","parent_id":"21debfcc-c026-47b1-b462-fdba6e17b157","order":1,"progress_status":"completed","dependent_files":"internal/handler/routes.go,internal/service/yggdrasil_service_test.go","gmt_create":"2025-11-30T08:04:23.829327919+08:00","gmt_modified":"2025-11-30T08:25:47.626761297+08:00","raw_data":"WikiEncrypted:XfNX4oZehM80K7xiLZZwPE2Z9LiLIBKvZ7XIvEmp9k05xY+a1FzVmx+11x92lJAjTCGeSXId8Wow2IcKZjt2hqozfIEUtmJB53OQ+tUdpRqAoYm11NGD+NYeQ90GFK1lPrw6jESRgvmqSfGDebOnVeXQk5wrMcJ0m2clgknmD8okKDVk2TWgqmCeKkUKOrKgYBngt+4Te3L1FUeKpYYcr0xTdB6cnAxBT7G+NCzqUqKZmgd/ft38Scrlq2Ij3JcEuriTgjMuASb9hkF64QXIa0StM7NI/8v3vzjomH7GG7zZbz058oG8cThCriMxZv4ASqn0W3P5rVrxEINHS5zmuCgyHI5irubbD+zHKAjxPZDRaX4j4eehN/0eN77TOk+uhINyJr21X5oH6NfatBvqS5xD6gI1qVBQzh+BjivTwllBimHxuHaVb8t9+CHnGLI5NjL0ljfcERzUdkrhVFNN3atY9gOyi3UqDnjWIq1MJWpFl42UQBQSrWCVgR8IqPpm6eMPVTpWn5k+PXNOfYrrzacEENGjoQ0OiesGRREoK+Jx7x9L4SwwG22hHdDZAfu21Hj5rtF4r/0uo9DLpUEQb5vDVhiXzRVdIHgBmeOA/eDFmTkPm/H6QN953CTzsyZfei+cCZGi/xox4MoIj53HrBdQGP04xQjRQchNMMyqXbm9nnNTsQllIkxk2I1uRlZdcoWJcSTWzcFtLh9w91iH4pmQjc2Wh0mwmLRYB/eZRAe0ctHaFkZ3pZs+c1JRF1Zfa2yyqZNzKgQgraUc+6ihcoTa6CXUBiPWC/3FQmeBxatvS4orn4HCj0Eb/o1liAxVEHlVaKuYZMZrOxPBbXE6HR9qjiThas8epCx4GSDiA7hOMWtZmX8KNKy2VnqNjZsWXYBbiHtbicbgjGGntJDLTxXi3RZX/7RGi/PuaQ/X9d8CBLIXSw0zKfpS5amQWAIcbMFl4QayEA9PFG5R6UxRJVWzfPF4TAc+05jgZ7mWci877IV3/x0MZVFMd0uVngwl7xWrEt6dda13uMZZxGdMdPnMuyafxd478udPbWfR4M9fBN8ti/4uav/3fD+D/sFbmXEuVLt+69jK5nhQD4DjRpqtYNJUr06LoR62/viErBd1jEneQiU4KiDmhVe/+Z/3ZH/UPiXjmeijhrUMlqdP6cS8ssVwWRQ9UAJaEhPUGscyZoUbLvs6h8IqagY3zVH7aEVGaanQvkx4dRpcAgwGLm3b3ukti2Rx3ZbzXjpFtBylYky9Sy3XmRI+zu8LhJfmG5+KPpuDmbFMjmR1MUzvlrJjMQNZWpMCRDhh7MVn3UgDyrs/jsABDTTycBOBefp3bqlM1iveHlHacYF1KtTXX88O8X1p5Qh9zTsjcMs0aU7EeedDLkMVlt2bN78HXmL/TJSaLuujHJywo4greyJQuOSWVH24Uy8uGdVQuR8S1pzR0guWX+EvtBXKXQgNcxn5bWjGpkgtCO8Da1A5YJY7JDfOSS353mMTuVy6wc5EPIc=","layer_level":2},{"id":"dfcac79a-35bd-4147-a862-90165e805f51","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"材质管理操作","description":"texture-management-operations","prompt":"开发材质管理操作的详细文档,涵盖更新、删除、收藏、查询等核心功能。重点解析UpdateTexture接口的权限控制机制——仅允许上传者修改其材质,并说明字段级更新策略(仅更新提供的字段,支持Name、Description、IsPublic三个可变字段)。描述DeleteTexture接口的软删除实现逻辑及权限验证流程。详细说明ToggleFavorite接口如何实现收藏状态切换,并同步更新FavoriteCount计数器。介绍GetTexture、SearchTextures、GetUserTextures等查询接口的使用方式、分页机制及数据过滤规则。结合代码示例展示各操作的请求/响应结构、认证要求及常见错误码处理。","parent_id":"dd0cebe2-7ac4-4c48-8aa6-511b6d9ef7e7","order":1,"progress_status":"completed","dependent_files":"internal/handler/texture_handler.go,internal/service/texture_service.go,internal/model/texture.go","gmt_create":"2025-11-30T08:04:38.254335634+08:00","gmt_modified":"2025-11-30T08:30:59.873264432+08:00","raw_data":"WikiEncrypted:A8Ib0jJdr5SBHRrM5U0Has6SFinJd7+h7xBonNjEXFujJSQ+NKvb3k+Lsv4Gr9LordO30IfZzZZLTRbuoK+MXxmKj3aJZZf3ZH04FlOw0vTT+kKW/YUaic/8X43Ylp5y5xZFlmpIS+nQQvAEA+UKjzIdldq4UVzxhoe5p67ZM1kp5K0RWOgNUf7wXYOIZUgsegI/P1wor9R45qkJmF6m4D3arY/7xgHtFGSgGLMVCEqsoiMLr3xicLE73bUffGQIRyRrrCdYbES9cFmDiTTg2tzYzm3wn7wpBjoGi9yyRqEICG3/TVjX/pz5S15aMIg9GG/GFyGrFED75PZLjyaWF32CSvA3iuvD7zkE1PG0kXj0aMednvd2akdym3+vJbcyNEMvK7Zk8RuKzvO2unFqQiXlzdIrHRkWJyp9uvjZAIOblwtG7yeZh48sFfn7gVj8zMEvyK7QJSAk0suBetGKyZUV5XJQo4v6pnpwZFiv9SZqi0iIx5xw3j7MABOoysG2mI4Hgzugm+3ywKrYncBneVlpad9IMG/6X4IJ6KEfCYPRSnDFaPogDG9dXTFbNd79VgbT9VW2T1oVwhokQ8mQ43KP7xCLsKeQ5KPway9OtSM+MVV/ZR0QP/w7dFqQTRAMLBBzAJ0RnEbdfNhAJd4xx9JVlzO0MUOZlv9QeAZAUo8U11ZBRqlR3xle3o3DEVKEb66tdaOAmPVq5tP4Pu83a9x1MUu4xbbYw3PXZBpSYvc+DlPkwHnrtzg/DqJ1oTIq4W2geVRry+zL8NzpK0VMh407ijjn5uQuXRiJLhMlf8KV/dYa6zDbJrvIlJleg5nCUGrr+7F5K7qmHyEp/qXOuU3DTUmVd7chDW2nDAvXz3fgcO894Sr1usyABQmY1lIilLAMoE1sGiOTeeHqYWAdH1dPhR3U79dEFB2JPB50KrbJ2avIq123wg9+MPCBFgLRasQc4wAE+TEqs7Y89dbLYkvXMWghuIEHqdtrrSf0WI5uCcJdiJCdXWTVR4lzlQeryJpp2uCnv67wanGCDFrSBZNIvA0MqWZKbqfhQJr6Tgn6Fiq1EpRD8oq7Cj9NKmlEHW1OCf35chMIu/+RGyqqYLyvYX/vBqP04ZykbW6mszMCKfSNT+kG74bZMUucYjTDgtjG1cmyfoB1FJ3n/oejZxstV86+Ujp/l9jHf0C3MIoyKks9E7Iyk0hJ/Q2Yc0KX009iAayPJP02mlDN8NRDWNO2lJJ3WP/jse7EwyanCAajFw6WFmBrxnDnoYf66igJQ/WXeQ8SknzqpZ6ak39iQHTI4dZ+WgsAVPUpt906yffO6gDWQBDtKM7w5RniTCyo09T20NA5wIuoYyIh2zqbNTG2nv6itCIG17hrwPNPiF+8GCP4oQMJhst4LAiHpvAGS+AK4n2uX+cr0Fiz7SBLZPtqFeN70ylaiFqHOlZaBKqoN8vvR1cbW8481a3Zuyy2INk5JqA7MUBhajR0w55fIA==","layer_level":3},{"id":"33ca7fc3-f997-4fba-9f47-a98218a10967","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"技术栈与依赖","description":"technology-stack","prompt":"创建全面的技术栈文档,重点介绍CarrotSkin项目的技术选型和依赖管理。详细说明核心框架和库的用途,包括Gin(Web框架)、GORM(ORM)、PostgreSQL(数据库)、Redis(缓存)、MinIO/RustFS(对象存储)、Casbin(权限控制)、Zap(日志)、Viper(配置管理)和Swag(API文档)。解释选择这些技术的原因、它们之间的集成方式以及版本兼容性信息。为初学者提供技术栈的概览,同时为经验丰富的开发者提供深入的依赖关系分析和潜在的扩展点。","order":2,"progress_status":"completed","dependent_files":"go.mod,README.md","gmt_create":"2025-11-30T08:02:55.663394599+08:00","gmt_modified":"2025-11-30T08:06:14.856201736+08:00","raw_data":"WikiEncrypted:w0CkdCdnXCcvlN5xOpiEhEX3U68GI0Ngj6azFMJo9xQD0Nwsj9XajeArLn33w436LuYJWl4xP0dT9zLNODhOpFvwLYtYbMzq1kf+YaNSw77Zc9dP/yRmlbcA9gJPSUf4NJzwF5ywVd5ryUN2bB4VWSqrguvkc0+JrpsBw42/4NSZ0oW2IHRcxgtYsHphGpxo09ryAOWpR5BpBuyz002v5M1l312xsbyi4RY9pifyGVpQEAEJsrwOJDFNWW888uXgdBfsOkNI/lpXmvGCNkZNleXmQtLoi/8JntIlsTd1+Am7E6pS8D+tr7LdFex8nWQmPYRoppiWTcAFBFJOclAtrvNaBY8FFIKoKwJoYozA3I6rWKLOqaf6EZKt6OdJux3VP2HjaLYPBGWckk6IvaEQZ2rOR7E6M8m4rm53fu4IeyMTsve4xYAJZOEvnIb0WHUo3LJWRN29xrM6Ep1MjQSUdsqievg2hT011oXHxae63fPZRFbyWkAdSK660V9nivpWkP3GiVHbZuvydhDehsNxZqYxPaVBc5ceoNi/u3XXWNxD1xNQOni9VG0yXC7b4PYADZZGxHLZutm/D8KqYVnmmhYO8YmSQGRYMhuT6ujcjd/K7VPTwcdooKrQMGBj3gxeNqFWNKf79P7w2uuygVVZmx7DrADF+WpClInJ3h18891HT+LzsNHbYM9ZZEKCdqWWZKp7YnZREFwFDgFNygs9tI2OXkRGaso3w5qe5+PK5//Q9BXcY7u8q0acUa9/S6rbiKhb2XG9OHzj0UTiDCGlIc2ZoCuft94wJhnz4NNaFk4QAAJDKerE2bNsDoCDcTy8disIBNKkAik2Uv3RJgBIL1kNywIwgene/+Izud4LcYFD8aSLLM9nirk2OQISiN8FU0DKg9KwvF6kKFksFp4XUC2+t2nZwFBbSePLtrlovs9jkubhmSKiSzV8AI24B7XbOdActokm812BGlneH8Ah75BSiDvWxTz8uKy2/+eCTKVAW7ighITT1FRxucWrBSOLudmJogI/DoXHk1+ZtJW+WDVKOkWASRF3DsSH6DfoABbRMMhy/NISrDY9QWnZfyoPUZGDVgyIZOtGrq2pf91JLA=="},{"id":"172bbece-3409-47f5-9fc1-38104bc72937","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"档案模型","description":"profile-model","prompt":"创建Minecraft档案模型的详细文档,重点阐述Profile结构体的核心字段:UUID、Name、SkinID、CapeID以及RSA密钥对的安全存储机制。解释档案激活状态(IsActive)和最后使用时间(LastUsedAt)的业务意义。详细描述与用户(User)、皮肤(Skin)、披风(Cape)的外键关联关系及其在Yggdrasil协议中的作用。涵盖ProfileResponse响应结构的设计原理,包括Textures数据的嵌套格式和元数据(metadata)中模型类型(slim/classic)的表示方式。提供关于UUID命名规范、角色名唯一性约束以及密钥轮换策略的技术说明,并结合实际API响应示例进行说明。","parent_id":"199e1e8c-1238-419a-929b-7ff5de856b10","order":2,"progress_status":"completed","dependent_files":"internal/model/profile.go","gmt_create":"2025-11-30T08:03:18.437656476+08:00","gmt_modified":"2025-11-30T08:16:34.620587033+08:00","raw_data":"WikiEncrypted:Ri9tQKlOKujpSn96yarfQWDo+gUvx/2kZhq3ALWXclwOiX16ExuFG81FyYFgXh9H04ENBMTnuCP9FpohehJd7N4wAMtyuiAkRxAuxK/5rIpvFg2+uvZh1YE5Bj1+VJfKmCR6K2cLw8+XTuoGzOvkZdKmx9pmX2iuLA+6qWmv/lS19/YJGZ/E8LZLUeW15fYkemuSo3h3dD4ooPeuFLXI5kuqWkdvcxm8vEz0b8nrXVu0qhI3B3meP1uaDVaOiYnI2HKQHPjJZboyFcQNKRRZsJoGbi3VOnwmvHJQm6k2n6c1eGZIGUAwSe9Ol+EgMlYmdDfAunlQnJZ1L7RaUrR/J7f//TIGwR+5nAaXlkvMvgrezKxGrNfWjCqeFpoMcQKL+WOnqaFO5anxvDzJZKYSZV/OpXaK1mxbrAfYl70oyq24l6XGveIVAsp622j9ghm+otUjthnugosSs/D1j62lYAFrRhy0NkegzhWwjxFdbXIVFvc5bNCRtgoowQSe6RiDhMVcEYKwlRQNXXQ++D+EkiEke4JB4RMyoLlADP01g302bykrU2OSvUFYIuytkn9dmOrBb8L1EqgOd5PpYHY6RB3qXLKfi6tntofYZum/bG6IiJRbpZhU+/5alNRmhbtOpg6IvThiF5HYE1MEn2h6819LLwwW3GtxaEPNUspZpFGSU36lRcMeEoOWnRGG8l2UpagNWMi8AFpdHm9ByX2+v/mVnR0yQ4v57SyXpPBkoghVFfR6CkXB6bVNZ61FqHDn7TrJq1mFkw0FQ9vipw9g1B5yonWtnZr/yf3+2F12aQnILk7cA9iKWUKXhiuvtiQu/6YOo6eVd8ZV1hJf1B68Zfs5WBJQ9yaIZyaSM6xHl8tH152msXT5Efn2Nw1ijD/PrVwALhygP15V84KHLQYQ1p4TY1JMUVuykaMFhhc25BSZh8JW0MqIfpKYym0Z7243bkgnfG+uBbMOfawopupbaSA4S+N6cwuHrBSK9DR4yZN6sBh05XJKdHO9fwoXfYaei/sYZ0LBTAfiunmzzKy32L7hLU8n2MQCCqFvlE8Y4PMpjS6jIgZ5hlusKD2JAJbbQhfIx5Fg4aTsZGPhoEX2G9ClfRqHDUaD0y/0NcjbYBlqgvjN/pU78M5MDYb7f2fhPVP0ExeBzhf/wSV+xnMDKYyxrCF2X2dPY/Q1fB9x8MUfYZOoYz2iMi8I3rLi7S5tc0Ut9+53KMFvN9mNWTDVxS7LpzdaNQ+lTLmoj/rkZCuN9zSNhfmIVMGPGMMdyJTAdmnPE+zUPNYCl/PCGcdhXWq9t6yyB4aQIV3OzqyTwt4=","layer_level":1},{"id":"f92758cd-1d31-4875-9ac8-9408d5143422","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"材质API","description":"api-reference-texture","prompt":"创建材质管理API的全面文档,覆盖材质的搜索、上传、更新、删除和收藏等功能。根据routes.go中/texture路由组,详细说明公开和认证两种访问模式下的API端点。重点描述生成上传URL的流程、材质元数据创建、分页查询(参考texture_service_test.go中的分页测试用例)以及收藏功能的实现。提供详细的请求/响应示例,包括搜索参数、分页控制和错误处理。解释材质与用户之间的关系以及权限控制机制。","parent_id":"b982bbd4-8d08-4a9d-855a-8695e5091347","order":2,"progress_status":"completed","dependent_files":"internal/handler/texture_handler.go,internal/service/texture_service_test.go,internal/handler/routes.go","gmt_create":"2025-11-30T08:03:28.234248702+08:00","gmt_modified":"2025-11-30T08:16:37.949527664+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg4KUJeGR7bOHow3BFSDNLEeqi1yEjgJUelu5LBhpJKjS2iFh7WFVRJ+qxY2juQKFDL7rzfTqOb+B6ebfUUdZA0jjL2zkrlP2IXtTUr9d8Jco0xBuaFP7yx/61KxFBb2x5/yeRIZtZQ+EEokCRjPdtFQ1cijl0MgRujqokGbL9Phoqje2fiFh0kbJ6aC+yUlODA0nzFdZGMAeNGjhas4I1Yx3fbeck+hBxKHhlHHIHiV8YOCLiWuLdNu3p2vhGRb7L8O/WGij8FHtsCvouIFU+eWgzFqDiPkcweGdhV411pX1LSeHT3il/MKrtAF5F7T4htQ/+sZIsYjjyzLpUG6IMqSdMqoCB/VXnzM3EvwUjb+JoLz/Ukw10N/jPnepFxCQW+Ud1GnGi4xo8Pg3EDqOArCgya5zNgWArd5teiiWTLWGib/jxmWFjuYYMaEUOanaGmqtDx5OqeJDgWizbMNQHHNUT8Nx/uepObz+ENWGY3pQL8k/AyJMxx7M7XlONTSF7FUeCFlULGck/olEMm5NuNS/H/qjruYFYNGqzGsvxpddldxLAe1gtMN+kSApgPEBlP1tFc5VK0MLmmx/xdQ+4UV1gG0cojbwsky0qNN6KKSaMfjLK1hmjphF3TnLB5RTxWv0W+ldTmlbtn6hm8IqIxFHOIAriCEJkQU42MVslyGW9zey/+b/yNJD58JE74ZQrBB1U8frZZein3RaEA03XM0DhBt1BzGO/PuZHHnpAuG7vm36Gs0sT14v2iXsVfUOQLiw1N/beVBeHMomMQE1l1IUz9V1Dw+jHkdTQatAhIPO9wLFegD2Aq1z986ma3fYfURo1KIkAhljSHFOCIBk6fhpShWhnFVlPb400w9w3b878FhkXDGhXnpGgHIPKcZ7DOnxKrXWQuHQwBxdmlUOzMnXbA4wFzyo2vitUCHzcdpwF7qZCLlLpY4m4mP0tUKeOSW/aecYrub/36841oNLfzDk5ZTEUMGyNiMrGq6IjyDxbI+UqGvIp/Cugfycz+Z145e8m6cF8fIlBtsjH7l5cZwu4yW4Yzhw9V6OFSEteSDdM7jm/6SB6Lo8rUjH+jFINGrVjGLkkHBo430icpUq5c4YJZPkIl7GM1oDxnE5xVg6dfSZr3CaJ8B2bW4Hj3RsHiBehb0JwdvQ+Iztlrf8smK2NOX84tyS4FZKyiKYwGgmp9fHAgJyhNLMAwWJ7pbHHw==","layer_level":1},{"id":"e5ab802b-efa8-4bab-89ed-46e7ee9a0b41","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"档案服务","description":"profile-service","prompt":"创建档案服务文档,重点介绍ProfileService的职责、方法和内部逻辑。详细说明档案创建、更新、删除和活跃状态管理的功能实现。解释档案名称和用户ID的验证规则(名称非空,用户ID大于0),以及状态有效性判断(仅状态为1时表示正常可用)。说明新创建档案默认为活跃状态的业务规则,并描述如何处理多档案用户的活跃档案切换逻辑。提供档案与用户、材质之间的关联关系说明,帮助开发者理解数据模型。包含常见错误场景的排查指南,如档案创建失败的可能原因。","parent_id":"4a428141-bd7f-4a26-9a2e-c6b8a671400d","order":2,"progress_status":"completed","dependent_files":"internal/service/profile_service.go,internal/service/profile_service_test.go,internal/model/profile.go","gmt_create":"2025-11-30T08:03:33.383369551+08:00","gmt_modified":"2025-11-30T08:16:21.593972428+08:00","raw_data":"WikiEncrypted:Ri9tQKlOKujpSn96yarfQYRlE9i5FDWktkcggO+yHwPPugp61TDS5kS3hrOvQVIVsOxmvsoh9dtltpwMkYLcYTRq0hobZH6+zL0p8oQYNinOjTNzT9ejktLMU8ngLT2iO4UODoAlYfR+CeQ2csumlv5pdj2JTq3uK/KYaBLyCpXdDvqbwA1BS3JBJiGFaCV43kwo8lEMQPpQcOZ5G6915MFMB6ipndaIA7Df3+Qr0KOeXc1AastNaArAbwabi+dS1D9CTp0D3nufsWIfCdvoF/W/iTzeihX8qH/LebGP1ddY5wjWXfdbd69aPnQ/MKX/pHZL2NENDa5uNDM10d6hWa5kUBoLDpKhZ+/CHjkMIEGGgIbxLNT63oUvIln3Bd3xdaBBhrx4tg8Qx7LOmr5rKBB+5HyEs6LZlwhA0OKiAqArxR7qOo0WjepeWQaMflNsY3yAth7KeDrw2oNc1DKwn/Gnz1VvYeOCLm+HX3cXMz4xyLIGQ35gpfMOczW+OOB162eg/6VRCMf96AhYm45ASZk2/SHwcqVwryoPiHbQ1/1Ab93mSvl+p8ihT+28FziS0kV+neEWqMDyeBhy+I4QPkrtZVHUyihiOcR0KzXGInMhdfSZ5HKho7B0y5YjX4tiBRoaGQbymfZgTov+hQGhivmfcw/Wh3joCYF3ZVYHYta5Xxq890+Dwi1Lm/DHzUt1M7FTt3NxFUUziOg/J67cnYbMXqz10zNddQ9y7gObrGNejXFD0aV075CV4XMolwCP/I0+G8jeubv2BJ610xxXyjyFQYFUqXygGDezYf0Xr8c+DXbjBrqVWkBGOnS8fzuyHz5LiT6Jlxsa7XDrwLb/NdZCb/1Hv2SLYzoGwXhD46kyPchnGzMXeLRX7q4IncL5LU0r9Ued5Yvimdfs+8ZCQmH5Q6tyyunrwRk7RIMqhqE5GFUJTd4Nr0G2W57JqwXh8oeOEmM4OQMPWR8Uo2bZ6dmhbs3TxfrDHbUJLtJGJ4zwX3VrE90S2IPxGhAGNzC5NRC7XzyD1gh6zFjIFjv5n0VN/1BqoS9fgqJKtgp9d4V6lz7FFqgI+0/XLKVTViFWaNc/bsRN8H6hA/TkVhAlXnXG2PRcXcPYzZFjtWcFVcFJwJt56htXBem1g90D2huuuUlq7Gyv5ug+v2a1Bbwjy18nrEPuWIFq3LgOm0TpRdFllC09oKSA1JmsOpw3FfXAW5XJhfdbUwKDh9fIreCH7dYlHOsGEgPxZl8R80k2K9aDuUBOueA9U5dHVnyLBAyb","layer_level":1},{"id":"4c93f6f3-29af-47cc-be0e-97b8b08f9863","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"Redis缓存集成","description":"redis-integration","prompt":"编写Redis缓存系统集成文档,全面介绍CarrotSkin中Redis客户端的封装与应用。详细分析redis.go中RedisManager结构体的设计,包括连接池配置、序列化方式和健康检查机制。说明manager.go中Set、Get、Expire等操作的实现原理及在JWT令牌存储、会话管理、限流控制等场景的具体应用。提供缓存穿透、雪崩、击穿问题的预防策略和实际解决方案。包含连接故障恢复、哨兵模式支持和集群配置的高级主题,帮助开发者构建高可用缓存架构。","parent_id":"41b4d066-f7bf-4893-8d7d-726ba5ad6534","order":2,"progress_status":"completed","dependent_files":"pkg/redis/manager.go,pkg/redis/redis.go","gmt_create":"2025-11-30T08:03:36.162818989+08:00","gmt_modified":"2025-11-30T08:17:56.521127716+08:00","raw_data":"WikiEncrypted:4LmPMCPVPVr3sdKThDfkIebCJs3emubbe/eR2sMwi49J//AMe3QytbTL4QUod3od6JnO1siby+Ke4GIf0SX1ZdJg4P8I6+O/fVRCFvzZrCB3rzbXPgVIUtGz0MJ1cPjpQQxL13hjCPJx93zlA3hU34SsH2ObGZgT0CXoD7DC+6ftRDVvRWy2wynJbyLb2nI6O2gy4onhfgOku2n6RkZU2PAkBv64VdW1OJZFwhltW1OP5cK5koCmPdBrLtIl0pgJA6eb3ErE0+MsczU3db+wl/f4rxB4GY2MFzxQ1ECP5nW5AsFi7TrrR9niygjQxncfKyPmZBiapYaIZsAtRZBMfIqglQ2m7Ue//y4JztQyiRkN4+lr005lnbmf0FeJVd88mdXu1hdN+fx0p4PHED//16tWlZQw3OYfnhuB/JGw/FQQRxRlpMR6aKtQcYCWPOqIvFniUQOpUwTTpcIyAQ+iD+gM/vWUabZpZI8K2n7fSEM8P2eIZoS16Rsy4eYwgJS8eXPYcmuKFNcLXuuk/HJNbd1tRBonUnOJKcvBdRny4nmsv46d4Ooqx78OHnLbhgA2lHODKT5jiHW6vgGllw/f7zEIb8TWCL43dwGso+BDXRr57QTpMiq5w1eLAc8j2EJjrg7CW/gK7SOs5PftdoSTeiChBpZ6C8rbsWr+Rk0KVL9VXr9Qipe5lxr8QsiPjbEuA2LEHbwo+5Fkqgu+SfALc8zxOxwIEkTaw615HN1ycIsX82MIcFzYIH9Xem+Tenoirn0PiCh9eoF2ZBY+HY4seOZCLzZh4K9/0BJTaO56GZYeprXAmMWQknzNA9dgIYbWeg+mzeCzvmfNvuqGhDZRn+QT7a6iJ3DNJ0CInr5DtrZgy2lxhqMs4VLa0kj00QlkHSwu/3KBW3UGIK7l9yFZCtgXAlMbwiooxQVPR08s85IGJnc6Xez6b2Dlqfv8mhq62ga8gul7NU45hz3rd5dEzdJCu5kJkN1PNEHmTD5KH6e+scjrT3P6Vena/Ew3Zl8Qvy+hvL7aKBd+7ZWqh0u6mw7LQBggIorYVgYj90ZgqUZd5kkld+Y4OrqpBnFc+a3/1eqMrn2FWAEUAC8ZweTGizob0b1a3U4fzBrlv24A9BM=","layer_level":1},{"id":"14c0d961-c1d4-437e-b8b5-ed4728d0278f","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"邮箱变更","description":"user-api-email","prompt":"创建邮箱变更功能的详细文档,重点说明POST /api/v1/user/change-email端点的工作机制。描述用户更换邮箱的完整流程:用户提交新邮箱和验证码 -\u003e 后端调用VerifyCode服务验证Redis中存储的验证码 -\u003e 验证通过后调用ChangeUserEmail服务更新数据库中的邮箱字段。解释ChangeEmailRequest请求体的结构(new_email和verification_code字段),以及验证码通过verification_service生成并存储在Redis中的机制。说明邮箱唯一性校验(防止被其他用户占用)和错误处理(验证码错误、邮箱已被使用等)。结合user_handler.go中的ChangeEmail函数和service层的实现,提供成功和失败场景的响应示例,并强调此操作需要有效的JWT认证。","parent_id":"03318cbc-4041-48ed-8bd1-f304a381c6c4","order":2,"progress_status":"completed","dependent_files":"internal/handler/user_handler.go,internal/service/user_service.go,internal/service/verification_service.go,pkg/redis/manager.go","gmt_create":"2025-11-30T08:03:57.240443446+08:00","gmt_modified":"2025-11-30T08:25:39.530254678+08:00","raw_data":"WikiEncrypted:SmmNTSq96N8aZksVSKE+8zjWTSF2EfEwaWitnXMw2T/tQiRqChoGIDwnHG7PXJ5jIassW4KRbNdTx3u51o3nj8Fz6jHp3YJbd35+oM0sgwntOgTFQE//j5LlSc5iQWZunISqs+cBgoIRvir2bAFVz1nSrt9CWa3xTzp8eB97dtcHPHnWCoFx22BV2nRxWGMNrxlOxACOGrTc0/8nN/86I1E4SC0I1BqqoKa8S+P+fnHOAdE6M4MeMX2l0um1cmlL+L6SU9SIctweT/vKLIdzuZ55sg3nKAy1dPV5O2zfAOBhqYc3Pp70tvZWogKd3yhaMHJAFNu+uZViRKJlm0tW+/2kAvxKXD2BrWwHs+cA9Sm6zm8ssqZdqVYWq4ylbwvGLMKke8PKwZ+XSmH0Oxq2THc3Ttge66h/VLWppL61FYIDEmU1blH0Yq/3IYcAhS7Foichm6N4OUBpW6WtrEOOAGdCZ6FVnfvUQxCPr1Oacqzo7LXVpKFBdGNWKsNsrx+eCOHQpWlm3B5LeHJvIcmKU4E2oeT0oBYgVFmFONk/uGTujWPUesRf8suzcos37j7YJBcBNTtpXzYJkO+FmZu9GRs1TjC392LiYR3Kpwiazcpd8EA5QHItQKxCrsAdMsZagdoUVaGWq7dvcDRr0ErYvHu8/UVB6bt6uKaBGI+GtTJYs1eAcCPpSfdZ3Hp/T2NmZ/gsbKXkgmJvCYw4VCLu3N1oD4BUGspcW9SkdTHlsXCEODB3nSQEYsV0HNXhu5D18EwRj9teWOztKKrqv2aBsDbomUIwZaVD+eajlxTmUBX4i/twOh8tg4odAQhZpTDMkdETmmg4z4hD5DIdrfP3iBQdS96aTrjhtq2b4EjtV8P3OC4Yz5pHfKxeB75GCezxY/kIMRDrpCnIuwiBXxV/Lgz0Jib1vtLUGaDuJ3KJtkNiT+VcNpP0JOpBc8lCPW43kW+znAh4S2rCDfFKVSuLCt7mTHIB1r8CLcif/9gUQmuQQo8hXDEDh6Lc2ZblgiF5vjxHHaw0AmzMYJzaVxynz74cg+ATd/FmAawUfaqF+6stJ/OOPiyUPnqRTUa15vFp+E0xjCBcKHDuYqModZ7ipdr7lZRISPQnyex5m0jmXs7dyCclZ1Ab3/aoo6Twe4xLKSC5ubs7cNymlUI7YWc3/hJfd6oLdeXdqeLh0JOEX+Ah6KBCBZFMNU1e5LEeoXoahBcwYYN9ZBmQp7Rq/ykPwh3fR/1RtNnLnri6Kbh8Zqf2NwVitnBCdTrc4SmhRO5dEtBOfPZZ+E5KyO5ZelyLjPlCJyJM+RwBDb4KTMsWPyxhJJNWTvlFYM/elS+gcx1FOoK/IXF8ZTD5CK7vdkQ/pzqSmxNw16scIsujFVlB9JOuwjVaRoD8egRRK/Tb4sGNjHGAW2TO1647bnqfJjoFPd6kccuO//tagVev2dEU8FP79pArOdOxdoBzn9uZlWmvQ6QMD1noLEM0KW6c1KORXa/g6f4SvPlSedd3hpavrHuB8pfCdqcwIHk3QhOUxfp96jdQx3xh/ru5GOv6ko+c/DfJ+Ak6wTWiTzCmJ4/rQf+fwq5b/cDGPoteEgLsuQQdmjBg20WTtQR7PWs+ZA44hQ==","layer_level":2},{"id":"9f566dc0-e29d-4be0-ae1f-95cb86761e9c","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"Redis配置","description":"redis-configuration","prompt":"创建Redis配置文档,重点介绍CarrotSkin项目的Redis缓存系统配置。详细说明redis.host、port、password、database和pool_size等配置项的作用和默认值。解释pool_size参数对并发性能的影响机制。说明如何通过REDIS_*环境变量动态覆盖配置。结合RedisConfig结构体和连接初始化逻辑,为开发者提供配置指导,包括多环境部署建议和连接池大小调优方法。","parent_id":"b05ad424-1454-4cb4-9d82-791cfcf7d650","order":2,"progress_status":"completed","dependent_files":"pkg/config/config.go,pkg/config/manager.go,pkg/redis/manager.go","gmt_create":"2025-11-30T08:03:59.905591972+08:00","gmt_modified":"2025-11-30T08:17:39.77763644+08:00","raw_data":"WikiEncrypted:4LmPMCPVPVr3sdKThDfkISZbA0iqnTC9fm6jCYwGvAVnQRrS9UdnQea+J7lGTnGLtwsFFCwc89zH2M3iBVPtXYsbWgQHX1QmW+Wi/VOPraqxii72fqJqrhew9TQJ0gBxOEPO/MaSjd8tlSeYagtWVgGSiN4+pbYdTVgoQ4lt8OydY1qbL9eBsiaK2d3BmyUQCK8ECUKMwNX6eaQ/Fy9vpCDdn/AjK6nXljZSsf80kxpjVPzJVcAauev8NtnGBmtMcp8DjywXNGJoLBT0w+aCbMUoqPOv3bPKOY6PGaBv0uLznUwnGmXNYZ8QOaQ0QOsP4yaOLF41+UunX459W2VkpLKJlP99+VDB+TOVWA+byCiIBe41BTGiPtQfEJIih6cqZ1xPRVVq9DmJMmg0tfL70Iu2Ay0rLORdPPmcxuIExqbAVVxlynGSYxAA77BoQxJmVhs2TkXCSRnxK1zrgxaSz+X/KCXq4a3sZABREnEEfkSFEfT730JzJ07J1s5GVJxi4dxOYrqmvjsOZJYiY67Xnew3IKULC/WJLtbwmudG8VqXkr2F2svuwnVqK21d3ey/GyME3EVHb3acDcomwklo572XeDCk9JdlR8agZX6bvLN0oVCwjMVE8HdJDqlVEVkZ06hiYBFI1zwpm+YlKRELXkzEY87x4yLtqxKDxnIam/9uhEz8SLmpP5krSkHrkBoGfiXEhid6HqyIOQkVHJUWWM4D3/qNwWkE4lMk55kTexF6J2IR/7tEdHE3wQPhs/F+Joihb7QLw3R8fIjrj+CFNBciS/mPcSVgalbffSWDdmsTBdt2TmJqkI2aUXXcxlWBmVVA1/dfmDmfn+RaDrJQqJzimQgMKU+GG1TLvDR+syUmUGQLA3nNgKNEBx+dz4QIge0W1XgzfqKNQKB/m62ri2nCpWFdA/2xGrh+STFGNFyHbqyc0S3h1NiOCcApCnkAK3+3QJzOnJerdy8HaSCaSQ==","layer_level":1},{"id":"7ea29b43-faa7-43ad-a53f-7dc66632576f","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"发送验证码","description":"api-reference-auth-send-code","prompt":"创建发送验证码API的详细文档,涵盖/api/v1/auth/send-code端点。详细说明HTTP POST方法、请求体结构(email和type字段,type可为register、reset_password等)、响应格式以及错误码(如400参数错误、邮件发送失败)。解释验证码生成后如何存储在Redis中(包含过期时间),以及如何通过pkg/email包集成邮件服务发送验证码邮件。描述不同验证码类型(注册、重置密码)的处理逻辑。提供实际的请求示例和成功/失败响应示例,并说明安全考虑,如验证码发送频率限制和邮箱格式验证。","parent_id":"6fd593fc-6c64-46b8-bccd-83c6d693db38","order":2,"progress_status":"completed","dependent_files":"internal/handler/auth_handler.go,internal/handler/routes.go,internal/service/verification_service.go,pkg/redis/manager.go,pkg/email/manager.go","gmt_create":"2025-11-30T08:04:00.37768627+08:00","gmt_modified":"2025-11-30T08:26:15.817704371+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg7GcRVN5ps69dN7wQ66//CfDG60SRc2eYPTXfOGCK9L9xADISfdLcpn1l2xL5xdW3ow690AMYpCVj3CmaKqvZWBfJI/MbB7dRJ6LFicQmi6kGTR78b8YQpWk+keMrZmc6As7Dw8cqu/AA/ZC1XWmV3ZIEcBMwDMPhQKLuwqiTi5PFQkm3IPgOgieTYTWiXaAk37smPj46DhRIZE/Smrx8t0QojTuZC3Nq0ZanZXgX2qek/LOMMEemtMx9Fa9TR2vZMKpJ4pMObHkp2MoZJRMNr9RjyJdZInksi4m+Aogn4qw2QYCwka1zmD0+C5yOKw+u5aISYJgTzTQgGYWJi/L6+Hdbd0w6tKY9UHRV/18jV/p3fd4c/uV6st29qtDpGboE1IxKRnefmR5xu6umXa/c4wTVKEiP/GIyoR3t/z6QHSnMx5qdJ8JTesXwDoTI78S/bOMondo5i2hQC6LuXC+1EC4q3+POoTPdVff1NwHB+C4URmur4x2bZmgIBTIo42ngou5Vv7bnlwslmzJefsGzwZXViHL+newhyFq5ecC7M38a5rWeJTqnl/gZtqKLt+kaQgVHLF5rEHaNQe/jFKsK9ED8iSvpZ1HeXaoVPt1lhaIHL3D2lXRTsGbkwsSdt4yPUOegeqVWMCorHpWbB+JrkARJeaKFYWby/+sOV3z9VEUuvpGaCMbjZqalOewwzor4NPo+VpymKCBbDqm3AZJn/27stAAnioTuhgRhdoY3sNvRD8iZmfY8rAd2k4bXfLhpaar4zD+LTpTWhiNWOIDUd2mI8O7P/X5REx6wyPQtLv4JRATKpFbvcvyKLwqCoMnbaYWOkTgwQVv0UulQwjf5sGUvc+pr7uo5WOOFX6208aZKF450lAn0vv9Vod64NrTEDSPZMLaBRZTerLqUUcYuJKJdXJvKqKcvj4VKqmWIznbc89u2FT+C+4LTOnycRwzlUagFDqCR+L/1VDVF5ADMOniAFzLkeSoEhfWfJD1k+zrYVPwqYdFf5lqita+gtr9BRsX0jEs2iAiy1N8F9VGv/yrrO+oj4dizqMauh3Uk/FspGFC0LMa/931r2q0kbz48yNhEZV9RO8ayZ1eRJ9XNVgwMmXkPl9RpaTaQNcgTZ0eNxxqMyr1/fXwpOnJmiJwVoiflGoH+z1k2G3a6nsM0aXYedhWYMniTlzV1rgewZtGKlXgmf/TOuMXL8KhwkUdQDuB4tR4jGPwb1CiCZbJ3MJ4bgmyjYKxdi5YpgbyVgmB/4P30fT6AkrcBIyPcgXrcS3aDjx1CHWsrmi5FxqjL10=","layer_level":2},{"id":"c8e5f788-0578-465e-923e-226ce20fc20f","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"材质删除","description":"api-reference-texture-delete","prompt":"创建材质删除API的专项文档,详细说明删除操作的权限验证机制。根据texture_service.go中的DeleteTexture函数和相关测试用例,解释系统如何验证当前用户是否为材质的上传者,只有上传者本人可以执行删除操作。描述删除API的请求流程、成功响应和可能的错误情况(如材质不存在、无权删除等)。说明删除操作对数据库记录的影响(软删除还是硬删除)以及相关联的数据处理(如收藏关系的清理)。","parent_id":"f92758cd-1d31-4875-9ac8-9408d5143422","order":2,"progress_status":"completed","dependent_files":"internal/handler/texture_handler.go,internal/service/texture_service.go,internal/repository/texture_repository.go","gmt_create":"2025-11-30T08:04:20.230723138+08:00","gmt_modified":"2025-11-30T08:26:45.236847803+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSgyL/Md6tjWhpIbtHQmhMXlhuRTAqDCXYI5hvbgxB4mOHE3gJFZVMmzkN2UBrNwMLVXs0DNNZQClpIO34zQvaCg+BKCuL/Rwo2DfzdlkmMsnYhzPDvnmJ4zfDB7tmvxgJRaJfGdNGsuqrh5/Qlwh2l2lqK/jhD/3dMQ5BAV8pf+IVd0NY3TP8J4NvmlfLZWuAFUo6qdq8STujkcn5ZFC1bqMk9lfpMov7pnEqw7RXO3oNCB7zspw9Wqk4ATn10YofZgQMr+COW6fbgz3oSp6/Br+ywJEES0FFY5T8RKSdcww29uS41lRv3IEUoL/fC7u8ssTUoMZ9x+c1Rt7FTyok7x6S8zVMTS9KUaxHF1I7RZR31afETjQpEDQIZNsm+ndUk+yvU2sbXBjsarL1w44PbTK7yTeY9Fmt2uyoj4ZiHHKPjEUnwi+h1ExkxYi6dRUIr0x5K2/9Y+sP8nE2GLdydG96thGN4ya43ian40uuKfa3Cvt2sPX/ZQctO9CwcvQ+UBGvC3mdLXuMqHyCaj7FJZvXxmHaVqz1i1/AbsGy+TK+JKwM0X2Eb/7aFX3X8yg6rE8BYfHHaqC6C1cS+fh2bw6OkLxJoOZzlAPXiB8NErGZwR3LsWiuCvBTfYb+DPUfrL7B8rX+CuQZhY90W1lHAKv1PkJRk4WUhanKEUMOhzsBvkccOXuZLc6na+7lL8Dczp76uKe1J1UAghkEH9X8+ygzvkx6222AaJRTroFgGFXMRWB61Mk40I3eyz00H9UOEfSfox7n1dZFeqMfhWfBNiVqshiwt0VnK1arwaItcTawxbmS4SIj696bvCe+s9XJCX1kfBAk7LBKwBqupBtiUuko504Rp0NNMzxZOzKgZmmFLN6eDOoBl8svrLK7uBHhNLTeb9NShgD8xY2Z44Ui/y7bJVc5RuI6ldKPmXFBqKeYneJ+HOI2n38TxE+LfP8dfTxaUOi/siWIWoJJJQoCp/jCVev1v1lxXOUOjO97DIbX5sahAKa8o8iXjKdvgY2xVexw7vHudTehEgIEuuWLVioRXhp8oSv9oyasdqf4BLMIrYMKeSyRRKyxPihJTC4AN0QxB2uLvhrOiRX+WWqlWZxI7JZhQl8Cu1O76LchBzyFQZaBn6p+XduUEWBFQ01i7A==","layer_level":2},{"id":"12d363e1-e4be-4127-ba9d-37b74ccbea09","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"更新与删除","description":"api-reference-profile-update-delete","prompt":"编写档案更新与删除功能的API文档。详细说明PUT /api/v1/profile/:uuid端点如何更新档案信息,包括修改档案名称、更换关联的皮肤或披风材质,强调用户权限验证(只能修改自己名下的档案)。同时记录DELETE /api/v1/profile/:uuid端点的删除逻辑,说明删除前的权限检查和档案存在性验证。提供请求体格式示例和错误处理策略(如403无权操作、404资源不存在)。结合service层代码解释更新操作的事务性保证和数据一致性维护机制。","parent_id":"394f74e0-ba8d-4994-a84a-5ba48d385e83","order":2,"progress_status":"completed","dependent_files":"internal/handler/profile_handler.go,internal/handler/routes.go,internal/service/profile_service.go,internal/repository/profile_repository.go","gmt_create":"2025-11-30T08:04:22.500672136+08:00","gmt_modified":"2025-11-30T08:27:07.351926002+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg/XwJnQS3ujeSdmTfQruu6xU5mzFo8wxySGHz9jQq7mH12hKcQ6pee+E/NlXEgO7AJVGQvYbrXKJWM0PrR6eDakjWJvjk5nOLiYPo/C1QkYYA2U/emQWyngsEN1awF/pWEAfNAL2BnLA7+2J+Pk3z5YpH2V8mKvsZP8U/uZgzvWCn0+rwsMFFsnAx8si2KghKDWIfVqoYFfi9D55Y5GNwFkTb2Kn63C1t18dZqnpLCyBSUKrVJb08C9Etn4aNwpcdv5EKBPyRU8AZfTl2o210Rfje72iF3rP6m5vDaW3Cw+/TkOgz9w5to84+dlekOEw6Erb9Lds8hP0FhYH4nUEyXPiLh2p/nxfXep071FcVx24RF+ByO4Cpq82LKPrA7wu/9ZcfVRX0tO6D/hNCQM3i44obRfsTp0/V6AMggBLtyFd3pineIciHP8m/G3fqWZ0G+cHKIWmPy4on8EB4yvtBtu95eGXwJIvMQzd2DQptNVUsco/L9+krdm6JZF0+sAzp01Q4Um3n1jZPoK+h38tpCG2lmJplEzyKORJBVCpE55mXST9BW8wcRc2Yzc60O0iL0yhbIR7Yi49PrVvUMqqncAgylnWx+BpWuwSFmMtPEGJbkrBgLEbFNjAZimRh+4VeJcKFGn1YXdaSs0jRy3EumXnMkz5GmsjVmncLmGUD/vBM4y6sbrbQ+ZI6VOohMhuSlIOMggEnaLg0qrR2XBqMsDvDknrJ4v2V5l3w9qaWB0vIgDx8iVfgBkBco1oq+ubN+6vnsJEuD+zp4oYj6zyoJheetDrmDbgwOt6Zog3PwFdPUqb149z1/WkNFRTnrC4y3RdmifHvEqkIbgRmuCMQ/Q+HF4b1xDh2x3dGx/ku5sK0sCNzYQFU9rgNauIT/Is6cHegYXc4iJVATejMHNVvpFtPNt9urHMhb/rxi3ANhmkLUDwI/vcwBVmqmF6todIzGOVAbhl5BkO49Fzsr4RxxY0RIZN6XYr6sdVIQEbRVXE2QC/hkNioOMh60AFDEDihCsFnpTZmXRrhVaFeBMnftl52O8raXwz3IL6eSpz7v/A1Brv0qvYKb5i574AijcFc+lHuKJq1dbwwEfd+xDMie8pK7tcI9hCk0tkPFNAy5e7d55I55B6P0v5ju7pem0Tvdq/ooTyn4A57Pv2VuSLKaxeScQNlHi+9CKYqIxnpfoSSjqT5ppYn23AJIG8XvXGAEUQaMjg2Z63+9kZ2MdjQm9TrP9KOONDhgR9lIYCYhJcLlr/5SaVQDPm3GAKaxSPUP8fVu7Mk6qNKWSvZIJf7MPi1PPJyh9EAG8C5GQhEbpy","layer_level":2},{"id":"59fd214c-318c-471c-947b-800142fba9e3","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"档案查询服务","description":"yggdrasil-profiles","prompt":"编写Yggdrasil档案查询服务的详细文档,重点描述/api/profiles/minecraft端点的功能。说明该API如何根据玩家用户名列表批量查询对应的UUID和公开档案信息,支持Minecraft客户端的玩家数据加载。解释其与/profile/:uuid(获取档案详情)的区别:前者用于名称到UUID的批量映射,后者用于获取单个档案的完整信息(包括纹理数据)。结合yggdrasil_handler_test.go中对TextureTypeSkin和TextureTypeCape常量的测试,说明档案中皮肤和披风类型的标识方式。提供请求示例(POST请求体包含用户名数组)和响应格式(包含id、name、properties等字段),并描述其在游戏登录和聊天显示中的应用场景。","parent_id":"21debfcc-c026-47b1-b462-fdba6e17b157","order":2,"progress_status":"completed","dependent_files":"internal/handler/routes.go,internal/handler/yggdrasil_handler_test.go","gmt_create":"2025-11-30T08:04:23.82945868+08:00","gmt_modified":"2025-11-30T08:27:41.33828465+08:00","raw_data":"WikiEncrypted:XfNX4oZehM80K7xiLZZwPK7bTUtwEaD/dmnJJDz9MxKDHyApFcgk+Hp3awaCwy62D6fJR/s4/QAaJ9cvGkDZzpksi6R6C22Gi3ke5hUPLsmCa8JZuIj2/4rFpA+obE6UVH3/vgEnyh0J3LKbhhrN5GT8lhoKRlHnefUZNfPW3pRFDpyDU4hn7YXsEFMon7kt9yb8Yo1JhTNvPk298LHXYWgWCKam+wdbnAc9uQb7ffAGGadKYo+v3lIlCso00KiCVT5/c3A1dvKAnavQWa0SveNpSa2WX3TZJNdT64ZXSioCqf7tS6dL42A1mEHXOjdncL+PJZ9PE82m5+Uqm7p1bent8V0IVzjsNAgRnu8Pk9lBIv2CrqOhf0N3XoAib3JwfObFjD1dwD2TLI+Y986KSFwtUyij3+ufaBNMhxvXh5Emy/QyuG7ng/3CiRxZhzwfXZNx7oSsOcAIAhr4CpvrRQvN4jQp5lS1DeGmWEzAe/njCjDaTKu3BfnL8XnGFjw8XmZF0dyt9hPJb5iekUibArLeED5xd05NRWanfdDnWllviay8fJ71zR6X48IanLvtnqoN6I10sSjbTvK+BZUQDr3B04KKVW+JODVi6EruE33VliVlYylU3F0vx9f+xQtNqwTgPArpBqKOvWsZPnw/oMdBEOg4a8gKKge7veKiET9lUJ/PC8FZRi+dQahClN/zrwGSuBtBUiPNB0rZtjjVYu+RQflt9fcehOGH1a0M5s9LFvuEvprfLCHYVkQ0Tl2ONYFp0AafUEtdivoAHCwaLWN2gnacObAyerfAz/YIR1Juy73xZ5k+xznfcRYwM/HW1fY1iaCU4vosMKVisRI2MwVkWa5Ihmhb087Vo3XBqLw6ufwnGNaFY+zCA3Owkyq9UtNadO7uZwtVmHMiUOTjHzdai5bxN/GkT/7KLGY5Q9ZrgU+4mwC0Hn4+GyRVZ/s0aNWESw+iGD2BHctVMRT4Ubp0r6jJQoM9z0iHM6S5pBpoLva4eAZ0Snj2O2bMPC2bqblaNn2+dfXYbv12McpVDpv9tajCOVnBjjzi4ZfbVg9+oDMskGu0R3bvhdsLCot6v7GTLSJ3n68u1aMh2/U9LWYcRE5C/0cM7/GldEdm5cgWauEZYh5cDzcrZJLRGq3Mxat+B+dRdogsrrDug0wUH+DJvhMeuXXY5yR7vNMwkGAzkqrx2u1jCcTBYGNl0y91dETBDLvvpOw+hU65fjIO3/e07z6HN8zrJTVCJ0lejqTDZV/A01GR30K9bDmzIR9hv4nBH6Zrk5WnF2WsjphTZmxyzUMJJOZWpUEaZpeiphD5cmYYDdE4kmNcZ9y/zt9+EdNxztjbmdF/fbj8Ht8lNi4O9/6W52zit+jQwbx/D/7gMoC9cl2uO/gpOOWC6Q3euANMTLajQhoDJ6R8k6CyDaOrPRt6jE/+ILZcEg8IjSY=","layer_level":2},{"id":"b982bbd4-8d08-4a9d-855a-8695e5091347","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"API参考","description":"api-reference","prompt":"创建API文档,重点介绍CarrotSkin后端服务的RESTful API。根据routes.go和swagger.go文件,详细记录所有API端点,包括HTTP方法、URL模式、请求/响应模式、认证要求(JWT)和错误代码。涵盖认证、用户、材质、档案、验证码、Yggdrasil和系统配置等API组。为初学者提供清晰的API使用示例,同时为经验丰富的开发者提供详细的参数说明、数据验证规则和性能优化建议。","order":3,"progress_status":"completed","dependent_files":"internal/handler/routes.go,internal/handler/swagger.go","gmt_create":"2025-11-30T08:02:55.663482984+08:00","gmt_modified":"2025-11-30T08:07:40.107154259+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg+WPNa2UHH7yP2PPjE4/OPkUytUlTK+XtmhJqDmkbtEHUInBMyGJmK+1OrYyJNWBIuzgWEIi8zMncKnzltAaeS1kZv8I5qfKMx4n3P0dj9/z3R1+dETm4cimaI8ELBZUUCTvcEFsDldAadWSaevtl/frtrG9pRa53P6qTFNnCH4TP+KGkwgR6aEPuyh641g0xQvm6/Yx46XSibwDkLMOYskeVJ/SV/YR2TavqGAjP5I/+9//oXqs0d9UorlXvvP/HxqzaVXzF3BoXL/5AI2TMRu1k90t7lzb5O5fmFNh4BsXcgPFQ1DXMV/VYXKFRoFT0TeLE8xqoAOZ1GRhl1W82BB/ngOJUYI6eDisuWpJZXPeFxBgM/QHV797VB2R5T4THD0oRzHACnsiIvW7wGMKzMjU1+M/33FS+KRjS3w3Mzi/LXMAlf3tD+vcF05FyuXSjTQDe6Y3QJ/1dP5yfc2N+uFBFA8KVIAYG+1m1Z+Z2GrlOxGumMo0K88plxp+qlTpTD+RgCMnJdfGSCVC0hFtauqoR+QUgXSStpm623LXp+zxiGjRsPntMZNcBE9Az3fgTfyP7gemhj9zZ8EqIKjf2HzRvf9kvniNzXzGslDBp5AJoo/4sZseZXvXk50BgAS9/5ID53TVooq+OWCInZMi0o6vAF8Ow7w5wMKwWy2sl/ymEv9LAycPQ9Bduicd3+9bbI74v+r5DPhOj9rP4PZbdWwabibaYaJoSco5YgkrKAtR1qqaI8vPhn0UAm7e46NDit4NG/zRrvKKYF9sapc5bAOl/vV37w4osOq9tkeKHPqr25h9r5rrSsv/lvWv4OfbbaEXULcCv1OhY8/mrb/cKXJjqPIaxjX4GtRlc4t/TIS8hdKs4WHQ7nXX20E4JFrH9ZPqedW/DXp4qJSt47ETUMj1APIoDQtVnspLirAiBTunWH4U4dwsKdLjn1NZ8yMXdnfefmTrGw/hPXbN5G5JL9HPZPMylpaocirx03yG9ZG741Ag+ehuZhYYfeNAyD3YFuBdjvpa8FG3dMXV2AMBzH0mzLnAp6opmf18KR/PUF0o"},{"id":"a259d910-9167-4420-8aec-35aed1d209d0","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"系统配置模型","description":"system-config-model","prompt":"编写系统配置模型的完整文档,聚焦SystemConfig结构体的设计与应用。详细说明Key-Value配置存储机制,包括配置类型(ConfigType:STRING/INTEGER/BOOLEAN/JSON)的枚举定义和值序列化策略。解释IsPublic标志位如何控制前端可访问的配置项(如站点名称、注册开关、维护模式)。描述SystemConfigPublicResponse响应结构的字段映射逻辑,以及敏感配置与公开配置的分离原则。提供关于配置项版本管理、变更审计和缓存策略的建议,并结合代码示例展示如何安全地读取和更新系统参数,同时避免配置注入风险。","parent_id":"199e1e8c-1238-419a-929b-7ff5de856b10","order":3,"progress_status":"completed","dependent_files":"internal/model/system_config.go","gmt_create":"2025-11-30T08:03:18.437735194+08:00","gmt_modified":"2025-11-30T08:17:53.191442208+08:00","raw_data":"WikiEncrypted:gWB8HBj+8+/15rQhXgtMjKR2t1Xll5Ju4Hbu1OezgwCMA0UPnVXGyGOhxolsN8b2//swrVEqBIZ6EY0cI3uIcF0mlGccf1O4yFYh8S8AhoOtdGGqtB0GT0IQ/sYe0yTZX9HsyTdFxURfTHg4FE575Kr1lzq7JldRHf+ztmvruXQm94CK9CWThIiNuLnCL+PiMEsnHIBtl8Gi13OYZNLgs1UICCNAyvZL30uCVGg2Uet2nVKrbM5BAu2KJN3KOG7PI8l8LmZ66JnHQ5Zt5A8DZAmMsjQrCUAd4nVl5R7RnW9vmcBKkV4tzTxn8kk/zbEC0D9d3Its790NmqjCgicdBEaHKo02H4RVRdjESMAQXV5g2b5LYzvLtkMhMlFr7j18dYIOu61QsQj68Q2WOLhGGfKIMtWB6bhPIjC8pARSrnNIip+cnikD1ahHFIBL+bXCBHMiXtyVLutRCyf3VaULf2A3dyvr7IySY/BymGff0aiaeIUxH73CcD7Fg3U+m066mHYvTWokaigR6uks4vHRbns7MfzNl2wep/Xq7bBJVwPDUpdJo6eF2wEWGjRifUr+Fyxi8a2+1qvHvvIMpDkhS3GLtGFhcLpYeBIGxGjjXEzRBag4SGzIVJloVJO6AY9faZiCu2dDvho8Sow53woJ2l1v5JapHTH6PuCgCSRVmcANyb+FDN4yCmwk4Lm2ibzS9TjP/Ywo17mL/ZtZuswvcmQlejnTADocfAibbiJJo5288t0taD7izZeG+CW+r1aVwQQ50PSG70HeEtVx3DREdjPShH+uXUMGvCnKzUjJzwZqHTkqGI6IaPADKV/tzchjIntpTYBKekJ7iXiGmGDfk1FH3fLOJfCjnRlgpLN563iv23TmPa9AahfSKl4lIpuk0hNsO5XPhitGzvuKLM/SrKkGAD9BhXjpyxUIKL/afpdufUCh9CSRZBCsXS2PBYj59ZroEjk+TAZyCwQwDsMXNkOzpTTXxEO+/Qv280jOWTaOZOKX1vpSE+vrfUkX6t27zRa4BXpyr78gHMu0nt8Pe86zM3wXPBhDwI7qBby6GBk0xWC28MJuc+ZGZhrASVMXwQZLwcMhTisIA2UJJrosbdr4/ox+7av3xOBbLKR0oLfh+3HG6Md45oJPf7wFMqk2OgbEnc5VxpUZT3BT7um1QOXMMkQdh3LaKsoIIFc1jU3dHcLhNPhCHcC5r4eTwTKRnL6hwpDYb9nd6qSlGFtMMlTUvkeZkFr4SbjcutpueQ+g3b5H9z6RHEKb2R0W9C9MAm3ToQr7VMwiARYgzhFzew==","layer_level":1},{"id":"394f74e0-ba8d-4994-a84a-5ba48d385e83","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"档案API","description":"api-reference-profile","prompt":"开发档案管理API的详细文档,涵盖档案的创建、查询、更新、删除和激活等操作。根据routes.go中/profile路由组,记录公开获取档案详情和需要认证的档案管理端点。解释档案与Minecraft用户UUID的关联、活跃档案的概念以及档案列表的获取方式。提供完整的API使用示例,包括创建档案的请求体结构和获取档案详情的响应格式。同时说明档案与材质之间的关系。","parent_id":"b982bbd4-8d08-4a9d-855a-8695e5091347","order":3,"progress_status":"completed","dependent_files":"internal/handler/profile_handler_test.go,internal/handler/routes.go","gmt_create":"2025-11-30T08:03:28.234337379+08:00","gmt_modified":"2025-11-30T08:18:50.190984312+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg0M3OLbhVoj8nJaRIyhxGh63+dL9J6HyIRUanQialsDe7LiBUJRLgWqnUEwHqdEsecc7Vr+iGMj0u5gCovFES6LGKXfQrDLjzb+x/MaRW4KGrysTlSRWDffonNOhEUvg1BbeZFlvEx6ByhRoxTdYezHsYpaMJt75s1VB9hZvQ0uEtXbPIO3Km/FUIZhOfeLit9i0p21+Rf3w2W1K+/5SOZAy9lLUj2kGeYTCDCmJBvED5fcNl886iBLz/pPAN74O4u1td15YRrKdnGgbpHf1/AeWVSq8UwOP2zRf5s/xguvmGZpOH+b1esCIMYXMqOCExUKycsamgNTYyEjqj5NUM2ots6lud6dRoYK66KmunOZK7EKik5MQOy09cr2J1sLMjVotlCs4sfe4O3OqoQMju8QKBQYdo/gLcBlm6kd6wAUUm204T30C4KhFlc+cH+4MT/CmjaKNtYhGnwco7EbQRs6Dtzg5C2Ir6XX+/BZKl7KXHylgRXuO9xvh47AgXrBVfJUkgo0wybbQlcWoadDD+H1ESWDQaXYbtczdKeR7z3DvHA5ea0os63W3Ic5HsN1n+MvG425xXp3QPf/FsRKDk9AIuaDMsPZMaEQhyZsPE+3K/ZGYyLHOrKLpFViNR7C18EI8aRbtaS2RWrLeqZ+mAIKI5rzLExC1XE9Dnc5RoGhC2bDrRL5340U0UNirEdLo/z23N029mfUZURyyT3wBBLfN0oAha1C2IfD8Vd0vXDYJ/Sfj4ZQ7MCcGD47b3mK98j95Aj6u+OTHJ4CUqcniIIKeuMFnj1R3kI3A2ZyiuSsw90YVQXY6iBXBVa5vgUakeNv008MnF9dh9LDPu/+irhVk258jSxzqhFlKtisaVgZ8cqHQWSDHEB6Wc504ZJaK8KIleiKXqFkUkcc7hsXqchrWmEcCGbG9NmQ6ug0leZrDOKVxkT5j5evpKuyJeNrfjotWk2khC3w4lwNaJnfc1CO8EtdKm2Uh2gGS3N7ohXG5FyYhcQY+lxaIuYjT3+fv0xjwC5e2dwqmru+172FI9vMmD0/SKS1VnReqTIaxPe/Vi+GYP9TNJAaogNUICadvolxIxj41hGJPQf9/o+1zZmk=","layer_level":1},{"id":"22ea8953-9bd2-45c0-b40d-48ef7d38c535","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"对象存储配置","description":"object-storage-configuration","prompt":"创建对象存储配置文档,重点介绍CarrotSkin项目与RustFS(S3兼容)对象存储的集成配置。详细说明rustfs.endpoint、access_key、secret_key、use_ssl等核心配置项的作用。解释存储桶配置buckets的动态加载机制,特别是通过RUSTFS_BUCKET_TEXTURES和RUSTFS_BUCKET_AVATARS环境变量设置不同用途的存储桶。结合RustFSConfig结构体,为开发者提供安全配置最佳实践,包括凭证管理建议和SSL配置指南。","parent_id":"b05ad424-1454-4cb4-9d82-791cfcf7d650","order":3,"progress_status":"completed","dependent_files":"pkg/config/config.go,pkg/config/manager.go,pkg/storage/manager.go","gmt_create":"2025-11-30T08:03:59.905661108+08:00","gmt_modified":"2025-11-30T08:18:57.976532402+08:00","raw_data":"WikiEncrypted:WrtF4UhzC84au2vkp01Wd5G1hbBXddxcpLDYYRdrxX9BjCaEEO/ni3BVBppvtam3Bs366Nzx5Zgq46ml1VO4LXla0JQUUwabuYVeMvtPUP/dr2ESwT0eULNsJhtS6pJgspIxvcmfjvj/O4ngbe4UnvH8Q6t7/4HUEn5Bs3r+9nCBC+DWK6ErleO01dqDfnU9eVKyXew9Q1SgY99Sh+rCFcR4SpBvecNUBfuUKBWxyV9YXwhfr6EVraqx0TVRxmHRgK6l1igBnFI3fRAu3212wK8TyPkO8f0iEb8W/SKZvQJiJiWF2Jd5B96RUGUqEbsyH1H19W3jliLHDE2XJ74AHO4g8l1p73qvF4HfOH6VhTSliAXZZnPX/Sb7eQRWXKDq0A2ltjviG/JHFOWE3J8awib6pwkRxtSAEy9EifTTRsEl4wLTW9wMr9UEQQpSURoghYCVYrqIvLgflvVp7q+/L8PmpFpAytYawfXVOMlEOd5/ZOXOupUKsI8LisgVLE3WqFxWaz/gX5KuBrFacgK1aE9R+BdlY4JcB2bC8OMOEgBbT/H74EnqyZkF28BNl+SiLmEru0NYSsykuJwP7A7xcIG+QvZbEIen7imBdnNa2uX9smSRj2tvDAOwWUXVQ+axQApOF8lQbKb4I1Fic1s+b++y2FbzC5eGVt2IHpLsrOclsfFvwEfPMgH5MRzV0l2frvywq4EgbeawjttsBfVet23Iyx1Ro+GMGGMEcEyYsOZGFD/Kl2XnDunoyqq+OPD9cBNkxeFyrp/Sh6GN6rg8iXaAOEoIrxW2KV4svegaHOq+Kw19f8SeHMxsFV9MVnsJo+Lx/ju9JJX1O1AuMMo2opfCo1L0Vr7Ql4Kx4+gxJLL/mCFTLZyGdcFb7AAlYsvZqUc1B+ejhKv5zQMedGLXX51Cwu9/eqiFas0IXLy6wuNZU+6cAgnXUYcsDTEAwtu2zenFhYZzX1oIZc9VLi3IckAmvYkW6yZisl9JoLO7E3wR/VtHjvA1DOrMgxScDXlSifiBSsJRcRxNHZ3v6uxtB+OlcD6KeJpN5qVgtMmxcpQ=","layer_level":1},{"id":"f62b9772-46fb-4bd9-912d-31b40cada2d5","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"重置密码","description":"api-reference-auth-reset-password","prompt":"创建重置密码API的详细文档,涵盖/api/v1/auth/reset-password端点。详细说明HTTP POST方法、请求体结构(email、verificationCode和newPassword字段)、响应格式以及错误码(如400参数错误、验证码无效、密码强度不足)。解释重置密码流程:首先验证邮箱验证码的有效性,然后调用服务层更新用户密码(密码会进行加密存储)。描述密码更新成功后的处理逻辑。提供实际的请求示例和成功/失败响应示例,并说明安全考虑,如验证码一次性使用、密码重置链接的有效期控制和密码复杂度要求。","parent_id":"6fd593fc-6c64-46b8-bccd-83c6d693db38","order":3,"progress_status":"completed","dependent_files":"internal/handler/auth_handler.go,internal/handler/routes.go,internal/service/user_service.go","gmt_create":"2025-11-30T08:04:00.377826626+08:00","gmt_modified":"2025-11-30T08:27:56.059556012+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg0x1vagRWGM2YG/ZXjqembig8jTL7wW5ObHb1cxTJCdcGIXWxx6ZNEpyEfZ/1CJ184Vh641HEFKGNoMn0m9C7YAYq1jLGZhujvW977tZE9t8l6T7ko7oM/1mmJuQdXiGFJi+nnIdHsJvsf80jQrEbbEZREzGz6qmkovzfEztOyc3lAbVbH+inZuUKsHzp1d7tNLgoObQvVFBz3iqXGW9Bt/FIDcXiu1dOYtcOdKMtEKgcOfmYuaH85lhosODkOgV+k1HBCHuYQU0yhlQM2UrzuMTPnarKcm3Oo1v4tx38jZ0kDvW5GsT5Zvm254epq0muiRal7exac8X5RhJ598EvYdrP5MHxb02mee1Yu52k2zJeSB23kqrb3/xBIFwm3dCTdDIvLJH/fUWP8birLjG59IjeJkQmg0wSABpbT1amulMOZQZQ5Job9opfSGCUa86CP54YEiEflO2LuEobGIUI9VjHJywRH1/tbg3WiWzP2paQO/RclhD2ps30SWFbFt/AIZyJIDKWArqG9+mp8Cms8dv1YeEGMu2YzT4u1qa+7xSGvAPPxKuXcr1BouIvEBmvjmY74Ni/snTyjFwYFpp3iHVcYhwWI77c4wGvmFV2jashLbRImZq9+Tm6Kzf/0XJ+Q+TXHf0z9kU/+bX82rFO9a43hCto2mX9srmuFae05cfUszn4Bmkk9PDxgIZaZ7GlmDrdMMqB8wA/2ODNNiG7sr3QDxVT1DV6oiU9+/3ZtqKk3fG11RzjbGej6nsKycm5EayQP4ACmfsPYEoXM4in2Li7NJYHd48GnjOPXeICyLtj1iDgz/50m+NnH7VYct2hnl03lWY0cPiXRHh/QiKZ41wd7GpVOqIegdWeUE00f909rwIj7FqlqfZeNY9r8ek7cgBMd6YsS9ZSyKS8r0c3pqK2+pnKcDAjR9txwON7jUI0QyByXahwIaQDdQ3yURTRsZEtZF+YCLTQ4A9TjJpOlJuX1fmBxTnFqfUzK8c4Rjt1jFRJM51P5mKreKBRVG1HrPCm0KcqQ2Vcu5dqTWCzNoXEWddS+5OmJkaJOFa6oCQWUJFZNO8WWpCTix/LOPbHKAWGfvbtKtv+JjXED/hq44MZhrD6p5g+NlhrW8OJxOUFfH5QBDX26ybsdbSFK01NNn13eWql8aqwRqPRKm13hYtsbFSR9ztrd+n5uKxgWflJKBApQa/8yTBimw70xg6QlLJGqqX9W2F4QiLI8Jzi5c0+2Zh6k7dngA12LTdKMg4","layer_level":2},{"id":"d1b6651a-7c66-4e37-b390-fcb4a0c745e4","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"材质收藏","description":"api-reference-texture-favorites","prompt":"创建材质收藏功能的全面文档,涵盖收藏状态切换、收藏列表获取等API。基于texture_service.go中的ToggleTextureFavorite和GetUserTextureFavorites函数,解释收藏/取消收藏的逻辑实现(取反操作)和用户收藏列表的查询机制。详细说明收藏API的幂等性设计,以及如何避免重复收藏。提供获取用户收藏列表的分页查询示例,包括请求参数、响应格式和错误处理。结合测试用例中的逻辑验证,说明系统如何确保收藏状态的正确性。","parent_id":"f92758cd-1d31-4875-9ac8-9408d5143422","order":3,"progress_status":"completed","dependent_files":"internal/handler/texture_handler.go,internal/service/texture_service.go,internal/repository/texture_repository.go","gmt_create":"2025-11-30T08:04:20.230818991+08:00","gmt_modified":"2025-11-30T08:28:28.290547455+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSgyL/Md6tjWhpIbtHQmhMXljkHEY9wIMchbbQI2b43ljIxoKOxo75+z+kh4CDYX8k/D1crt+HA2I4UjX0PdIovZuA7MoDEG6hlOobFpNmRrC3lCbvlYaMjSxHAPBOJenS+cXeJ1Crs1yXhIUnzO33hXLCM8ZXIb5mGcZtUs6bViis0aVN6XUgfs2F1JZwSRk/GU6l/+yRisq87kktR7lzOwqfbvUOzfc1LrUFRiRxWpM48tAdaPri5SCSGr9nXP9E+UEjYNFHY3RNKS9iFnOOZ75I8uQ/L2OsMkZrqGIUuUwhrjaIfe73GzZ72ssjrzesR2AEs7MpHgO795JQOHFZ05C1wfACu/E6XurPRK9ulodttkBhZ9Vxxeo0IKF/Ns6aHbuKLt30OFUJ7qrQoI28AKwPWiE22UrhWX1OXkgTQL2vLLCaDvlh4YBCzic4Hv0xX04knwB9QlhZEH81syUjVm/UDrIk6tj1IMIw680r4N/GN/QFxeCzd2q0pmsyVb20qSzx5ms79EifC4QJYJajjiAJe/y3GUZgRbKl9S78Dym7KEhIe7dZ5ZzTxPa13SDPjZcE/OJOiJF/ezOmr5HinUjj6lSCblh6QceObyZJsg5aOJ+l4xEMw4Q6ebWfsR7QL+57sImSgtXbA6EhCJ5zzJ5X2ft2M1GE5Hh2Jhab4GnmN+p8VMAtUQmGgGTckiZR7ikeFHAgnlZsWXUBCMquvoPLV26XEFzWsKhTBQ5NMhylqv117suB2qqZZtw8iutW5P7BgeLL+I/T32TxiXUXjMxFypqWtFHlQ+N5Gfw+ompE4/np+7HeKyXWCII/nahtPyPDoVqQ8exzxpWo4HDE0H+tX+bx352IIIzXoXr5ymrSp1W6uz1OoaBCEDBvTFz7uGYEnXZNOcr1gRIDIpwHOIpzHKE/xk5Ce+7ROjm/j7tc5o9mh7c/jqHVX4/l46aFFC/Ftn0lRQYumWF+pkKUV9Af9CHvYayvoodQgxhBZZKzaLe1VmDdM55kxGXbnnfzL5bUBU31GaS2imkdkIHBIBMFbEqYJCQfufWwzHxfkiljFCk8FP/t2+4wZ6Kj4ErJBmL2TfPMIlg4aGf7U2wMCoTKPD8E+Pavg7MgNI3cGsNOFI8MUV1l5oTKQGUoAOyqwXD1W4dGimcV1JiByxpAK7M=","layer_level":2},{"id":"93b1bb5f-db13-43be-a8ec-22f675ff0ff4","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"激活管理","description":"api-reference-profile-activation","prompt":"开发档案激活管理API的文档,重点描述POST /api/v1/profile/:uuid/activate端点。解释‘活跃档案’的概念及其在系统中的作用——代表用户当前在游戏中使用的角色外观。详细说明调用此接口后,系统如何通过数据库事务确保原子性:先将用户所有其他档案的is_active字段设为false,再将指定UUID的档案设为active状态。同时记录该操作会更新档案的last_used_at时间戳。提供调用示例和成功/失败响应,并结合repository层的SetActiveProfile事务实现说明数据一致性保障。","parent_id":"394f74e0-ba8d-4994-a84a-5ba48d385e83","order":3,"progress_status":"completed","dependent_files":"internal/handler/profile_handler.go,internal/handler/routes.go,internal/service/profile_service.go,internal/repository/profile_repository.go","gmt_create":"2025-11-30T08:04:22.500766666+08:00","gmt_modified":"2025-11-30T08:29:19.129997499+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg/XwJnQS3ujeSdmTfQruu6yEMpCvfHC+XrJRo8yj5hIcpRfI2Mmg8WYE7mnK2IpFyU2MGFmecZFSfXdlPSITOUQKF/G1+nn5uPNaKOzad3AlHIA0C9ifQ+t2HDIOQaLGFj4VBMN48FucHUa0IMvVTdbzBL3Iaw0ZMJSxL/uuVs/sPaQJwg+fS0LeqLhHCo/VlzYUoFzwuq6/JBagoUxCMWriiwYbid5nM5DfASpMtszmthevXQExJxs1lkAHAIcj2lFt9H6MMHVw8kqSMnM9cabPcTXg5wSB46aLWxNTpZTFJfFTPLsCTYB+DjipvZNe3uWpHPaak7mjojtGAa+4vGCB+QO3Se0yl91aHVpBw/nXXRXzUA3JNQq7nR8jYXEfveAo0RhGyeQRVp5OQfNSloJJpDKIqYkRXsjWftSiIYWRbEKuLREESdWVQ2uVeCAFnrqmDr6M+IQE+hYZWZzTtdUChe+TT+2+jBtx5aTmJSo69YxOCAiE8rXc2LSZzLxS88XHYtzJylNhwIuUHkd2WJUAyrHZghxqJDwsIVN49xt7h9FdBA2CGGqHFR3IMRklg3gAtHpL4E60USIiyxI4u/OEuOFtaFd1EsrpYAuQ0dtR+xDTLJZAa6WJaJokBtF/hqbV+jZjbfc9vyD+H7dQPBqju3SqpzNNwtY4YRpJLxYUY3dDwPlbsVSz1uOcOffW4tAQnEUfXZ55Z5rm08HjMHsC300XweJ06LciFCg5DM8ztmX+p4swgDPY+SY74FmnYjBOf/UJAct/3Y3FfCZMsw721KS3TcfQ+E9Tvf9drcJQD1V8b2FgAsuBv09sEHDWbYG/tyJPyYJH+4nAfLq8FB5HlBoOszCousXIOutaMTxRsK7YFzBgCywPYZ11mWVevw7Hhli7/e6SzoKFThbV6Nhjj+ltj4RoHD1YOgC7b4qgiKAJC+Jd3T+e22CLrwn2LCeCRSbbfI61Qv5UOR10uoPSs9kmE7SQ5U2A8ZRLA1rh+kr2Q/pApUcbei7odgZdaocQF7hbAFeDp+4NBvAgIFlB+VR4MZgD6oQ+SMjnbBK48jaX7p0cIf7nAQy6+BFC/an00hWPmVIFEl/tCYlPaitWf2Zv3T2et/InXEBaEGRETHtdth3B0+WOSm7+CV4FChQCbh4UFuvcpzspdfJcmDUkQ6HQHr8bXwtyn7tI40Mzr9lR6DbX+380Z4hEcxcYE2RMPPWsRRv3MinmVT7+lVvIjmgGe0pfwhLfKqpB4269rksy3nPSeoa27LR1bN9ZKn7VgVLkEm6JIIcySdE0UYA=","layer_level":2},{"id":"199e1e8c-1238-419a-929b-7ff5de856b10","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"数据模型","description":"data-models","prompt":"创建全面的数据模型文档,重点介绍CarrotSkin项目的核心数据库实体。详细描述User、Texture、Profile和SystemConfig模型的字段定义、数据类型、主键/外键关系、索引和约束。解释每个字段的业务含义和数据验证规则。为初学者提供实体关系图(ERD)和示例数据,同时为经验丰富的开发者提供数据访问模式、性能考虑和数据迁移策略。","order":4,"progress_status":"completed","dependent_files":"internal/model/user.go,internal/model/texture.go,internal/model/profile.go,internal/model/system_config.go","gmt_create":"2025-11-30T08:02:55.663546237+08:00","gmt_modified":"2025-11-30T08:07:17.291216389+08:00","raw_data":"WikiEncrypted:klcgW2PbPxJambbKMzvFtzxL0nPpsuPMPxr5hj83lS7zLbVY013R4TC8XNEUYbb5qxIyzNIzP0UIL5gcgWgb2C1cIB1ygntotAEi1yuzyDBPnqaWoVR0vacvIiA20dMHbJ90x06FHZL7GCXlvjQf2iXBoincr+xcHECJAlxGN/hRuBwH7lP5DK+Q+dHAGiUjBHqRl/J17nWUug8RDEgEEqt2fHSadFJbeUaOAOl5rJPH3+Q4NxyYkRthnWPiTOc8tR2EX0VRCnT8Go3Tc0M7HS0uiuDtlQ+sUFI8KWnrw9vPFfZ/bDztT+WBnBxFf4TU2uPYNSH6gh3/R+J3P7tlsRtq4ytJhK7rMzWI/kHtr48Es0HoQM/l/lp/kTTYf3onvnTr6MVIndjkCQT2kwCPOkP0BkapvXiecxy00LqY2sTxzMwiIiXgmNs04ZReTJuqzDYujHTlhYL5pLLX5QGFRf+DQNil5kT72TC0p+zuyv5zAscLbKOz8S0yg1YY3DlLuTt5l1uGBi2Tp8B004t8lN6sGGigAmERThHsj5zZewkBD16qbQ7QMnt39Z/NqJDV6nRS2M7WO+7jh9KTtfmhGELbOt8tXNHGQAZII3j0oYvUs6dSg31h469CofFy6wrGqOcM3aJEUMMSnvib5YbRVsTdbWhcaGPL179g1WqqBwC2xqURwsZc6w8WuUWznVKI3B16BfPffEXSL7G902tLfO+IbGmPb8HoIT6DKHE/XegMHrRZX32H9dLfKco/NnJa7XmdauOnONIgCQfn2240w7T1KLHQJ49EungvWxoK9kti1eA40DKBmYjJjXKIEfYUzcSRYFFqJ09+QmJ7uHtgmAa9hmFA6GD5W0xO2l/KSOodPl1HdjzU8dh7afZYvzUu6x4l2DmYSJUnKdVRjtMhMQcdy0Lt/Z3TghIt73n+QYapumFiWE09tGUX27QAcIv9aEqySrcgNGyrgWEPnWNniAwePkQ8JLo2++x1sr4hk/sT17bjItc10+FVXXLNt+G9gllAi5wm/U9rLGXUBfnpqWk9tYkXG22P6jK2KpCHq5uhX9GhogkqQMnXK8o8r74qrmakpxwTgQfE7y9XfP8TXA=="},{"id":"6581f56c-b89a-4553-836e-a745aa487e4c","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"验证码API","description":"api-reference-captcha","prompt":"创建验证码服务API的文档,涵盖验证码生成和验证两个核心功能。根据routes.go中/captcha路由组,详细说明GET /generate和POST /verify端点的使用方法。解释验证码的生成机制(如图形验证码或短信验证码)、有效期管理以及验证后的状态处理。提供请求/响应示例,包括验证码图片的获取和验证结果的返回格式。说明该服务如何与其他功能(如注册、登录、更换邮箱)集成以增强安全性。","parent_id":"b982bbd4-8d08-4a9d-855a-8695e5091347","order":4,"progress_status":"completed","dependent_files":"internal/handler/captcha_handler.go,internal/handler/routes.go","gmt_create":"2025-11-30T08:03:28.234440899+08:00","gmt_modified":"2025-11-30T08:18:51.311278787+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg0MGvWwtHzzeI1krqwwuD2pa7QFI27/c3VM/pnyZ+oz/u6w5TYOb7lNmTa6uErTM5mGLY8kGB0ELjFLFiGcJwqQJboFaSzehGQRZoValM4g3xJTNmk4EUjMKT1WVSVE+dLdnpDe2xruQ7MLES87qNqlCjiNvQx9WbALyLfGkxALmScUE+qmd5o1Q0PKNV+VC7RI2GBDainKIS8OyHcRh21KPOzMA13W7XMl59JcczX84uY7gi9axU+CAEV0fiwrBvT3Bj+ONqaRgP412VnVfnl18i5BLgDVIthPw4l6sqmPayW9r4tdDQuaIDq5SXo7WkWInnxKAhF7LDmFKGmNcgF/qZpnsFVHeOfhDJuMEtUW4sa0P8ByfeTYhEJj6GmTQctQ3fGLB/M4EcFFFynpbzF6Tbgu+ln2sq5yH18J3uxo3H1LikjGjdV/f/ShAQVut0nLrLs3/V4o6qGQpoJQqNNjlAKCfN3e5PS0imA05Cz+2e5qLOMgXLZXm0zjXjeTX+91jtLgLFmKQ4T/TX7AI56NFqEaNxMwNNe9VOxTGzAVj/JDx9LzJI0QT/34lWORNhtVUYH3cURIk4HF3lAClbE3Q46+7bq8m/i0SDLK4GQ4apEMv0SUN1eJrIH6Lx8jEHZJjqdfVtonD4Xxv61L9yvw9Wttz7IMeZqJrPhK60ST3mFcqEkDfzvxz0pRINO+oesn1K8qIcyAql1gjft/+KvwNXn61EXfhh5uK07oSfTQP0rE+4tHPmtpzjATenUcjPCk8zra8EJ1VEZknMmSBJN1qJQS42VWL3nfUfUUTYzKDN9oOf5pGkcfJzkHziRfSxh9KVaAXTG7ujrnF9IuGIt8mTFcTCWWW5t3L+PddoPOxBhO2/CRwZHL6Wo4VvYwp4Ge4seNhWROH2xD2Q6FLSQKTSgyJMpqrWp5GAr5uvqqLodwL/C2kgwFuEQLFzn1YWRuHnYuoYHaaqdBckEL4y4fGHhR5RD0MehWArBfHMESofbjlSrfxRW9/Rd30QpeYk2lwt9Vh38MQYYqKWWce3bRzRjwnVLktnjVDY8X4d6FgGUVjTrJGylfYsxQHN3P5XA==","layer_level":1},{"id":"676b7dc9-0651-428e-bf38-30bf78835638","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"JWT配置","description":"jwt-configuration","prompt":"创建JWT配置文档,重点介绍CarrotSkin项目的JWT认证令牌配置。详细说明jwt.secret和expire_hours两个核心配置项的作用,其中secret用于令牌签名验证,expire_hours定义令牌有效期(默认168小时/7天)。解释如何通过JWT_SECRET和JWT_EXPIRE_HOURS环境变量进行安全覆盖。结合JWTConfig结构体和认证服务代码,为开发者提供安全最佳实践,包括密钥生成建议和有效期设置策略。","parent_id":"b05ad424-1454-4cb4-9d82-791cfcf7d650","order":4,"progress_status":"completed","dependent_files":"pkg/config/config.go,pkg/config/manager.go,pkg/auth/jwt.go","gmt_create":"2025-11-30T08:03:59.905717506+08:00","gmt_modified":"2025-11-30T08:20:02.591805508+08:00","raw_data":"WikiEncrypted:jsJRNGc50FBA6MLjqMTAp5POJ8DyeJq9K9n5ALXE7gtzsOQphOXO+CadK51/X6E/NCBh3BAx1ZOKDnqX2Dv5qr+GDG+Jyn5Nax36vF695rATaszLFuPh9k5MUl3UyRMkXtvsyQEdr/3h+zYL/7Tz4BNx+ZxV+59iPLOFLwMzG6k/HkqJNIevPti7l7gzU/OqyKMO04WrXJSehXZaPuuCgHiIwkYOw1WrE9W5jNmcuIg/3v1vC56/uYWODDBK+JaKav358SlR1D9ZAKmLU00Gm+QeaORhIRbyPWkJVsjueNBnFg6xhvyRCsnufe98X6PH9uMOaJUcVNCB112buYAyio6ZP+wcc4OPasqfOXCOJFSDaDZmtmdwMq4ktQRWTD42Msd5vgyUNpK3Km57Ch+7Ofmr+1Zec1TsvH0IfV/IbIjs/+zdW1FqJJ27+M7lm85bqFerI6A+7skmPJj4YqGKao40DVEcEVJBsegnBF95j60aN1PyT7o1RAWmIKYAVjgUPs3ceWQ1+zsWnWSTibvs0x86zbsHSK3grAAN+xeMD4kMoHI1xV+qjPaxTWbYs27urZXR41bWItrnbNqYsVIFWuyyHaSp4Mb3e0MhVjDX+werI+gj8vbEK6oT8iDJ7J+SIRG3Qc0gEQBCcEP5TeQgY3ihigz+BmSFWo7cgfyAziT6tk8SzYB2vtllXZ8t5FZ/nw6s0/2B1mI7H0V83yt5LIcRLj1Sy9eF2Z+5X4ZWni0Sh1kE1HdfHcayu40hFbwkzxtYBGCe1Nsy3bGaZfcAMuf6cYyBQmkCpr67DBmMr244t6o+qvzuOtR5KUH5f/bbw0qtsqPMdZy9cI1L7l0pwhSMe7HtMd/plfQnZbg0fK4H9tsvz4tNk44WO2jmRIevS44hePUEH5XyRLz0onznQ7CTbmAqOeQHSATWNfw9IRLDludzrizUEjKDZufV9sPvTuxHdQyYT4bFiq1BBxHEVnWMfL5wLCeB18vO+tqkGxA=","layer_level":1},{"id":"ba98ea14-16ad-45b7-926c-7eb3282f4e95","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"分页处理机制","description":"api-reference-texture-pagination","prompt":"创建专门的分页处理机制文档,深入解析材质相关API的分页实现。基于texture_service_test.go中的分页测试用例,详细说明分页参数的边界处理规则:当page小于1时自动设为1,当pageSize小于1或大于100时自动设为20。解释repository层如何通过Offset和Limit实现分页查询,并说明Preload('Uploader')对查询性能的影响。提供分页响应中包含总数(total)的设计目的和客户端使用建议。讨论分页查询的性能优化策略,如索引使用和大数据量下的性能考虑。","parent_id":"f92758cd-1d31-4875-9ac8-9408d5143422","order":4,"progress_status":"completed","dependent_files":"internal/service/texture_service_test.go,internal/repository/texture_repository.go,internal/service/texture_service.go","gmt_create":"2025-11-30T08:04:20.230918124+08:00","gmt_modified":"2025-11-30T08:29:11.43865319+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSgyL/Md6tjWhpIbtHQmhMXlh2KF9ST2WFJWawmNgTYJymhCH+9gRFoPRI/MepIgHiCb3tEiwS6lPBdl7ngUf1D5mYOyXPjIFvPgS6hIyI9acCfAgXSNJjDnyVsJnbDgMZxyNKxqz2mDhR/d7fMZpHj6a8SEcLOO0oGCHbRePmLPGv77YbtTxJIyMmskIeF2QL703N1shYYiDjwTRmDbhLg72QY98WHp4jL6RWvwnhMVgkWqTlJD8KUgDuYZFthisPipXzFGNmTYlj/hyuQdEowMUHFUZ5ydvyqil3VvWWKBQav+uoKOt/nfpn1NSiig268NHJ9Mug6BYkmJM17MDbMgyX5iARJE/vJJ0Ml3hTdC4X1pawJ0Z8WeE6O1THorOsutj6DPzY6x7o2/l9bXP6ouV1VtzQ69tjj8qWDMzRQ3cdIS2iiGEnpj6Tadvdu3XM77ommhFlogs5wQfK2IHwXxbu3rYPyeE/SLjSpxBD7zyqEHuSy51gVIzoxFhyVWT4szJcYxrvID/Q1QrYfEGoXspc/iE2MuWKUAi7Yhj+Ot+TmD7V4xL98IYbJoiFFRsUlD16vwXxrMta2UIRStjnyglpQqMhM99PA0/ZlGK5kIQgSdGImZ8HFmvDoDl9d9ydjM/dpaFhFZUAs/t7xAn1VTMTQm0hBSujH/kU2ZN8fgtu9XxpflnIZ/6wFzr0RrVoTwPigmpJQXJrCwwSby9ZzLGpbs65oE9VMuLbSMcss3vE0IO/ddedYVavfnZ9f/X0gG8Bfw8HVvbRgIo0MBHO3KXx+FwkWOEnKEfajUugnEFSVn8cjWmGhX2i/wqaeLg9fOrQ9jK5vVvrOou2pbRz4wKkeEmqTdUP3D28EhyR812HPaz/0QUtYGiCj7ZH+Pp1zPosUjeBeCdtMrjOxThD29yQqqTm7GglV+UC8UdXclFaDJEs0LFP6zZRQXZyPaFEhFuSJh2yGPEJiPWEoO7CkMEoOVSheFqR0ebRgVzmI+Utld5L6FiGSlUZD/4qLdAYk1SkpWe80E0QRS2mx2nGfp/FgxRemL59D39rHv20CNjd1Wha+4K5NiXvh/oP0fia4A4h+9m/ieS38vw/vip0MRSRodmF3RyvCzRk4VoCQck6nbUg/ysus0QTyJhxpTTVz+fQOgtUjuWA80ucE62uTCsj0RuNRnVUJGkDfurW3S5zl/clFM8Ss6GPOXr832pw+ff6eLJFfP8RzOLsZzk4xd4=","layer_level":2},{"id":"a6e048ce-402b-4fd3-ae08-096cd645d9f7","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"认证与授权","description":"authentication","prompt":"创建全面的认证与授权文档,重点介绍CarrotSkin项目的安全机制。详细说明基于JWT的用户认证流程,包括令牌的生成、验证和在HTTP头中的使用。解释Casbin RBAC(基于角色的访问控制)模型的配置和工作原理。描述认证中间件的实现细节及其在请求处理流程中的作用。为初学者提供安全最佳实践指南,同时为经验丰富的开发者提供扩展权限模型和集成其他认证方式的指导。","order":5,"progress_status":"completed","dependent_files":"internal/middleware/auth.go,pkg/auth/jwt.go,configs/casbin/rbac_model.conf","gmt_create":"2025-11-30T08:02:55.663624702+08:00","gmt_modified":"2025-11-30T08:07:17.964703996+08:00","raw_data":"WikiEncrypted:uxAckj1IXK2TQH//kEdeBEJk8OQlcivzGG3AR0HSFOqj9EqWFltJ9jNqbtP6vHi5mQGyK/1/C1ozH4PMEyGOeoBRnTDWGBqeRNUz7S/w2LRflkL5TX1v2GLsgYs27jEKxA8ODeBDnAShZ9nluFpPq+H9e1x4qxUUeX+b2M6xghsZePsT1edh7ziVTOZ2UhZzOtNYYF4wG16CHjz+dbUystFdsOairpElfN/bq09KgBHOFv9eC/W7bNBw7qwG24tPqaofAqHpPsjTXn4SaLRWevJVjxzZf/jj/bRMyScXXy1m4uOorltT4WRt8ySGV8nOkytAKk8aRLNudhBL56QgHe06G7wTMdDM4Hm5Cvudfehz6hNt+Z/Ur7dH+w4tcVlDixKZdZaNY5Q5HjZ+YfAKCDCLQzOr6X5qx8Z96bRbTUX3PNfl83+GuSrR42S+QT0mWWys2L56b98xpGEDf6MXufzO51sk/V+hXBDl+hyNCTKzNHbZTVc1J53OMt9xmyPir3l7q/uDNEj8jz7HVgcR2atSzjd74sMcAm3AzCPVgVfI8t+3/vXI1AFbnxzm9tinyRB3bnDwbEdxyW9jR+kxv5VCfwS0Ouc9pWdGIF2IKwWo1UBWVlpuOzrDfuF7c2hzF/f2wSRxk75tQnIcjcO/1ZWLSmZKhEifg4CTA5itR611RtsSRtmPEnXcJ3cYxyfFIHMd15GQoEjM6N9/1PWKphUMPj3xPQn8/4qBos1sC384oM0SCpyMA3Wu8p+hmFgjGBAti6okOBAcXZ3AZwgDgf0H4mqjHWmMhPnORcBrDST+/oTmdVoGTSCM3uIB746LyldHZfZOQ4AJQuNljJUP/5/rOtxzzeO82nLTLxx8YGz4HftDbHBe/UaNCmbsmYvuNdQRG/dTdtwi+5w2nwNzdrxU6jHnd2Vs0QYF1ZCkaroT7Pke9c39CaWxQ+tkYE5FW7hqbVQK0fTH2tb5753mW+zbSBlkWTVUCMo1OHNEVTozhzAOOyKh7SMrHCb3q81JjKzfjAcKaefkN9QFLW7WkP9o+9QekIsyb+XOsb71WSzkckRC+YwZhU4lv7+S4fPr"},{"id":"21debfcc-c026-47b1-b462-fdba6e17b157","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"Yggdrasil协议API","description":"api-reference-yggdrasil","prompt":"创建Yggdrasil协议集成API的详细文档,这是Minecraft客户端认证的关键接口。根据routes.go中/yggdrasil路由组,全面记录authserver、sessionserver和profiles等子路由的端点。详细说明authenticate、validate、refresh等认证相关API,以及获取玩家档案、加入服务器等会话相关API。提供与Minecraft客户端交互的完整流程示例,包括请求格式、响应结构和错误处理。解释该实现如何与内部用户系统集成,将Yggdrasil请求映射到本地用户。","parent_id":"b982bbd4-8d08-4a9d-855a-8695e5091347","order":5,"progress_status":"completed","dependent_files":"internal/handler/yggdrasil_handler_test.go,internal/handler/routes.go","gmt_create":"2025-11-30T08:03:28.234505788+08:00","gmt_modified":"2025-11-30T08:20:43.890514015+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSgyfkZS1HuRNQaoqjixBKSr2QBq9ZZ8De9y9+ItNpIogUEBvzE1LOGFfZkiD1jUFm1c0Kx0W0FRSK/8fXwfhmw3HZvI+yghSIq1aXslz5xYG9J+KjUq0Ug71wHY0+6QlEoSgf5vyAUfQ/BwXh9vshJaNTIwNs6dgqeYCped0EtDdqzEIPc0cu1LmcGGooYhB+s7TSgZJA/mNgVsB8F210bQr9w1ZDgsaLTpj3aen1njtNEgrGWy/XTQfapvUuKz+nW+38H/LrSkkwtEnvoXTClFksxQ0chrokJpPh2Z7pox+wD563OTQxwmhaxQakp7CgXF+LUzM5EG2Kxh+YTssRxyksexrawmocIYhF/DDNvkGs7wqI41HCL+SJppbj8c3+mfXljywlqbUc9SUj1i13bAmLscB54+Ac0WjFlE78OOaq5HPRCTeVq0l0a0MZdIcpMXQhcsGFXP7U4aJrT7Aj+vYSlyqF2M+JQSGXsLJR5riDjOxUGL5wEuhYJm1nqFT9fJioA5wdn/5nahkSMv4odwfJCpr4hVLsPJoO95HRmHpobQGJy/3vU+jhPT7LUQowSQ68TliQLZLCE6wyGMQOFH6MzdzDCfbEyi6KT+Hd12EMt62MpMcQ8YcHqp8HQD6phgZRuKsxHh4Fd3HLb8qFRsipo9in17V7jv+dkN2zPIOyTYWcI+SESswiu60Ddbzb8mTExAQcTcRpGFsnv1prpcoxkmYnhyTuSffBcOprDTTU7QMJpZJaePQjdNLuskoIhaWpEYw0s4yrbPYahoOod5yGX5xbM0oN/er0W79IrY9fBmcGRuTP9FBlPa+ZR7bCDLyFfXmwX077vACsLihwJa3ecSXZFSXIP9jNJcAmPv4i+UAC1wDtxNDzIQU0iwL6MTbnsqwNfmDjrjB2R2m+wja6zvjU7wCYB3xM4KFqcjr39SoUyIholsOLLuPl5CVErLmO3xlRQTvtxQcDFMw4kAnrQsLVmBTXF7XEOW4+BNG9EPks4QEa07Bz2vjIzDm7d4zY99NIqU2dpF7hK+4VgGSa0sSJnF6LC1TRGGRw5aB0Qzgo4iPOMMccNUrr+pY0cQl8hI5qBZrgpbcr47KQvc4SC0k0G4WB5A9txA/nBYzIPm4dY+ilZdZbFDPCDn86COZyl+lEEz1tfCLrtdHq8ezfKcUGIzvlpIQVjsCMWPrI","layer_level":1},{"id":"a99e6a5d-5b2c-4e05-8f40-b8b38f88d626","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"日志配置","description":"logging-configuration","prompt":"创建日志配置文档,重点介绍CarrotSkin项目的日志系统配置。详细说明log.level、format、output、max_size、max_backups、max_age和compress等配置项的作用。解释不同日志级别(info、debug等)的选择策略,JSON格式与文本格式的适用场景,以及日志轮转策略(基于大小和天数)的工作机制。结合LogConfig结构体,为开发者提供配置示例和最佳实践,包括生产环境的监控集成建议。","parent_id":"b05ad424-1454-4cb4-9d82-791cfcf7d650","order":5,"progress_status":"completed","dependent_files":"pkg/config/config.go,pkg/config/manager.go,pkg/logger/manager.go","gmt_create":"2025-11-30T08:03:59.90578616+08:00","gmt_modified":"2025-11-30T08:19:59.02113475+08:00","raw_data":"WikiEncrypted:U7R4DE1TfAUvjZuFqogRLgFQ15t6Go/g72iqEXenlMpmFxLs3LxBHJ3lOFPix53uQ9z/24prisiSMiWAiksCdyntGogGTUYpoXlGLgJlLufMzkp3BXdPWnojF1vo5/t9ph9qor8t6HS7uO1iKiiJda4atn01/ADTTR9AuUwfMPVDunyAXO1yrcKrNI+e/gl0jh5r+Kxb74g4NKdc4agYf/vh3QRu6j1lhyGlCs+slj1EgWj7ThJabaB2QfiS2r7J+52xSo1DNg+S9A+bwjpC9kFJ+PBKNSWp6c5jv6HRXCEm0zfNjaYxtM03R1vWIzrFb4N18J5VY9uezfuhajajZ2t1s4OzlMNKaISDVOLyWis4/Z8jLsjDMKLNTE005oku/KDkwzXUNDKNBJ8A14k0psxYTNc3/VVHUxFeo3JXDra0JNWZYc4OEL6jSLdhsqzhLHHl8OzjufPLRQN76SXLFeTUueHnRR1TDnhE9328VY0v2eRtkg5ZSE7PAZ+dTLdtPZ5NCJai7Y4IiNqzLIo3yxZDIAvYSaC+L25UkPu/s3bf1IG6+2jrn9Zs6F+rKzwdwg1oroDtogkINoDfv7Co7JnVYwN8sRaaiSbzgRHsFUFav9nL3grVGKp6uU2flcJrQ8o8C1PnFeUbaCN8NJHRc9aGUfXIKYEl8aMRn84ads3i4rqZkmMs29TpTV1Sv+ykr/oBp136qVDPGesF2lV9cZRdRoUgFY/R8V82lGsQlgX21bSD1EwyJuD2mm9J5Tw0il5Xfdiya5ABe4cLExHLCtBli45hhyUbgSlnwSws5Zdrd8fvfrNC4Iz6MYX00QYCCXKTaWltH4ks92Vb8HGPVYbj5BlRDyt53nDycEMCgE2r/9kjP9+B99/QpYqEjJQXstXgVJMznJ1iwFVUGcO3z8kRJ9Z75ubTiy8hVFxZbiwlo0VZu9Mo0OByAoFlssJ1Uma+/1O8XAta27K5p/ZztcbtpFaO2gyI7WlFmcJcGpkJk61ZSIcwx8LSxiWBvftD","layer_level":1},{"id":"4a428141-bd7f-4a26-9a2e-c6b8a671400d","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"服务架构","description":"service-architecture","prompt":"创建服务架构文档,重点介绍CarrotSkin项目的业务逻辑层。详细说明UserService、TextureService和ProfileService等核心服务的职责、方法和内部逻辑。解释服务层如何协调Repository层进行数据访问,并实现复杂的业务规则(如档案数量限制、材质上传流程)。为初学者提供服务调用关系的清晰视图,同时为经验丰富的开发者提供代码扩展和维护的深入指导。","order":6,"progress_status":"completed","dependent_files":"internal/service/user_service.go,internal/service/texture_service.go,internal/service/profile_service.go","gmt_create":"2025-11-30T08:02:55.663687016+08:00","gmt_modified":"2025-11-30T08:09:00.808219998+08:00","raw_data":"WikiEncrypted:vMsgMax61wW2sTWhXd8DHzaJT8VrRDiEcKUjOTwlxPiZwSbVu+EGy0Y7JcF0Fm6hbe5xrOBLRye2BSlOm60N+fgzao8F24KE1nT0vtw3UNCnPO3eWdzW86MNHe2vMUo/i0U9Z2lUwzzYgk4nOitUfEtuR5d4XI0/4vQZX6MmMlAY1t8JvwqAdcXfe1+ct0zS0fAa3K9IxWVQw8AaA3Mw5YbwJxT9+xJAgWSBnBFkdZGbQQ6D2U3Uq6a/DfLMV3NYQmxBLbxihOllNnwUD1c6iBizT8TohboZj+2Pz7rkH6n5ZBu3OkrZhc96vA5aQhrcRzdtZgo0X6T35PE46Jfr09xk6rgl8AxKPBUBQwXNh5/QO5JXWSJgEvh9jGloQX8JBKKUF8v3zmroMx1w6SIY0K8ldJ81VyY+8zm1+bhNuzkOeGPup60NJ6m34HsM7qtGuO8OBzE0jm0wV70ZiN3UpbvfF5fZa9Zg3Uy3FGiuIhknAvA+tQuLHBFPF9QgW23SiNouPLQ0uwIprgepP7vciv555ydtE7fG2WWb/xmc817S5xzUdaCNbZkOJRh0WZdB0o7ZXRYGHlgx67uGdK1IOC+j4Zu+8wOvo6tEGLXs8ZVvuvrZt5zqEixVP8zPKA6Xu5Q/EI2zTxiSbrTFKwzrT21lzNkhBBWONMJXjXnDBAz31+xyERbWgD1ggCssXkAIpgYKGHd3/tK3I1jZ99B8agMtOeF0IYs649WCXTAkJfyub9VOTxfLKPJIpoz4zCD2f6Em8r25KJhDVFflLKh6uKGoi2vTJXClBir3i3Q+XwKir6RWUTFuL7tt8Ju1saqOfVvbQD5fhhkEzNwuQeQzjrvqgvEzotnOze411Q66eEKyY+/GNnUypc56Hd1eTLjJS7TOcoCiJ9HwIEyNlzKj7bEvbwybcnNU7qMxlGl0urIHcYkdaxfQ56fiFug0e64Z+rXfQR0NPgmP5yqrPwrSxFdCFO8Ptg7gqsE5aFBntgmXCkCeGfu+R7pj5rBIZy6SBecyn+merfPR1IthgpGJBVGmpjX/ntrk69w8wZmE7uPGDsgLZbZF/BevPaBOG4/E"},{"id":"196237ed-c0aa-4700-b3b8-d463c84eb98b","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"系统API","description":"api-reference-system","prompt":"创建系统相关API的文档,包括健康检查和系统配置获取功能。根据routes.go和swagger.go中的定义,详细说明/health健康检查端点和/system/config配置获取端点。解释健康检查的响应内容和系统配置中包含的字段(如站点名称、注册状态、用户限制等)。提供API响应示例,并说明这些端点如何帮助监控服务状态和获取全局配置。同时介绍Swagger文档的访问方式(/swagger/*any)。","parent_id":"b982bbd4-8d08-4a9d-855a-8695e5091347","order":6,"progress_status":"completed","dependent_files":"internal/handler/swagger.go,internal/handler/routes.go","gmt_create":"2025-11-30T08:03:28.234584327+08:00","gmt_modified":"2025-11-30T08:21:04.260103809+08:00","raw_data":"WikiEncrypted:C34GewOyK1SlumqKiPsSg8nPBODziW9NYijZP7pFlPv1J3fdAdyDPZjKqbHuX5oNg7cseWHyfEdJ+Wwm4b/1SWE+5eYIfDZf4M7AeVCdRBw6vz+LPjg/0l0C8sNEdOMvC78nEKE9OuS1ExB1v8qA4KFBBgHUYsLirXtI0OmcoX24nB8bfqsSqyfXaRGHvlcLUnf4fhcuYOc3Hnwxs1KGwzSgrknq1zT47XGLhjQEVilRHKWh2cxFM6IpCtGe+EVizqI4gS2MEEjcIU8Tl9MXTkR+4cSbaWcOgd7gLpHWrwMbumm5VJZJJjK3UerEhpORqg4+brBQvq/rG+6/zCIq2OkqcswJHJh9ef1nibomZWPpBS6bG7yzLwrOvlfYeOViWE4lHa3EbkJ/N8hmvfbIU6G2ux0UtqUufZkxbpp+G+xws15I3W0MMbluq81WjmZzsKm0+S8lqMqaxx8ZwMSaYbk5PL+IyfIH+HgnZExG86x5m75+vEmULyLJK1qCw9DAUb6L2KYIAt0MjFwXFHcB+XpjPsIyWHP7j9lkQmguiMOmrdGSc+2hd5obifgU02s2EGvwiBsnoRfIkLXG2eakfruBK/YhnZ8eVTawgh+7PyJw9cOEb2eWITPXr7WdqiGD93sUNIWHx9CVDmX7g40c7me1K5GOUNoblENfZlqlnqTgkR+jpvJSv7GsWVwDcp8KHCZXAHU5HK4Jgad1HxuIK9coRc+JXCpqpU6/hLm+yuWWD+8MtGUPmh3PhpSBMceJ69hGOtFieMWhOZC68WM1XFg05VJPXSypmP70VWtaLMDG4n/7DcJsanmsLnBQysPQbL1QJvKebGcJwItKv+Q4LuW9/3nG3S6frZrxYTLGvdheC3bcRoWTu8l4WgxlT75Wes5g7YSAnwFI4fBgO56J3WUxXQftjwZXzv2hnelZ8Tdt/4UtpqTC38+eATWDv9grWAFpy6Zsy3NHYKwV/rfkyD7rKObmpjE/miHhgADhwy9UFtjtQZJZf+GcgOE7cEnOeAMvjy6EjCERNWeRGGs9B45pW0qPE8RcfB49ugSCkFZk1UpjvyPYUKCWT7tQOaBQ","layer_level":1},{"id":"41b4d066-f7bf-4893-8d7d-726ba5ad6534","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"外部集成","description":"external-integrations","prompt":"创建外部集成文档,重点介绍CarrotSkin项目与第三方服务的连接。详细说明邮件服务(SMTP)、对象存储(MinIO/RustFS)和缓存系统(Redis)的配置、初始化和使用方式。解释这些集成在系统中的作用(如发送验证邮件、存储皮肤文件、缓存会话数据)。为初学者提供集成配置的示例,同时为经验丰富的开发者提供故障排除和性能调优的高级技巧。","order":7,"progress_status":"completed","dependent_files":"pkg/email/manager.go,pkg/storage/minio.go,pkg/redis/manager.go","gmt_create":"2025-11-30T08:02:55.663761914+08:00","gmt_modified":"2025-11-30T08:08:25.418431945+08:00","raw_data":"WikiEncrypted:AEnLflvTZ9QfFGHl8t1BHDVT+KtNcoIBA7yaF+ugkVQBzMUI0ixQksn11CJOUB4fAbq/NSqNi4LcmIT5UvLaYuPCYQMvnazDdgYBdslsdFjRhh0wa3oP1y4PsaiE7CdMOw98e7fUJ1QKYA1aa8kVn2QoysiGlKQpNyiW2AUxe4Cjw4/mvNfFGyo1nseXcSQf/FOyH/Lar7KHsT4A7Kku1mM0n8zMi4OwpdUQyG67w3moKLQrJ4ILpWbA2h3ybGL1KlPsJ5wGu1CeGGGIIvnAWWLjwH20mjmctOCJRrDQpW/nWZdknsHVTXane6/HWlDk5TyEMOrhH7iZ2NKkxd9uC3RXbJ120iQR5ljczDcQ58aWFXrEeIt6bA6beK5C6t2qHBP9X44boQ99HdzrQaJ9XhdzYd+0Or6UuM9PPYU30yDz2rUcoP1td0LXTzOxG+GhptMJb1Z4cORcCy1cfwTu/Kw7YuLoIq+1zn/kQGISmy2DkTH3N3+8fa31ZEO8Lktv9NZNOe27yyDUF3AcYFyfM5nEA9dPf7uKwd5gvcBMpoPjnmuSTeDixYZxsbm1t3nHMhNOarmE3Dv/AWb8moiL7rh+7CkCprueqUKj068oVGp6bcuKgQVYuIttaCP0K1LJrfVh9BbOh4VDG3me2axh0dlxyocKZ2COyMVrWn7FYJZYGuLk4ZS6r1A/tF3hs7Iq/u56QM4jNsoPJDdi6VKYRgsvQhkdl11rMuPijAtnFZn+H4c8f8H3y13BZEPjDlrCS4kopQcRsjPljJEWQ6UG6pwhQjcx8PjeQbCZu9hfE5UiFnjrdvPVRix/vfPD/mxcP6BuhWH2fJ96PUW/gvnSEaJWTatmDtnYkP00WxvjcnqMB+bSCrRwG3SWV7wRReq8KRO1BBFFbXAhpm+Ln1xq18HWOfn6ixcb7SUetoYYTn2Pw591WIgARAc1DnT28XkLesQfEzm/cDwN/xuo2hK94YMb8AmPNxMSyChKmGp/H5JPrif0j7CoOLkk3+Xlsbov"},{"id":"b05ad424-1454-4cb4-9d82-791cfcf7d650","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"配置管理","description":"configuration","prompt":"创建配置管理文档,重点介绍CarrotSkin项目的配置系统。详细说明如何使用Viper库从配置文件和环境变量中加载配置。列出所有可配置的选项,包括服务器、数据库、Redis、对象存储、JWT和日志等模块的设置。解释默认配置值及其覆盖方式。为初学者提供配置文件的编写指南,同时为经验丰富的开发者提供动态配置和环境特定配置的最佳实践。","order":8,"progress_status":"completed","dependent_files":"pkg/config/config.go,pkg/config/manager.go","gmt_create":"2025-11-30T08:02:55.663824637+08:00","gmt_modified":"2025-11-30T08:08:56.307046565+08:00","raw_data":"WikiEncrypted:aC5ZtUyEKPSxjzg//aVllB9TGvdYeEh4zcG1OGQGWJTPRUdE6tOD1bk5ycLszvj6LmqEXQSteizso3hcrw06B/ARd3BM4xDZONsQ9xHM2/iLM9s37dblL51l92usrOFsJZ2aKsL8XQgBotg6miCOmY5v/PSAwpbeBm+WsnRC1B7wycQlCPoyJKiA9ogCwn2wwHUxbqMu4Ioo7LqTn/c1rTT8resqHOgbYSMOArxxxDHUyUMELu+9oa0cjjw7CAsXsKKN9BS+c/exwzOSuliKEmkMxqOA+EungrCYADuqYWBopJkRYGOZdSZp1RPyay0nrCRLdlu6rzSLNQ6XU0+UWG8RoC2DXurNEBKus3E0ed8XRRwhA48fpC24tnrtPy9yLW+cbv47YlfVs99bSAomHsjtQx31bw6kcF6TDmJJtyGffTVgnty+Oxwl0Q5fiA6PsPVo9jnwzrTwW04lYxkTBRHx4yHsz9pZqML4KEzpdrRK/OybmPhHgKHKvBOu4nlNmRQhh01XA9OCZf341JRF4YpIY/1rCMpobM8buaokYcW1zBMEZLDyX3XGAPX0PQbnxOg3ExY0SPSZ0L+3b5MbRCJKImuVtJ9xdCpSfZlljl3gCDnh8AQXv/t1Orq8L47fX0ZqmDQIxMhGteYFehuq6ukbwmH28Ti35d2Q0k1z1XpUDDpu69IKj01uJADyEuuwXZEa0X26pIXiDGSQlWcHBTCusjdRyiv10Q+Zd0LXF5aoly867QrKNjlnGUkaw9E2Hx0kCZEBRLz2jpVKuULyM634v06mmBqog67QGRXd0+heB6mLJppjcx/6yJz9ENkXc9JnfgDl9Zd0TKWetKSyE2Vt4PKQlcQFYOCU6N8WYmnhQBBwqsrgR64K2We0cmHoTG1oqBc00BmCxdULMAm6iVtV5NvScOq6tTVDoqbF2YUJu/l/r/ZYowzpezxje3YtLlDRJ2DI+/VqFExAXD/x2ITzpECxrD6mh2ohedUsEg6ncIrBqdJ30z5sG1HgBjbv"},{"id":"d15fd693-60dc-441f-bc6d-9deb552178fa","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"部署","description":"deployment","prompt":"创建部署文档,重点介绍CarrotSkin后端服务的生产环境部署流程。详细说明如何使用start.sh和run.sh脚本启动服务,包括必要的环境准备和依赖项安装。提供Docker部署的指导(如果适用)或与CI/CD管道集成的建议。涵盖健康检查、日志管理和监控等运维方面。为初学者提供简单的部署步骤,同时为经验丰富的开发者提供高可用性和可扩展性部署的高级策略。","order":9,"progress_status":"completed","dependent_files":"start.sh,run.sh","gmt_create":"2025-11-30T08:02:55.663894265+08:00","gmt_modified":"2025-11-30T08:09:22.178905791+08:00","raw_data":"WikiEncrypted:0IKfLNOWe9mZfG1jVts3w0YDXzCWWQgRFe88de5EDrj/QtFyPZflDEi5WjVWQbE8RdVXCTiTEeVIQCSV9P9RPn+2iiETg0aGrFrlZnVmE3cldtmzUEJaYaUcDQDJmOIedOd4fnovGZ2mKoBASrdEetMTftRbYZ7nqgD76U9x72Vei61XLqaWxlqQxo/Z9sWRXDQ/d6+I6mwvuXUtY34jbwxNYxSYRsS6IziolWSYhrJ3qj8Y1sjqXLrWhqXUWx4sQn7Dqx+g+kUrZYYI9ObBnGOH1Rt5EBewug04OYbJ6ZFJzE68IsCKqcey/QAwT83GxJMV9oiMX0X3NSGQmz4mfwM+QkQ4JzcwsfIEGSBGV0aNnQ/4y1L21I4UIQzl0N8yxAFdhqXJgjs7xijxeqq2962ezIxFIi9KypH13Wfg7jlurL7jwxts6iVPPwWzWK/GhCn6u6NzqiCNyDfSgTEkmkQjE6a3cXzao/Bw2xPf+MTU4/AMaWO87aC9yCwiIXTFUfN2Iu/Ptqeigmg43pcx7349erbmbZdsL1bRnd8OHwjbrDVihrn1twZk9EQUz/59EJKPxjs/gvWFm1PHrbF1eXMO2vpomXXGfH+NNpBVsAd45WdJq8/BdRxTwXBKx3pr8A3a4FMDO5Nv2QZQFs4mn9mwbz1qpZgzACguQbvfAfJR4uvUrJdsRKRWPdaLeOFsXb+fya8uRn3JBOVIZirZMlUUEHY5eD4Yx7pW59dCHRtnrctQqSmJNcnNMhjf6itq/vwlr7i8JnlEmOGL7sIsev0aCYhU7qsG9jWbHIdbzca6Oomns4gmPb7n+KeQUA9b2kHfKjHdlhi8vbcvvUhVjkZeGstvHQQ3n2lZ16ERGOMzZynvh1+O4lvUzqRoMlWiwN4s1w/SlblLYhcw9cs/d4EBIhuHbCJBOAcEM6zWwgc="}],"wiki_items":[{"catalog_id":"dd59e65a-8360-489b-a623-15f7b53c41b6","title":"快速开始","description":"getting-started","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"23877463-a4f7-4333-8c96-5f877a2bdd12","gmt_create":"2025-11-30T08:05:40.621292037+08:00","gmt_modified":"2025-11-30T08:05:40.623754519+08:00"},{"catalog_id":"32730baf-703e-4ac5-9a1c-18db77b29474","title":"项目概述","description":"project-overview","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"74823b01-575c-4181-a5c3-01a7a93f2dec","gmt_create":"2025-11-30T08:05:48.686298836+08:00","gmt_modified":"2025-11-30T08:05:48.688652403+08:00"},{"catalog_id":"33ca7fc3-f997-4fba-9f47-a98218a10967","title":"技术栈与依赖","description":"technology-stack","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"73d226a7-f7e8-439d-abc6-771278db36d1","gmt_create":"2025-11-30T08:06:14.854169459+08:00","gmt_modified":"2025-11-30T08:06:14.856236346+08:00"},{"catalog_id":"199e1e8c-1238-419a-929b-7ff5de856b10","title":"数据模型","description":"data-models","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"3f7ad31d-ce9c-43e7-9a5c-0778114efc03","gmt_create":"2025-11-30T08:07:17.288018635+08:00","gmt_modified":"2025-11-30T08:07:17.291286413+08:00"},{"catalog_id":"a6e048ce-402b-4fd3-ae08-096cd645d9f7","title":"认证与授权","description":"authentication","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"b8926193-0213-47a8-ae4d-e286f795f40e","gmt_create":"2025-11-30T08:07:17.962619544+08:00","gmt_modified":"2025-11-30T08:07:17.964783284+08:00"},{"catalog_id":"b982bbd4-8d08-4a9d-855a-8695e5091347","title":"API参考","description":"api-reference","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"a1a06e15-7fe8-4cec-9cd5-836bbcf2f921","gmt_create":"2025-11-30T08:07:40.101139559+08:00","gmt_modified":"2025-11-30T08:07:40.107256854+08:00"},{"catalog_id":"41b4d066-f7bf-4893-8d7d-726ba5ad6534","title":"外部集成","description":"external-integrations","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"7e7e49ca-df06-4ee0-8157-456ee19a8c4b","gmt_create":"2025-11-30T08:08:25.412876535+08:00","gmt_modified":"2025-11-30T08:08:25.418508071+08:00"},{"catalog_id":"b05ad424-1454-4cb4-9d82-791cfcf7d650","title":"配置管理","description":"configuration","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"29101806-be9c-4752-98e2-f895c71a4289","gmt_create":"2025-11-30T08:08:56.303491152+08:00","gmt_modified":"2025-11-30T08:08:56.307096532+08:00"},{"catalog_id":"4a428141-bd7f-4a26-9a2e-c6b8a671400d","title":"服务架构","description":"service-architecture","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"028f0a60-9699-4230-9605-c67fe0478573","gmt_create":"2025-11-30T08:09:00.80474561+08:00","gmt_modified":"2025-11-30T08:30:57.748693186+08:00"},{"catalog_id":"d15fd693-60dc-441f-bc6d-9deb552178fa","title":"部署","description":"deployment","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"985b2303-cce5-4952-a6b6-4bdf0adf30f0","gmt_create":"2025-11-30T08:09:22.177262187+08:00","gmt_modified":"2025-11-30T08:09:22.178955781+08:00"},{"catalog_id":"c94a4776-d898-4c7c-9c83-4c0b5277e26c","title":"用户模型","description":"user-model","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"8637d161-f362-42da-b905-7c7b9cb6c2d6","gmt_create":"2025-11-30T08:10:15.586597699+08:00","gmt_modified":"2025-11-30T08:10:15.589453544+08:00"},{"catalog_id":"eae75e89-3b0b-400e-8204-120e8d6705cf","title":"JWT认证","description":"jwt-authentication","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"cbc68262-985c-4b1a-a0dd-80755c2e91dd","gmt_create":"2025-11-30T08:10:15.607572443+08:00","gmt_modified":"2025-11-30T08:10:15.609288017+08:00"},{"catalog_id":"6fd593fc-6c64-46b8-bccd-83c6d693db38","title":"认证API","description":"api-reference-auth","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"3cfe3999-267d-472b-ade7-db5cffe1df95","gmt_create":"2025-11-30T08:10:46.70435432+08:00","gmt_modified":"2025-11-30T08:10:46.706840798+08:00"},{"catalog_id":"5ac3ffa0-5981-41d9-9c1d-b4bcf85254cc","title":"用户服务","description":"user-service","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"10e2d2f7-a881-489a-a037-7b23b10384ed","gmt_create":"2025-11-30T08:11:35.012514609+08:00","gmt_modified":"2025-11-30T08:11:35.014940603+08:00"},{"catalog_id":"eaef6b6f-244a-4f26-9b3e-8980fd557566","title":"邮件服务集成","description":"email-integration","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"2ef5d36e-2c5e-42fb-b2a9-81796892ef05","gmt_create":"2025-11-30T08:11:35.669824452+08:00","gmt_modified":"2025-11-30T08:11:35.671859299+08:00"},{"catalog_id":"85cc17d9-9b6f-497b-a933-b33c86fb1d3d","title":"服务器配置","description":"server-configuration","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"ede4cb6a-c092-400e-b165-2c01a379a5f5","gmt_create":"2025-11-30T08:11:36.225302113+08:00","gmt_modified":"2025-11-30T08:11:36.22668167+08:00"},{"catalog_id":"2123bf68-dad6-49ef-8872-ab05d95e3a43","title":"RBAC权限控制","description":"rbac-authorization","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"f806270a-c464-4eb2-9c84-337e6e2867de","gmt_create":"2025-11-30T08:12:36.086636458+08:00","gmt_modified":"2025-11-30T08:12:36.088362918+08:00"},{"catalog_id":"03318cbc-4041-48ed-8bd1-f304a381c6c4","title":"用户API","description":"api-reference-user","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"b6f4c52b-a50f-4e58-b353-11959f00efac","gmt_create":"2025-11-30T08:12:58.785245793+08:00","gmt_modified":"2025-11-30T08:12:58.787681821+08:00"},{"catalog_id":"1b76a9ba-2d88-4026-ae6e-96b1c50e9592","title":"材质模型","description":"texture-model","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"6f1dfa66-1f21-4bd3-bbd9-8f2f802ddd02","gmt_create":"2025-11-30T08:13:07.679806007+08:00","gmt_modified":"2025-11-30T08:13:07.683005879+08:00"},{"catalog_id":"60372f58-1710-4da4-a4fe-56706cf1c8bb","title":"材质服务","description":"texture-service","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"d1d6065d-7ebe-4f2e-90be-db57457da3bf","gmt_create":"2025-11-30T08:14:22.111425006+08:00","gmt_modified":"2025-11-30T08:14:22.113975674+08:00"},{"catalog_id":"cb190d05-4b2a-4bf4-9c84-5e7e0a05aca9","title":"数据库配置","description":"database-configuration","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"048edc31-b8e7-49e8-82a9-26d158318a1e","gmt_create":"2025-11-30T08:14:38.057155461+08:00","gmt_modified":"2025-11-30T08:14:38.059284141+08:00"},{"catalog_id":"8e641e56-15d2-459c-9b3b-8cade88e633b","title":"对象存储集成","description":"storage-integration","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"821f82f7-558d-4be9-813b-d68b25159953","gmt_create":"2025-11-30T08:14:41.907098785+08:00","gmt_modified":"2025-11-30T08:14:41.909313222+08:00"},{"catalog_id":"e5ab802b-efa8-4bab-89ed-46e7ee9a0b41","title":"档案服务","description":"profile-service","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"4b7ed05a-35f3-44c8-921a-e812dde03dbb","gmt_create":"2025-11-30T08:16:21.592092768+08:00","gmt_modified":"2025-11-30T08:16:21.594015136+08:00"},{"catalog_id":"172bbece-3409-47f5-9fc1-38104bc72937","title":"档案模型","description":"profile-model","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"dd6a7583-4c9e-46e6-a352-1f435cac06ba","gmt_create":"2025-11-30T08:16:34.617362468+08:00","gmt_modified":"2025-11-30T08:16:34.620670403+08:00"},{"catalog_id":"f92758cd-1d31-4875-9ac8-9408d5143422","title":"材质API","description":"api-reference-texture","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"539d01bc-c6e8-482e-a1e4-cabd1e736e35","gmt_create":"2025-11-30T08:16:37.947069107+08:00","gmt_modified":"2025-11-30T08:16:37.949566506+08:00"},{"catalog_id":"9f566dc0-e29d-4be0-ae1f-95cb86761e9c","title":"Redis配置","description":"redis-configuration","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"1be6ace7-eb14-4597-9099-aa6274f1d6ef","gmt_create":"2025-11-30T08:17:39.775626864+08:00","gmt_modified":"2025-11-30T08:17:39.777688608+08:00"},{"catalog_id":"a259d910-9167-4420-8aec-35aed1d209d0","title":"系统配置模型","description":"system-config-model","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"e9aeef0a-cd8f-48a8-9901-119b30c319a7","gmt_create":"2025-11-30T08:17:52.176717109+08:00","gmt_modified":"2025-11-30T08:17:53.191485782+08:00"},{"catalog_id":"4c93f6f3-29af-47cc-be0e-97b8b08f9863","title":"Redis缓存集成","description":"redis-integration","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"d6259521-0d14-4e0a-9769-ec128cc07175","gmt_create":"2025-11-30T08:17:56.518935697+08:00","gmt_modified":"2025-11-30T08:17:56.521181336+08:00"},{"catalog_id":"394f74e0-ba8d-4994-a84a-5ba48d385e83","title":"档案API","description":"api-reference-profile","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"645e5060-b7e3-49b0-976c-18ecedb566b6","gmt_create":"2025-11-30T08:18:50.188950706+08:00","gmt_modified":"2025-11-30T08:18:50.191062962+08:00"},{"catalog_id":"6581f56c-b89a-4553-836e-a745aa487e4c","title":"验证码API","description":"api-reference-captcha","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"7f8c0d35-f894-4c04-884f-637a527b2590","gmt_create":"2025-11-30T08:18:51.309599921+08:00","gmt_modified":"2025-11-30T08:18:51.311314965+08:00"},{"catalog_id":"22ea8953-9bd2-45c0-b40d-48ef7d38c535","title":"对象存储配置","description":"object-storage-configuration","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"7cdfc1b2-afe1-44df-b07a-7cfd9335ec31","gmt_create":"2025-11-30T08:18:57.974678034+08:00","gmt_modified":"2025-11-30T08:18:57.976574303+08:00"},{"catalog_id":"a99e6a5d-5b2c-4e05-8f40-b8b38f88d626","title":"日志配置","description":"logging-configuration","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"6bb2ef37-e371-4044-a371-abf3d491ecda","gmt_create":"2025-11-30T08:19:59.01884946+08:00","gmt_modified":"2025-11-30T08:19:59.021185411+08:00"},{"catalog_id":"676b7dc9-0651-428e-bf38-30bf78835638","title":"JWT配置","description":"jwt-configuration","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"c61d767c-c848-488a-aa63-e211f59bd00d","gmt_create":"2025-11-30T08:20:02.589796219+08:00","gmt_modified":"2025-11-30T08:20:02.591844319+08:00"},{"catalog_id":"21debfcc-c026-47b1-b462-fdba6e17b157","title":"Yggdrasil协议API","description":"api-reference-yggdrasil","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"280c8ca4-4232-4e9d-b761-7d27a86de9c4","gmt_create":"2025-11-30T08:20:43.888643435+08:00","gmt_modified":"2025-11-30T08:20:43.890556392+08:00"},{"catalog_id":"196237ed-c0aa-4700-b3b8-d463c84eb98b","title":"系统API","description":"api-reference-system","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"e6b0a823-cd17-4a44-9cc6-3459c1c6012c","gmt_create":"2025-11-30T08:21:04.258330887+08:00","gmt_modified":"2025-11-30T08:21:04.260141056+08:00"},{"catalog_id":"f235ed89-3a57-41db-9187-a6e6336b7784","title":"个人资料管理","description":"user-api-profile","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"d5c723ca-573d-4321-b802-dd063cc10e23","gmt_create":"2025-11-30T08:21:18.38287784+08:00","gmt_modified":"2025-11-30T08:21:18.385927885+08:00"},{"catalog_id":"41190bcc-3fd3-4a2a-8772-b26e142f39e7","title":"用户注册","description":"api-reference-auth-register","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"a2b4c485-307c-4263-b3a4-fec369b67308","gmt_create":"2025-11-30T08:21:54.465643127+08:00","gmt_modified":"2025-11-30T08:21:54.468711725+08:00"},{"catalog_id":"b5e9f8a7-545a-438c-a589-795e2448a293","title":"材质搜索","description":"api-reference-texture-search","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"faf9acb8-cd59-4180-a4f2-8f4705f35513","gmt_create":"2025-11-30T08:22:09.533748758+08:00","gmt_modified":"2025-11-30T08:22:09.536429179+08:00"},{"catalog_id":"f0c34d0d-b748-4f91-b2ff-c15916757723","title":"创建与列表","description":"api-reference-profile-create-list","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"9a857a68-d685-4170-94ec-49e51b25e178","gmt_create":"2025-11-30T08:22:53.287779291+08:00","gmt_modified":"2025-11-30T08:22:53.290356267+08:00"},{"catalog_id":"8c4a7b9f-ebf3-4fd0-be5b-cdaaae28ae3e","title":"头像管理","description":"user-api-avatar","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"b3670256-c2c9-4ff0-9273-26195b854671","gmt_create":"2025-11-30T08:23:19.987007622+08:00","gmt_modified":"2025-11-30T08:23:19.989327251+08:00"},{"catalog_id":"152cfadf-a496-433d-b28c-2fdbbbe7a22d","title":"认证服务","description":"yggdrasil-authentication","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"850a2d43-6591-4da1-b642-5cc373d5194e","gmt_create":"2025-11-30T08:23:30.433326906+08:00","gmt_modified":"2025-11-30T08:23:30.436611685+08:00"},{"catalog_id":"f673e8b8-b461-4789-8848-dd8dcb99b77e","title":"用户登录","description":"api-reference-auth-login","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"b7822259-7797-4c18-93b6-1fe08fe7c47c","gmt_create":"2025-11-30T08:24:08.323626339+08:00","gmt_modified":"2025-11-30T08:24:08.325679159+08:00"},{"catalog_id":"dd0cebe2-7ac4-4c48-8aa6-511b6d9ef7e7","title":"材质上传与管理","description":"api-reference-texture-upload-management","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"3212a68c-6229-4c2a-8495-3758f2cadf5a","gmt_create":"2025-11-30T08:24:33.324907041+08:00","gmt_modified":"2025-11-30T08:24:33.326292707+08:00"},{"catalog_id":"4cd6cb1f-26a0-44df-b3ef-745a5471cfbf","title":"详情查询","description":"api-reference-profile-detail","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"fe39064e-91c6-4e18-b8f0-f4ed1a45ad09","gmt_create":"2025-11-30T08:24:56.134147206+08:00","gmt_modified":"2025-11-30T08:24:56.136433533+08:00"},{"catalog_id":"14c0d961-c1d4-437e-b8b5-ed4728d0278f","title":"邮箱变更","description":"user-api-email","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"f6aa16e0-a3ea-4587-bb00-3826cced7ddc","gmt_create":"2025-11-30T08:25:39.528106295+08:00","gmt_modified":"2025-11-30T08:25:39.530337744+08:00"},{"catalog_id":"357d2fe1-e16c-4b7b-aee1-0942254f5b7c","title":"会话服务","description":"yggdrasil-session","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"7f43f639-526e-4658-8c46-abf65d558c6e","gmt_create":"2025-11-30T08:25:47.624910632+08:00","gmt_modified":"2025-11-30T08:25:47.626801655+08:00"},{"catalog_id":"7ea29b43-faa7-43ad-a53f-7dc66632576f","title":"发送验证码","description":"api-reference-auth-send-code","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"4dab5305-46a6-475a-9a2b-ae58d37e3746","gmt_create":"2025-11-30T08:26:15.81570477+08:00","gmt_modified":"2025-11-30T08:26:15.817751735+08:00"},{"catalog_id":"c8e5f788-0578-465e-923e-226ce20fc20f","title":"材质删除","description":"api-reference-texture-delete","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"50e7dee3-d4dd-4785-91af-1b900acd369e","gmt_create":"2025-11-30T08:26:45.234704246+08:00","gmt_modified":"2025-11-30T08:26:45.236894968+08:00"},{"catalog_id":"12d363e1-e4be-4127-ba9d-37b74ccbea09","title":"更新与删除","description":"api-reference-profile-update-delete","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"6784ade9-b14b-407f-9253-9a5c9c9aa738","gmt_create":"2025-11-30T08:27:07.349603918+08:00","gmt_modified":"2025-11-30T08:27:07.351986595+08:00"},{"catalog_id":"59fd214c-318c-471c-947b-800142fba9e3","title":"档案查询服务","description":"yggdrasil-profiles","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"b49df3a4-b488-45ca-9b49-36f8b6187b26","gmt_create":"2025-11-30T08:27:41.336714672+08:00","gmt_modified":"2025-11-30T08:27:41.338325099+08:00"},{"catalog_id":"f62b9772-46fb-4bd9-912d-31b40cada2d5","title":"重置密码","description":"api-reference-auth-reset-password","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"e59713bd-6038-48dd-a3f9-115274cade0d","gmt_create":"2025-11-30T08:27:56.057578276+08:00","gmt_modified":"2025-11-30T08:27:56.059603971+08:00"},{"catalog_id":"d1b6651a-7c66-4e37-b390-fcb4a0c745e4","title":"材质收藏","description":"api-reference-texture-favorites","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"a7ec8d25-b883-46fc-a480-cfdc2920c2cc","gmt_create":"2025-11-30T08:28:28.288020797+08:00","gmt_modified":"2025-11-30T08:28:28.290597936+08:00"},{"catalog_id":"ba98ea14-16ad-45b7-926c-7eb3282f4e95","title":"分页处理机制","description":"api-reference-texture-pagination","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"e12124c1-303f-450c-a91d-d01b3c16b284","gmt_create":"2025-11-30T08:29:11.436463168+08:00","gmt_modified":"2025-11-30T08:29:11.438701853+08:00"},{"catalog_id":"93b1bb5f-db13-43be-a8ec-22f675ff0ff4","title":"激活管理","description":"api-reference-profile-activation","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"23a6e70d-c5f9-4819-8ad5-c4c209121095","gmt_create":"2025-11-30T08:29:19.128024586+08:00","gmt_modified":"2025-11-30T08:29:19.130051057+08:00"},{"catalog_id":"b128e094-7b2e-49a7-9737-8aab28691acd","title":"材质上传流程","description":"texture-upload-process","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"6a747b98-68fc-48d4-8654-302fe96220e1","gmt_create":"2025-11-30T08:30:00.69891032+08:00","gmt_modified":"2025-11-30T08:30:00.700819433+08:00"},{"catalog_id":"dfcac79a-35bd-4147-a862-90165e805f51","title":"材质管理操作","description":"texture-management-operations","extend":"{}","progress_status":"completed","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f","id":"3a6496f7-c062-4f2b-873f-f816079ab7e8","gmt_create":"2025-11-30T08:30:59.868021493+08:00","gmt_modified":"2025-11-30T08:30:59.873316635+08:00"}],"wiki_overview":{"content":"\u003cblog\u003e\n# CarrotSkin 后端项目综合分析\n\n## 1. 项目介绍\n\n### 项目概述\nCarrotSkin 是一个功能完善的 Minecraft 皮肤站后端系统,采用单体架构设计,基于 Go 语言和 Gin 框架开发。该项目为 Minecraft 玩家提供皮肤、披风等材质的管理服务,支持用户认证、权限控制、文件存储等核心功能。\n\n### 核心目标\n- 构建高性能、可扩展的 Minecraft 材质管理平台\n- 实现完整的用户认证与权限管理体系\n- 提供稳定可靠的文件上传与存储服务\n- 支持 Minecraft 官方 Yggdrasil 协议集成\n\n### 目标用户\n- Minecraft 玩家和皮肤创作者\n- 皮肤站运营管理人员\n- 开发人员和系统维护人员\n\n## 2. 技术架构\n\n### 组件分解\n项目采用清晰的分层架构设计,包含以下核心组件:\n\n```mermaid\nflowchart TD\n A[Client] --\u003e B[API Layer]\n B --\u003e C[Business Logic]\n C --\u003e D[Data Access]\n D --\u003e E[(Database)]\n D --\u003e F[(Redis)]\n D --\u003e G[(MinIO/RustFS)]\n```\n\n### 设计模式\n项目采用**面向过程的函数式架构**,摒弃了不必要的面向对象抽象,使用独立函数和单例管理器模式。这种设计使得代码更加简洁、可维护性更强。\n\n核心设计特点包括:\n- 函数式设计:所有业务逻辑以独立函数形式实现\n- 管理器模式:使用 `sync.Once` 实现线程安全的单例管理器\n- 按需获取:通过管理器函数按需获取依赖,避免链式传递\n- 自动迁移:使用 GORM AutoMigrate 自动管理数据库表结构\n\n### 系统关系\n```mermaid\ngraph TD\n Handler[Handler层] --\u003e Service[Service层]\n Service --\u003e Repository[Repository层]\n Repository --\u003e Database[(PostgreSQL)]\n Repository --\u003e Redis[(Redis)]\n Repository --\u003e Storage[(MinIO/RustFS)]\n Handler --\u003e Middleware[中间件]\n Middleware --\u003e JWT[JWT认证]\n Middleware --\u003e CORS[CORS]\n Middleware --\u003e Logger[日志]\n```\n\n### 数据流\n```mermaid\nflowchart TD\n Client[客户端] --\u003e API[API网关]\n API --\u003e Auth[认证中间件]\n Auth --\u003e Business[业务逻辑处理]\n Business --\u003e Data[数据访问层]\n Data --\u003e DB[(数据库)]\n Data --\u003e Cache[(缓存)]\n Data --\u003e ObjectStorage[(对象存储)]\n Business --\u003e Response[响应生成]\n Response --\u003e Client\n```\n\n## 3. 关键实现\n\n### 主要入口点\n- **服务启动**: `cmd/server/main.go` - 服务初始化、依赖注入、路由注册\n- **路由注册**: `internal/handler/routes.go` - API 路由定义和分组\n\n### 核心模块\n- **认证模块**: `internal/handler/auth_handler.go` - JWT 认证、用户注册登录\n- **用户模块**: `internal/handler/user_handler.go` - 用户信息管理\n- **材质管理**: `internal/handler/texture_handler.go` - 皮肤/披风上传与管理\n- **档案系统**: `internal/handler/profile_handler.go` - Minecraft 角色档案管理\n\n### 配置方法\n- **环境变量配置**: 项目完全依赖环境变量进行配置,便于容器化部署\n- **配置管理器**: `pkg/config/manager.go` - 使用 Viper 管理配置,支持 .env 文件\n- **动态配置**: 部分配置存储在数据库中,如积分系统、用户限制等\n\n### 外部依赖\n- **数据库**: PostgreSQL 15+ (GORM ORM)\n- **缓存**: Redis 6.0+\n- **存储**: RustFS/MinIO (S3 兼容对象存储)\n- **权限**: Casbin RBAC\n- **日志**: Zap (结构化日志)\n- **文档**: Swagger/OpenAPI 3.0\n\n### 集成点\n- **邮件服务**: `pkg/email/manager.go` - 邮箱验证、密码重置\n- **对象存储**: `pkg/storage/manager.go` - MinIO/RustFS 集成\n- **Redis**: `pkg/redis/manager.go` - 验证码存储、频率限制\n- **JWT**: `pkg/auth/manager.go` - 用户认证与授权\n\n### 组件关系\n```mermaid\ngraph LR\n Main[main.go] --\u003e Config[配置管理]\n Main --\u003e Logger[日志系统]\n Main --\u003e Database[数据库]\n Main --\u003e Redis[Redis]\n Main --\u003e Storage[对象存储]\n Main --\u003e Email[邮件服务]\n Main --\u003e Router[路由]\n Router --\u003e Handler[Handler层]\n Handler --\u003e Service[Service层]\n Service --\u003e Repository[Repository层]\n Repository --\u003e Database\n Repository --\u003e Redis\n Repository --\u003e Storage\n```\n\n## 4. 关键特性\n\n### 功能概览\n- **用户认证系统**: 注册、登录、JWT 认证、积分系统\n- **邮箱验证系统**: 注册验证、找回密码、更换邮箱\n- **材质管理系统**: 皮肤/披风上传、搜索、收藏、下载统计\n- **角色档案系统**: Minecraft 角色创建、管理、RSA 密钥生成\n- **文件存储**: MinIO/RustFS 对象存储集成、预签名 URL 上传\n- **缓存系统**: Redis 缓存、验证码存储、频率限制\n- **权限管理**: Casbin RBAC 权限控制\n- **数据审计**: 登录日志、操作审计、下载记录\n\n### 实现亮点\n- **高性能 JSON 序列化**: 使用 jsoniter 替代标准库 json,提升序列化性能\n- **自动数据库迁移**: 使用 GORM AutoMigrate 自动创建和更新表结构\n- **预签名 URL**: 减轻服务器压力,直接与对象存储交互\n- **RBAC 权限控制**: 基于 Casbin 的灵活权限管理系统\n- **结构化日志**: 使用 Zap 记录详细的结构化日志,便于排查问题\n\n### 特性架构\n```mermaid\nstateDiagram-v2\n [*] --\u003e 初始化\n 初始化 --\u003e 配置加载: 加载.env\n 初始化 --\u003e 依赖初始化: DB, Redis, Storage\n 初始化 --\u003e 路由注册: API路由\n 初始化 --\u003e 服务启动: HTTP服务器\n 服务启动 --\u003e 请求处理: 接收HTTP请求\n 请求处理 --\u003e 认证检查: JWT验证\n 认证检查 --\u003e 业务处理: Service层\n 业务处理 --\u003e 数据访问: Repository层\n 数据访问 --\u003e 响应生成: 返回结果\n 响应生成 --\u003e 请求处理\n 请求处理 --\u003e [*]\n```\n\nSources:\n- [README.md](/home/lan/Codes/backend/README.md)\n- [go.mod](/home/lan/Codes/backend/go.mod)\n- [main.go](/home/lan/Codes/backend/cmd/server/main.go)\n- [routes.go](/home/lan/Codes/backend/internal/handler/routes.go)\n- [manager.go](/home/lan/Codes/backend/pkg/config/manager.go)\n- [manager.go](/home/lan/Codes/backend/pkg/database/manager.go)\n- [manager.go](/home/lan/Codes/backend/pkg/logger/manager.go)\n- [manager.go](/home/lan/Codes/backend/pkg/redis/manager.go)\n- [manager.go](/home/lan/Codes/backend/pkg/storage/manager.go)\n\u003c/blog\u003e","gmt_create":"2025-11-30T08:00:57.01324874+08:00","gmt_modified":"2025-11-30T08:00:57.013248797+08:00","id":"85bb4c62-a688-41d0-b3b4-9cbec785f48c","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f"},"wiki_readme":{"content":"No readme file","gmt_create":"2025-11-30T07:58:11.866666802+08:00","gmt_modified":"2025-11-30T07:58:11.86666684+08:00","id":"b796888b-dc74-4d66-88c1-5b69efc4055e","repo_id":"83942fc9-ad8f-45e9-8713-cfd29959666f"},"wiki_repo":{"id":"83942fc9-ad8f-45e9-8713-cfd29959666f","name":"backend","progress_status":"completed","wiki_present_status":"COMPLETED","optimized_catalog":"\".\\n├── configs/casbin/\\n│ └── rbac_model.conf\\n├── internal/\\n│ ├── handler/\\n│ │ ├── auth_handler.go\\n│ │ ├── auth_handler_test.go\\n│ │ ├── captcha_handler.go\\n│ │ ├── captcha_handler_test.go\\n│ │ ├── profile_handler_test.go\\n│ │ ├── routes.go\\n│ │ ├── swagger.go\\n│ │ ├── user_handler_test.go\\n│ │ └── yggdrasil_handler_test.go\\n│ ├── middleware/\\n│ │ ├── auth.go\\n│ │ ├── auth_test.go\\n│ │ ├── cors.go\\n│ │ ├── cors_test.go\\n│ │ ├── logger.go\\n│ │ ├── logger_test.go\\n│ │ ├── recovery.go\\n│ │ └── recovery_test.go\\n│ ├── model/\\n│ │ ├── audit_log.go\\n│ │ ├── profile.go\\n│ │ ├── response.go\\n│ │ ├── response_test.go\\n│ │ ├── system_config.go\\n│ │ ├── texture.go\\n│ │ ├── token.go\\n│ │ ├── user.go\\n│ │ └── yggdrasil.go\\n│ ├── repository/\\n│ │ ├── profile_repository.go\\n│ │ ├── profile_repository_test.go\\n│ │ ├── system_config_repository.go\\n│ │ ├── system_config_repository_test.go\\n│ │ ├── texture_repository.go\\n│ │ ├── token_repository.go\\n│ │ ├── token_repository_test.go\\n│ │ ├── user_repository.go\\n│ │ ├── user_repository_test.go\\n│ │ └── yggdrasil_repository.go\\n│ ├── service/\\n│ │ ├── captcha_service.go\\n│ │ ├── captcha_service_test.go\\n│ │ ├── common.go\\n│ │ ├── common_test.go\\n│ │ ├── profile_service.go\\n│ │ ├── profile_service_test.go\\n│ │ ├── serialize_service.go\\n│ │ ├── serialize_service_test.go\\n│ │ ├── signature_service_test.go\\n│ │ ├── texture_service.go\\n│ │ ├── texture_service_test.go\\n│ │ ├── token_service.go\\n│ │ ├── token_service_test.go\\n│ │ ├── upload_service.go\\n│ │ ├── upload_service_test.go\\n│ │ ├── user_service.go\\n│ │ ├── user_service_test.go\\n│ │ ├── verification_service.go\\n│ │ ├── verification_service_test.go\\n│ │ ├── yggdrasil_service.go\\n│ │ └── yggdrasil_service_test.go\\n│ └── types/\\n│ ├── common.go\\n│ └── common_test.go\\n├── pkg/\\n│ ├── auth/\\n│ │ ├── jwt.go\\n│ │ ├── jwt_test.go\\n│ │ ├── manager.go\\n│ │ ├── manager_test.go\\n│ │ ├── password.go\\n│ │ └── password_test.go\\n│ ├── config/\\n│ │ ├── config.go\\n│ │ ├── manager.go\\n│ │ └── manager_test.go\\n│ ├── database/\\n│ │ ├── manager.go\\n│ │ ├── manager_test.go\\n│ │ └── postgres.go\\n│ ├── email/\\n│ │ ├── email.go\\n│ │ ├── manager.go\\n│ │ └── manager_test.go\\n│ ├── logger/\\n│ │ ├── logger.go\\n│ │ ├── manager.go\\n│ │ └── manager_test.go\\n│ ├── redis/\\n│ │ ├── manager.go\\n│ │ ├── manager_test.go\\n│ │ └── redis.go\\n│ ├── storage/\\n│ │ ├── manager.go\\n│ │ ├── manager_test.go\\n│ │ └── minio.go\\n│ └── utils/\\n│ ├── format.go\\n│ └── format_test.go\\n├── scripts/\\n│ ├── check-env.sh\\n│ └── dev.sh\\n├── go.mod\\n├── run.bat\\n├── run.sh\\n└── start.sh\\n\"","current_document_structure":"WikiEncrypted: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","catalogue_think_content":"WikiEncrypted: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","recovery_checkpoint":"wiki_generation_completed","last_commit_id":"4b4980820f65e19ef8df3e98695ae13347efa314","last_commit_update":"2025-11-28T23:30:49+08:00","gmt_create":"2025-11-30T07:58:07.072739237+08:00","gmt_modified":"2025-11-30T08:30:59.906366517+08:00","extend_info":"{\"language\":\"zh\",\"active\":true,\"branch\":\"dev\",\"shareStatus\":\"\",\"server_error_code\":\"\",\"cosy_version\":\"0.2.18\"}"}} |