0.0.1.2
This commit is contained in:
+1440
-278
File diff suppressed because one or more lines are too long
@@ -4,8 +4,8 @@
|
||||
"dynamicRoutes": {},
|
||||
"notFoundRoutes": [],
|
||||
"preview": {
|
||||
"previewModeId": "4631a204ce723e800f00263195c44ce3",
|
||||
"previewModeSigningKey": "dadcc4077c872061b58e6afb691e740140fdeb9b68ee82fd1bcb87d6796beeda",
|
||||
"previewModeEncryptionKey": "235d5de33f0c49153f8cbd3bc440421c857db41004ed659e8d542c6e3ae3a45f"
|
||||
"previewModeId": "9b4de78d91666e8723d20b9b25063aac",
|
||||
"previewModeSigningKey": "ee63046b8f4f99570a38aaba8fb4b70d0d14ca056c7ff89b9322e83ec2211b81",
|
||||
"previewModeEncryptionKey": "59ffc2b50c09df9e0fc6dbd54ffa1e671c30a758b2c6a030c87a57aff2ede489"
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,18 @@
|
||||
{
|
||||
"/_not-found/page": "app/_not-found/page.js",
|
||||
"/api/auth/[...nextauth]/route": "app/api/auth/[...nextauth]/route.js",
|
||||
"/api/trees/[treeId]/activity-logs/route": "app/api/trees/[treeId]/activity-logs/route.js",
|
||||
"/api/trees/[treeId]/members/[memberId]/route": "app/api/trees/[treeId]/members/[memberId]/route.js",
|
||||
"/api/trees/[treeId]/members/route": "app/api/trees/[treeId]/members/route.js",
|
||||
"/api/trees/[treeId]/route": "app/api/trees/[treeId]/route.js",
|
||||
"/api/trees/route": "app/api/trees/route.js",
|
||||
"/api/user/activity-logs/route": "app/api/user/activity-logs/route.js",
|
||||
"/api/user/profile/route": "app/api/user/profile/route.js",
|
||||
"/auth/signin/page": "app/auth/signin/page.js",
|
||||
"/page": "app/page.js"
|
||||
"/members/[id]/page": "app/members/[id]/page.js",
|
||||
"/members/new/page": "app/members/new/page.js",
|
||||
"/members/page": "app/members/page.js",
|
||||
"/page": "app/page.js",
|
||||
"/settings/page": "app/settings/page.js",
|
||||
"/timeline/page": "app/timeline/page.js",
|
||||
"/tree/page": "app/tree/page.js"
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
var R=require("../../../../chunks/[turbopack]_runtime.js")("server/app/api/auth/[...nextauth]/route.js")
|
||||
R.c("server/chunks/4e98a_next_f72bce58._.js")
|
||||
R.c("server/chunks/aacd9_next-auth_15fff84b._.js")
|
||||
R.c("server/chunks/00caa_next-auth_0fe46a47._.js")
|
||||
R.c("server/chunks/220bc_openid-client_5e32089b._.js")
|
||||
R.c("server/chunks/36042_jose_dist_node_cjs_e602ff23._.js")
|
||||
R.c("server/chunks/a0629__pnpm_9fe4b27d._.js")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
var R=require("../../../../../chunks/[turbopack]_runtime.js")("server/app/api/trees/[treeId]/activity-logs/route.js")
|
||||
R.c("server/chunks/4e98a_next_c16bc840._.js")
|
||||
R.c("server/chunks/aacd9_next-auth_15fff84b._.js")
|
||||
R.c("server/chunks/00caa_next-auth_0fe46a47._.js")
|
||||
R.c("server/chunks/220bc_openid-client_5e32089b._.js")
|
||||
R.c("server/chunks/36042_jose_dist_node_cjs_e602ff23._.js")
|
||||
R.c("server/chunks/a0629__pnpm_9fe4b27d._.js")
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
var R=require("../../../../../chunks/[turbopack]_runtime.js")("server/app/api/trees/[treeId]/collaborators/route.js")
|
||||
R.c("server/chunks/4e98a_next_a9e0b3e8._.js")
|
||||
R.c("server/chunks/00caa_next-auth_0fe46a47._.js")
|
||||
R.c("server/chunks/220bc_openid-client_5e32089b._.js")
|
||||
R.c("server/chunks/36042_jose_dist_node_cjs_e602ff23._.js")
|
||||
R.c("server/chunks/a0629__pnpm_9fe4b27d._.js")
|
||||
R.c("server/chunks/[root-of-the-server]__586bf482._.js")
|
||||
R.c("server/chunks/54027_server_app_api_trees_[treeId]_collaborators_route_actions_9236bcfc.js")
|
||||
R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/Documents/go-new/chinese-family-tree/app/api/trees/[treeId]/collaborators/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)")
|
||||
module.exports=R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/Documents/go-new/chinese-family-tree/app/api/trees/[treeId]/collaborators/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)").exports
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": []
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"/api/trees/[treeId]/collaborators/route": "app/api/trees/[treeId]/collaborators/route.js"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"devFiles": [],
|
||||
"ampDevFiles": [],
|
||||
"polyfillFiles": [
|
||||
"static/chunks/4e98a_next_dist_build_polyfills_polyfill-nomodule.js"
|
||||
],
|
||||
"lowPriorityFiles": [],
|
||||
"rootMainFiles": [],
|
||||
"pages": {},
|
||||
"ampFirstPages": []
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"node": {},
|
||||
"edge": {}
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {};
|
||||
globalThis.__RSC_MANIFEST["/api/trees/[treeId]/collaborators/route"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{},"ssrModuleMapping":{},"edgeSSRModuleMapping":{},"rscModuleMapping":{},"edgeRscModuleMapping":{},"entryCSSFiles":{},"entryJSFiles":{}}
|
||||
@@ -0,0 +1,12 @@
|
||||
var R=require("../../../../../chunks/[turbopack]_runtime.js")("server/app/api/trees/[treeId]/invite/route.js")
|
||||
R.c("server/chunks/4e98a_next_1a8f4202._.js")
|
||||
R.c("server/chunks/00caa_next-auth_0fe46a47._.js")
|
||||
R.c("server/chunks/220bc_openid-client_5e32089b._.js")
|
||||
R.c("server/chunks/36042_jose_dist_node_cjs_e602ff23._.js")
|
||||
R.c("server/chunks/e49cb_zod_v3_13ce4528._.js")
|
||||
R.c("server/chunks/cfda4_nodemailer_b9a47597._.js")
|
||||
R.c("server/chunks/a0629__pnpm_9fe4b27d._.js")
|
||||
R.c("server/chunks/[root-of-the-server]__f394cfc4._.js")
|
||||
R.c("server/chunks/168ba__next-internal_server_app_api_trees_[treeId]_invite_route_actions_bad26b87.js")
|
||||
R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/Documents/go-new/chinese-family-tree/app/api/trees/[treeId]/invite/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)")
|
||||
module.exports=R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/Documents/go-new/chinese-family-tree/app/api/trees/[treeId]/invite/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)").exports
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": []
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"/api/trees/[treeId]/invite/route": "app/api/trees/[treeId]/invite/route.js"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"devFiles": [],
|
||||
"ampDevFiles": [],
|
||||
"polyfillFiles": [
|
||||
"static/chunks/4e98a_next_dist_build_polyfills_polyfill-nomodule.js"
|
||||
],
|
||||
"lowPriorityFiles": [],
|
||||
"rootMainFiles": [],
|
||||
"pages": {},
|
||||
"ampFirstPages": []
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"node": {},
|
||||
"edge": {}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {};
|
||||
globalThis.__RSC_MANIFEST["/api/trees/[treeId]/invite/route"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{},"ssrModuleMapping":{},"edgeSSRModuleMapping":{},"rscModuleMapping":{},"edgeRscModuleMapping":{},"entryCSSFiles":{},"entryJSFiles":{}}
|
||||
@@ -0,0 +1,10 @@
|
||||
var R=require("../../../../../../chunks/[turbopack]_runtime.js")("server/app/api/trees/[treeId]/members/[memberId]/route.js")
|
||||
R.c("server/chunks/4e98a_next_115e29bb._.js")
|
||||
R.c("server/chunks/00caa_next-auth_0fe46a47._.js")
|
||||
R.c("server/chunks/220bc_openid-client_5e32089b._.js")
|
||||
R.c("server/chunks/36042_jose_dist_node_cjs_e602ff23._.js")
|
||||
R.c("server/chunks/a0629__pnpm_9fe4b27d._.js")
|
||||
R.c("server/chunks/[root-of-the-server]__a8e2023b._.js")
|
||||
R.c("server/chunks/54027_server_app_api_trees_[treeId]_members_[memberId]_route_actions_ccc69906.js")
|
||||
R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/Documents/go-new/chinese-family-tree/app/api/trees/[treeId]/members/[memberId]/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)")
|
||||
module.exports=R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/Documents/go-new/chinese-family-tree/app/api/trees/[treeId]/members/[memberId]/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)").exports
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": []
|
||||
}
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"/api/trees/[treeId]/members/[memberId]/route": "app/api/trees/[treeId]/members/[memberId]/route.js"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"devFiles": [],
|
||||
"ampDevFiles": [],
|
||||
"polyfillFiles": [
|
||||
"static/chunks/4e98a_next_dist_build_polyfills_polyfill-nomodule.js"
|
||||
],
|
||||
"lowPriorityFiles": [],
|
||||
"rootMainFiles": [],
|
||||
"pages": {},
|
||||
"ampFirstPages": []
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"node": {},
|
||||
"edge": {}
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {};
|
||||
globalThis.__RSC_MANIFEST["/api/trees/[treeId]/members/[memberId]/route"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{},"ssrModuleMapping":{},"edgeSSRModuleMapping":{},"rscModuleMapping":{},"edgeRscModuleMapping":{},"entryCSSFiles":{},"entryJSFiles":{}}
|
||||
@@ -1,6 +1,6 @@
|
||||
var R=require("../../../../../chunks/[turbopack]_runtime.js")("server/app/api/trees/[treeId]/members/route.js")
|
||||
R.c("server/chunks/4e98a_next_2f660f65._.js")
|
||||
R.c("server/chunks/aacd9_next-auth_15fff84b._.js")
|
||||
R.c("server/chunks/00caa_next-auth_0fe46a47._.js")
|
||||
R.c("server/chunks/220bc_openid-client_5e32089b._.js")
|
||||
R.c("server/chunks/36042_jose_dist_node_cjs_e602ff23._.js")
|
||||
R.c("server/chunks/e49cb_zod_v3_13ce4528._.js")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
var R=require("../../../../chunks/[turbopack]_runtime.js")("server/app/api/trees/[treeId]/route.js")
|
||||
R.c("server/chunks/4e98a_next_4e14096c._.js")
|
||||
R.c("server/chunks/aacd9_next-auth_15fff84b._.js")
|
||||
R.c("server/chunks/00caa_next-auth_0fe46a47._.js")
|
||||
R.c("server/chunks/220bc_openid-client_5e32089b._.js")
|
||||
R.c("server/chunks/36042_jose_dist_node_cjs_e602ff23._.js")
|
||||
R.c("server/chunks/a0629__pnpm_9fe4b27d._.js")
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
var R=require("../../../chunks/[turbopack]_runtime.js")("server/app/api/trees/route.js")
|
||||
R.c("server/chunks/4e98a_next_153a3be2._.js")
|
||||
R.c("server/chunks/aacd9_next-auth_15fff84b._.js")
|
||||
R.c("server/chunks/00caa_next-auth_0fe46a47._.js")
|
||||
R.c("server/chunks/220bc_openid-client_5e32089b._.js")
|
||||
R.c("server/chunks/36042_jose_dist_node_cjs_e602ff23._.js")
|
||||
R.c("server/chunks/e49cb_zod_v3_13ce4528._.js")
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
var R=require("../../../../chunks/[turbopack]_runtime.js")("server/app/api/user/activity-logs/route.js")
|
||||
R.c("server/chunks/4e98a_next_f8bbb047._.js")
|
||||
R.c("server/chunks/00caa_next-auth_0fe46a47._.js")
|
||||
R.c("server/chunks/220bc_openid-client_5e32089b._.js")
|
||||
R.c("server/chunks/36042_jose_dist_node_cjs_e602ff23._.js")
|
||||
R.c("server/chunks/a0629__pnpm_9fe4b27d._.js")
|
||||
R.c("server/chunks/[root-of-the-server]__dc5921dc._.js")
|
||||
R.c("server/chunks/168ba__next-internal_server_app_api_user_activity-logs_route_actions_225a198a.js")
|
||||
R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/Documents/go-new/chinese-family-tree/app/api/user/activity-logs/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)")
|
||||
module.exports=R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-route.js { INNER_APP_ROUTE => \"[project]/Documents/go-new/chinese-family-tree/app/api/user/activity-logs/route.ts [app-route] (ecmascript)\" } [app-route] (ecmascript)").exports
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": []
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"/api/user/activity-logs/route": "app/api/user/activity-logs/route.js"
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"devFiles": [],
|
||||
"ampDevFiles": [],
|
||||
"polyfillFiles": [
|
||||
"static/chunks/4e98a_next_dist_build_polyfills_polyfill-nomodule.js"
|
||||
],
|
||||
"lowPriorityFiles": [],
|
||||
"rootMainFiles": [],
|
||||
"pages": {},
|
||||
"ampFirstPages": []
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"node": {},
|
||||
"edge": {}
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
globalThis.__RSC_MANIFEST = globalThis.__RSC_MANIFEST || {};
|
||||
globalThis.__RSC_MANIFEST["/api/user/activity-logs/route"] = {"moduleLoading":{"prefix":"","crossOrigin":null},"clientModules":{},"ssrModuleMapping":{},"edgeSSRModuleMapping":{},"rscModuleMapping":{},"edgeRscModuleMapping":{},"entryCSSFiles":{},"entryJSFiles":{}}
|
||||
@@ -1,6 +1,6 @@
|
||||
var R=require("../../../../chunks/[turbopack]_runtime.js")("server/app/api/user/profile/route.js")
|
||||
R.c("server/chunks/4e98a_next_5cd4dbdd._.js")
|
||||
R.c("server/chunks/aacd9_next-auth_15fff84b._.js")
|
||||
R.c("server/chunks/00caa_next-auth_0fe46a47._.js")
|
||||
R.c("server/chunks/220bc_openid-client_5e32089b._.js")
|
||||
R.c("server/chunks/36042_jose_dist_node_cjs_e602ff23._.js")
|
||||
R.c("server/chunks/a0629__pnpm_9fe4b27d._.js")
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
|
||||
var R=require("../../../chunks/ssr/[turbopack]_runtime.js")("server/app/members/[id]/page.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_4cf12d94._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__0eccc439._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_0643e073._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__7f148858._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_global-error_196f2367.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__5f28c3e5._.js")
|
||||
R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_loading_tsx_b1f283e0._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_1ee43648._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_forbidden_243a9611.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_unauthorized_719c1458.js")
|
||||
R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_members_loading_tsx_ed6b6dde._.js")
|
||||
R.c("server/chunks/ssr/168ba__next-internal_server_app_members_[id]_page_actions_7f9db747.js")
|
||||
R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-page.js?page=/members/[id]/page { GLOBAL_ERROR_MODULE => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_0 => \"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_1 => \"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_2 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_3 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_4 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_5 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_6 => \"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_7 => \"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-rsc] (ecmascript, Next.js Server Component)\" } [app-rsc] (ecmascript)")
|
||||
module.exports=R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-page.js?page=/members/[id]/page { GLOBAL_ERROR_MODULE => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_0 => \"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_1 => \"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_2 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_3 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_4 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_5 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_6 => \"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_7 => \"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page.tsx [app-rsc] (ecmascript, Next.js Server Component)\" } [app-rsc] (ecmascript)").exports
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": []
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"/members/[id]/page": "app/members/[id]/page.js"
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"devFiles": [],
|
||||
"ampDevFiles": [],
|
||||
"polyfillFiles": [
|
||||
"static/chunks/4e98a_next_dist_build_polyfills_polyfill-nomodule.js"
|
||||
],
|
||||
"lowPriorityFiles": [],
|
||||
"rootMainFiles": [
|
||||
"static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_67e3ae72._.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_react-dom_da552622._.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_react-server-dom-turbopack_c5146742._.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_next-devtools_index_59922e46.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_21c48460._.js",
|
||||
"static/chunks/4e98a_next_dist_client_d594727a._.js",
|
||||
"static/chunks/4e98a_next_dist_24912bf1._.js",
|
||||
"static/chunks/6704b_@swc_helpers_cjs_8771abe4._.js",
|
||||
"static/chunks/Documents_go-new_chinese-family-tree_a0ff3932._.js",
|
||||
"static/chunks/turbopack-Documents_go-new_chinese-family-tree_b39b5e67._.js"
|
||||
],
|
||||
"pages": {},
|
||||
"ampFirstPages": []
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"pages": {},
|
||||
"app": {
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/members/[id]/page": [
|
||||
"static/media/caa3a2e1cccd8315-s.p.853070df.woff2",
|
||||
"static/media/797e433ab948586e-s.p.dbea232f.woff2"
|
||||
]
|
||||
},
|
||||
"appUsingSizeAdjust": true,
|
||||
"pagesUsingSizeAdjust": false
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"node": {},
|
||||
"edge": {}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,15 @@
|
||||
var R=require("../../../chunks/ssr/[turbopack]_runtime.js")("server/app/members/new/page.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_03c86f03._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__ebcf4d5f._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_0643e073._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__7f148858._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_global-error_196f2367.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__5f28c3e5._.js")
|
||||
R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_loading_tsx_b1f283e0._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_1ee43648._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_forbidden_243a9611.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_unauthorized_719c1458.js")
|
||||
R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_members_loading_tsx_ed6b6dde._.js")
|
||||
R.c("server/chunks/ssr/fb354_chinese-family-tree__next-internal_server_app_members_new_page_actions_269eb31e.js")
|
||||
R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-page.js?page=/members/new/page { GLOBAL_ERROR_MODULE => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_0 => \"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_1 => \"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_2 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_3 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_4 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_5 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_6 => \"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_7 => \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)\" } [app-rsc] (ecmascript)")
|
||||
module.exports=R.m("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/esm/build/templates/app-page.js?page=/members/new/page { GLOBAL_ERROR_MODULE => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_0 => \"[project]/Documents/go-new/chinese-family-tree/app/layout.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_1 => \"[project]/Documents/go-new/chinese-family-tree/app/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_2 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/not-found.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_3 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/forbidden.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_4 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/unauthorized.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_5 => \"[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/dist/client/components/builtin/global-error.js [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_6 => \"[project]/Documents/go-new/chinese-family-tree/app/members/loading.tsx [app-rsc] (ecmascript, Next.js Server Component)\", MODULE_7 => \"[project]/Documents/go-new/chinese-family-tree/app/members/new/page.tsx [app-rsc] (ecmascript, Next.js Server Component)\" } [app-rsc] (ecmascript)").exports
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": []
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"/members/new/page": "app/members/new/page.js"
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
{
|
||||
"devFiles": [],
|
||||
"ampDevFiles": [],
|
||||
"polyfillFiles": [
|
||||
"static/chunks/4e98a_next_dist_build_polyfills_polyfill-nomodule.js"
|
||||
],
|
||||
"lowPriorityFiles": [],
|
||||
"rootMainFiles": [
|
||||
"static/chunks/[turbopack]_browser_dev_hmr-client_hmr-client_ts_67e3ae72._.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_react-dom_da552622._.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_react-server-dom-turbopack_c5146742._.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_next-devtools_index_59922e46.js",
|
||||
"static/chunks/4e98a_next_dist_compiled_21c48460._.js",
|
||||
"static/chunks/4e98a_next_dist_client_d594727a._.js",
|
||||
"static/chunks/4e98a_next_dist_24912bf1._.js",
|
||||
"static/chunks/6704b_@swc_helpers_cjs_8771abe4._.js",
|
||||
"static/chunks/Documents_go-new_chinese-family-tree_a0ff3932._.js",
|
||||
"static/chunks/turbopack-Documents_go-new_chinese-family-tree_b39b5e67._.js"
|
||||
],
|
||||
"pages": {},
|
||||
"ampFirstPages": []
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"pages": {},
|
||||
"app": {
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/members/new/page": [
|
||||
"static/media/caa3a2e1cccd8315-s.p.853070df.woff2",
|
||||
"static/media/797e433ab948586e-s.p.dbea232f.woff2"
|
||||
]
|
||||
},
|
||||
"appUsingSizeAdjust": true,
|
||||
"pagesUsingSizeAdjust": false
|
||||
}
|
||||
@@ -0,0 +1 @@
|
||||
{}
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"node": {},
|
||||
"edge": {}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -4,7 +4,7 @@ R.c("server/chunks/ssr/[root-of-the-server]__439b7542._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_0643e073._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__7f148858._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_global-error_196f2367.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__5f28c3e5._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__b37c7274._.js")
|
||||
R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_loading_tsx_b1f283e0._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_1ee43648._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_forbidden_243a9611.js")
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -4,7 +4,7 @@ R.c("server/chunks/ssr/[root-of-the-server]__c3bdb703._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_0643e073._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__7f148858._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_global-error_196f2367.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__5f28c3e5._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__b37c7274._.js")
|
||||
R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_loading_tsx_b1f283e0._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_1ee43648._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_forbidden_243a9611.js")
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -4,7 +4,7 @@ R.c("server/chunks/ssr/[root-of-the-server]__8c3c3c48._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_0643e073._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__7f148858._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_global-error_196f2367.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__5f28c3e5._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__b37c7274._.js")
|
||||
R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_loading_tsx_b1f283e0._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_1ee43648._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_forbidden_243a9611.js")
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"id": "[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/echarts-for-react@3.0.5_echarts@6.0.0_react@19.2.0/node_modules/echarts-for-react/esm/index.js [app-client] (ecmascript, next/dynamic entry)",
|
||||
"files": [
|
||||
"static/chunks/a0629__pnpm_38e9b27f._.js",
|
||||
"static/chunks/6bb63_echarts-for-react_esm_index_d8b2520a.js"
|
||||
"static/chunks/6bb63_echarts-for-react_esm_index_a2c76e66.js"
|
||||
]
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
@@ -4,7 +4,7 @@ R.c("server/chunks/ssr/[root-of-the-server]__4a0f77db._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_0643e073._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__7f148858._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_global-error_196f2367.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__5f28c3e5._.js")
|
||||
R.c("server/chunks/ssr/[root-of-the-server]__b37c7274._.js")
|
||||
R.c("server/chunks/ssr/Documents_go-new_chinese-family-tree_app_loading_tsx_b1f283e0._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_1ee43648._.js")
|
||||
R.c("server/chunks/ssr/4e98a_next_dist_client_components_builtin_forbidden_243a9611.js")
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+7
@@ -0,0 +1,7 @@
|
||||
module.exports = [
|
||||
"[project]/Documents/go-new/chinese-family-tree/.next-internal/server/app/api/trees/[treeId]/invite/route/actions.js [app-rsc] (server actions loader, ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=168ba__next-internal_server_app_api_trees_%5BtreeId%5D_invite_route_actions_bad26b87.js.map
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 3, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}]
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
module.exports = [
|
||||
"[project]/Documents/go-new/chinese-family-tree/.next-internal/server/app/api/user/activity-logs/route/actions.js [app-rsc] (server actions loader, ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=168ba__next-internal_server_app_api_user_activity-logs_route_actions_225a198a.js.map
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 3, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
+7
@@ -0,0 +1,7 @@
|
||||
module.exports = [
|
||||
"[project]/Documents/go-new/chinese-family-tree/.next-internal/server/app/api/trees/[treeId]/collaborators/route/actions.js [app-rsc] (server actions loader, ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=54027_server_app_api_trees_%5BtreeId%5D_collaborators_route_actions_9236bcfc.js.map
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 3, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}]
|
||||
}
|
||||
+7
@@ -0,0 +1,7 @@
|
||||
module.exports = [
|
||||
"[project]/Documents/go-new/chinese-family-tree/.next-internal/server/app/api/trees/[treeId]/members/[memberId]/route/actions.js [app-rsc] (server actions loader, ecmascript)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=54027_server_app_api_trees_%5BtreeId%5D_members_%5BmemberId%5D_route_actions_ccc69906.js.map
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 3, "column": 0}, "map": {"version":3,"sources":[],"names":[],"mappings":""}}]
|
||||
}
|
||||
@@ -127,7 +127,7 @@ __turbopack_context__.s([
|
||||
"authOptions",
|
||||
()=>authOptions
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/bcryptjs@3.0.3/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
;
|
||||
@@ -135,7 +135,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch
|
||||
;
|
||||
const authOptions = {
|
||||
providers: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
name: "credentials",
|
||||
credentials: {
|
||||
email: {
|
||||
@@ -261,7 +261,7 @@ __turbopack_context__.s([
|
||||
()=>POST
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/server.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$permissions$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/permissions.ts [app-route] (ecmascript)");
|
||||
@@ -288,7 +288,7 @@ const createMemberSchema = __TURBOPACK__imported__module__$5b$project$5d2f$Docum
|
||||
});
|
||||
async function GET(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
@@ -345,6 +345,17 @@ async function GET(req, { params }) {
|
||||
});
|
||||
}
|
||||
}
|
||||
console.log('👥 GET /api/trees/[treeId]/members 返回数据:', {
|
||||
treeId,
|
||||
userId: session.user.id,
|
||||
membersCount: members.length,
|
||||
rootId,
|
||||
members: members.map((m)=>({
|
||||
id: m.id,
|
||||
fullName: m.fullName,
|
||||
generation: m.generation
|
||||
}))
|
||||
});
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
members,
|
||||
rootId
|
||||
@@ -360,7 +371,7 @@ async function GET(req, { params }) {
|
||||
}
|
||||
async function POST(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -127,7 +127,7 @@ __turbopack_context__.s([
|
||||
"authOptions",
|
||||
()=>authOptions
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/bcryptjs@3.0.3/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
;
|
||||
@@ -135,7 +135,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch
|
||||
;
|
||||
const authOptions = {
|
||||
providers: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
name: "credentials",
|
||||
credentials: {
|
||||
email: {
|
||||
@@ -205,7 +205,7 @@ __turbopack_context__.s([
|
||||
()=>PATCH
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/server.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
;
|
||||
@@ -214,7 +214,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch
|
||||
;
|
||||
async function GET(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
@@ -223,7 +223,6 @@ async function GET(req, { params }) {
|
||||
});
|
||||
}
|
||||
const { treeId } = await params;
|
||||
console.log('API /trees/[treeId] - Requested treeId:', treeId);
|
||||
const tree = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyTree.findFirst({
|
||||
where: {
|
||||
id: treeId,
|
||||
@@ -257,16 +256,42 @@ async function GET(req, { params }) {
|
||||
}
|
||||
});
|
||||
if (!tree) {
|
||||
console.log('API /trees/[treeId] - Tree not found for id:', treeId);
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "家族树不存在或无权访问"
|
||||
}, {
|
||||
status: 404
|
||||
});
|
||||
}
|
||||
console.log('API /trees/[treeId] - Returning tree:', tree.name, tree.id);
|
||||
// 计算当前用户角色
|
||||
let currentUserRole = "VIEWER";
|
||||
if (tree.ownerId === session.user.id) {
|
||||
currentUserRole = "OWNER";
|
||||
} else {
|
||||
const collaborator = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].treeCollaborator.findUnique({
|
||||
where: {
|
||||
treeId_userId: {
|
||||
treeId: tree.id,
|
||||
userId: session.user.id
|
||||
}
|
||||
}
|
||||
});
|
||||
if (collaborator) {
|
||||
currentUserRole = collaborator.role;
|
||||
}
|
||||
}
|
||||
console.log('🌳 GET /api/trees/[treeId] 返回数据:', {
|
||||
treeId,
|
||||
userId: session.user.id,
|
||||
treeName: tree.name,
|
||||
currentUserRole,
|
||||
membersCount: tree._count.members,
|
||||
collaboratorsCount: tree._count.collaborators
|
||||
});
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
tree
|
||||
tree: {
|
||||
...tree,
|
||||
currentUserRole
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("获取家族树失败:", error);
|
||||
@@ -279,7 +304,7 @@ async function GET(req, { params }) {
|
||||
}
|
||||
async function PATCH(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
@@ -337,7 +362,7 @@ async function PATCH(req, { params }) {
|
||||
}
|
||||
async function DELETE(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,344 @@
|
||||
module.exports = [
|
||||
"[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/after-task-async-storage.external.js", () => require("next/dist/server/app-render/after-task-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/util [external] (util, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("util", () => require("util"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/url [external] (url, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("url", () => require("url"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/http [external] (http, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("http", () => require("http"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("crypto", () => require("crypto"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/assert [external] (assert, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("assert", () => require("assert"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/querystring [external] (querystring, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("querystring", () => require("querystring"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/buffer [external] (buffer, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("buffer", () => require("buffer"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/zlib [external] (zlib, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("zlib", () => require("zlib"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/https [external] (https, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("https", () => require("https"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/events [external] (events, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("events", () => require("events"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/@prisma/client [external] (@prisma/client, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("@prisma/client", () => require("@prisma/client"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"prisma",
|
||||
()=>prisma
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs)");
|
||||
;
|
||||
const globalForPrisma = globalThis;
|
||||
const prisma = globalForPrisma.prisma ?? new __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["PrismaClient"]();
|
||||
if ("TURBOPACK compile-time truthy", 1) globalForPrisma.prisma = prisma;
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"authOptions",
|
||||
()=>authOptions
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/bcryptjs@3.0.3/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
;
|
||||
;
|
||||
;
|
||||
const authOptions = {
|
||||
providers: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
name: "credentials",
|
||||
credentials: {
|
||||
email: {
|
||||
label: "Email",
|
||||
type: "email"
|
||||
},
|
||||
password: {
|
||||
label: "Password",
|
||||
type: "password"
|
||||
}
|
||||
},
|
||||
async authorize (credentials) {
|
||||
if (!credentials?.email || !credentials?.password) {
|
||||
throw new Error("请输入邮箱和密码");
|
||||
}
|
||||
const user = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].user.findUnique({
|
||||
where: {
|
||||
email: credentials.email
|
||||
}
|
||||
});
|
||||
if (!user || !user.password) {
|
||||
throw new Error("用户不存在");
|
||||
}
|
||||
const isValid = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].compare(credentials.password, user.password);
|
||||
if (!isValid) {
|
||||
throw new Error("密码错误");
|
||||
}
|
||||
return {
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
name: user.name
|
||||
};
|
||||
}
|
||||
})
|
||||
],
|
||||
session: {
|
||||
strategy: "jwt"
|
||||
},
|
||||
pages: {
|
||||
signIn: "/auth/signin"
|
||||
},
|
||||
callbacks: {
|
||||
async jwt ({ token, user }) {
|
||||
if (user) {
|
||||
token.id = user.id;
|
||||
}
|
||||
return token;
|
||||
},
|
||||
async session ({ session, token }) {
|
||||
if (session.user) {
|
||||
session.user.id = token.id;
|
||||
}
|
||||
return session;
|
||||
}
|
||||
}
|
||||
};
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/api/trees/[treeId]/collaborators/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"DELETE",
|
||||
()=>DELETE,
|
||||
"GET",
|
||||
()=>GET
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/server.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
async function GET(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
}, {
|
||||
status: 401
|
||||
});
|
||||
}
|
||||
const { treeId } = await params;
|
||||
// 检查权限(所有者或协作者都可以看)
|
||||
const tree = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyTree.findFirst({
|
||||
where: {
|
||||
id: treeId,
|
||||
OR: [
|
||||
{
|
||||
ownerId: session.user.id
|
||||
},
|
||||
{
|
||||
collaborators: {
|
||||
some: {
|
||||
userId: session.user.id
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
});
|
||||
if (!tree) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "家族树不存在或无权访问"
|
||||
}, {
|
||||
status: 404
|
||||
});
|
||||
}
|
||||
// 获取协作者
|
||||
const collaborators = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].treeCollaborator.findMany({
|
||||
where: {
|
||||
treeId
|
||||
},
|
||||
include: {
|
||||
user: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
email: true,
|
||||
avatar: true
|
||||
}
|
||||
}
|
||||
},
|
||||
orderBy: {
|
||||
invitedAt: 'desc'
|
||||
}
|
||||
});
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
collaborators
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("获取协作者失败:", error);
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "获取协作者失败"
|
||||
}, {
|
||||
status: 500
|
||||
});
|
||||
}
|
||||
}
|
||||
async function DELETE(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
}, {
|
||||
status: 401
|
||||
});
|
||||
}
|
||||
const { treeId } = await params;
|
||||
const { searchParams } = new URL(req.url);
|
||||
const userId = searchParams.get('userId');
|
||||
if (!userId) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "缺少用户ID"
|
||||
}, {
|
||||
status: 400
|
||||
});
|
||||
}
|
||||
// 检查权限:只有所有者可以移除协作者,或者是协作者自己退出
|
||||
const tree = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyTree.findFirst({
|
||||
where: {
|
||||
id: treeId
|
||||
}
|
||||
});
|
||||
if (!tree) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "家族树不存在"
|
||||
}, {
|
||||
status: 404
|
||||
});
|
||||
}
|
||||
const isOwner = tree.ownerId === session.user.id;
|
||||
const isSelf = userId === session.user.id;
|
||||
if (!isOwner && !isSelf) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "无权移除此协作者"
|
||||
}, {
|
||||
status: 403
|
||||
});
|
||||
}
|
||||
// 移除协作者
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].treeCollaborator.deleteMany({
|
||||
where: {
|
||||
treeId,
|
||||
userId
|
||||
}
|
||||
});
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
success: true
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("移除协作者失败:", error);
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "移除协作者失败"
|
||||
}, {
|
||||
status: 500
|
||||
});
|
||||
}
|
||||
}
|
||||
}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=%5Broot-of-the-server%5D__586bf482._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -127,7 +127,7 @@ __turbopack_context__.s([
|
||||
"authOptions",
|
||||
()=>authOptions
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/bcryptjs@3.0.3/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
;
|
||||
@@ -135,7 +135,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch
|
||||
;
|
||||
const authOptions = {
|
||||
providers: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
name: "credentials",
|
||||
credentials: {
|
||||
email: {
|
||||
@@ -201,7 +201,7 @@ __turbopack_context__.s([
|
||||
()=>GET
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/server.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
;
|
||||
@@ -210,7 +210,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch
|
||||
;
|
||||
async function GET(req) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client'\n\nconst globalForPrisma = globalThis as unknown as {\n prisma: PrismaClient | undefined\n}\n\nexport const prisma = globalForPrisma.prisma ?? new PrismaClient()\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"names":[],"mappings":";;;;AAAA;;AAEA,MAAM,kBAAkB;AAIjB,MAAM,SAAS,gBAAgB,MAAM,IAAI,IAAI,6IAAY;AAEhE,wCAA2C,gBAAgB,MAAM,GAAG"}},
|
||||
{"offset": {"line": 125, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/auth.ts"],"sourcesContent":["import type { NextAuthOptions } from \"next-auth\"\nimport CredentialsProvider from \"next-auth/providers/credentials\"\nimport { prisma } from \"./prisma\"\nimport bcrypt from \"bcryptjs\"\n\nexport const authOptions: NextAuthOptions = {\n providers: [\n CredentialsProvider({\n name: \"credentials\",\n credentials: {\n email: { label: \"Email\", type: \"email\" },\n password: { label: \"Password\", type: \"password\" }\n },\n async authorize(credentials) {\n if (!credentials?.email || !credentials?.password) {\n throw new Error(\"请输入邮箱和密码\")\n }\n\n const user = await prisma.user.findUnique({\n where: { email: credentials.email }\n })\n\n if (!user || !user.password) {\n throw new Error(\"用户不存在\")\n }\n\n const isValid = await bcrypt.compare(credentials.password, user.password)\n\n if (!isValid) {\n throw new Error(\"密码错误\")\n }\n\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n }\n }\n })\n ],\n session: {\n strategy: \"jwt\"\n },\n pages: {\n signIn: \"/auth/signin\",\n },\n callbacks: {\n async jwt({ token, user }) {\n if (user) {\n token.id = user.id\n }\n return token\n },\n async session({ session, token }) {\n if (session.user) {\n session.user.id = token.id as string\n }\n return session\n }\n }\n}\n"],"names":[],"mappings":";;;;AACA;AACA;AACA;;;;AAEO,MAAM,cAA+B;IAC1C,WAAW;QACT,IAAA,0cAAmB,EAAC;YAClB,MAAM;YACN,aAAa;gBACX,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YAClD;YACA,MAAM,WAAU,WAAW;gBACzB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU;oBACjD,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,OAAO,MAAM,gLAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACxC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAC;gBACpC;gBAEA,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC3B,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,UAAU,MAAM,0PAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,EAAE,KAAK,QAAQ;gBAExE,IAAI,CAAC,SAAS;oBACZ,MAAM,IAAI,MAAM;gBAClB;gBAEA,OAAO;oBACL,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACjB;YACF;QACF;KACD;IACD,SAAS;QACP,UAAU;IACZ;IACA,OAAO;QACL,QAAQ;IACV;IACA,WAAW;QACT,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACvB,IAAI,MAAM;gBACR,MAAM,EAAE,GAAG,KAAK,EAAE;YACpB;YACA,OAAO;QACT;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9B,IAAI,QAAQ,IAAI,EAAE;gBAChB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC5B;YACA,OAAO;QACT;IACF;AACF"}},
|
||||
{"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/api/user/profile/route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from \"next/server\"\nimport { getServerSession } from \"next-auth\"\nimport { authOptions } from \"@/lib/auth\"\nimport { prisma } from \"@/lib/prisma\"\n\nexport async function GET(req: NextRequest) {\n try {\n const session = await getServerSession(authOptions)\n\n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n // 获取用户信息\n const user = await prisma.user.findUnique({\n where: { id: session.user.id },\n select: {\n id: true,\n email: true,\n name: true,\n createdAt: true,\n updatedAt: true,\n }\n })\n\n if (!user) {\n return NextResponse.json({ error: \"用户不存在\" }, { status: 404 })\n }\n\n // 获取用户拥有的家族树数量\n const ownedTreesCount = await prisma.familyTree.count({\n where: { ownerId: session.user.id }\n })\n\n // 获取用户作为协作者的家族树\n const collaborations = await prisma.treeCollaborator.findMany({\n where: { userId: session.user.id },\n include: {\n tree: {\n select: {\n id: true,\n name: true,\n }\n }\n }\n })\n\n return NextResponse.json({\n user: {\n ...user,\n ownedTreesCount,\n collaborations: collaborations.map((c) => ({\n treeId: c.tree.id,\n treeName: c.tree.name,\n role: c.role,\n }))\n }\n })\n } catch (error) {\n console.error(\"获取用户信息失败:\", error)\n return NextResponse.json(\n { error: \"获取用户信息失败\" },\n { status: 500 }\n )\n }\n}\n"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;;;;;AAEO,eAAe,IAAI,GAAgB;IACxC,IAAI;QACF,MAAM,UAAU,MAAM,IAAA,gcAAgB,EAAC,mLAAW;QAElD,IAAI,CAAC,SAAS,MAAM,IAAI;YACtB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAM,GAAG;gBAAE,QAAQ;YAAI;QAC3D;QAEA,SAAS;QACT,MAAM,OAAO,MAAM,gLAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YACxC,OAAO;gBAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;YAAC;YAC7B,QAAQ;gBACN,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,WAAW;gBACX,WAAW;YACb;QACF;QAEA,IAAI,CAAC,MAAM;YACT,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAQ,GAAG;gBAAE,QAAQ;YAAI;QAC7D;QAEA,eAAe;QACf,MAAM,kBAAkB,MAAM,gLAAM,CAAC,UAAU,CAAC,KAAK,CAAC;YACpD,OAAO;gBAAE,SAAS,QAAQ,IAAI,CAAC,EAAE;YAAC;QACpC;QAEA,gBAAgB;QAChB,MAAM,iBAAiB,MAAM,gLAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAC5D,OAAO;gBAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;YAAC;YACjC,SAAS;gBACP,MAAM;oBACJ,QAAQ;wBACN,IAAI;wBACJ,MAAM;oBACR;gBACF;YACF;QACF;QAEA,OAAO,sUAAY,CAAC,IAAI,CAAC;YACvB,MAAM;gBACJ,GAAG,IAAI;gBACP;gBACA,gBAAgB,eAAe,GAAG,CAAC,CAAC,IAAM,CAAC;wBACzC,QAAQ,EAAE,IAAI,CAAC,EAAE;wBACjB,UAAU,EAAE,IAAI,CAAC,IAAI;wBACrB,MAAM,EAAE,IAAI;oBACd,CAAC;YACH;QACF;IACF,EAAE,OAAO,OAAO;QACd,QAAQ,KAAK,CAAC,aAAa;QAC3B,OAAO,sUAAY,CAAC,IAAI,CACtB;YAAE,OAAO;QAAW,GACpB;YAAE,QAAQ;QAAI;IAElB;AACF"}}]
|
||||
{"offset": {"line": 125, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/auth.ts"],"sourcesContent":["import type { NextAuthOptions } from \"next-auth\"\nimport CredentialsProvider from \"next-auth/providers/credentials\"\nimport { prisma } from \"./prisma\"\nimport bcrypt from \"bcryptjs\"\n\nexport const authOptions: NextAuthOptions = {\n providers: [\n CredentialsProvider({\n name: \"credentials\",\n credentials: {\n email: { label: \"Email\", type: \"email\" },\n password: { label: \"Password\", type: \"password\" }\n },\n async authorize(credentials) {\n if (!credentials?.email || !credentials?.password) {\n throw new Error(\"请输入邮箱和密码\")\n }\n\n const user = await prisma.user.findUnique({\n where: { email: credentials.email }\n })\n\n if (!user || !user.password) {\n throw new Error(\"用户不存在\")\n }\n\n const isValid = await bcrypt.compare(credentials.password, user.password)\n\n if (!isValid) {\n throw new Error(\"密码错误\")\n }\n\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n }\n }\n })\n ],\n session: {\n strategy: \"jwt\"\n },\n pages: {\n signIn: \"/auth/signin\",\n },\n callbacks: {\n async jwt({ token, user }) {\n if (user) {\n token.id = user.id\n }\n return token\n },\n async session({ session, token }) {\n if (session.user) {\n session.user.id = token.id as string\n }\n return session\n }\n }\n}\n"],"names":[],"mappings":";;;;AACA;AACA;AACA;;;;AAEO,MAAM,cAA+B;IAC1C,WAAW;QACT,IAAA,8aAAmB,EAAC;YAClB,MAAM;YACN,aAAa;gBACX,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YAClD;YACA,MAAM,WAAU,WAAW;gBACzB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU;oBACjD,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,OAAO,MAAM,gLAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACxC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAC;gBACpC;gBAEA,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC3B,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,UAAU,MAAM,0PAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,EAAE,KAAK,QAAQ;gBAExE,IAAI,CAAC,SAAS;oBACZ,MAAM,IAAI,MAAM;gBAClB;gBAEA,OAAO;oBACL,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACjB;YACF;QACF;KACD;IACD,SAAS;QACP,UAAU;IACZ;IACA,OAAO;QACL,QAAQ;IACV;IACA,WAAW;QACT,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACvB,IAAI,MAAM;gBACR,MAAM,EAAE,GAAG,KAAK,EAAE;YACpB;YACA,OAAO;QACT;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9B,IAAI,QAAQ,IAAI,EAAE;gBAChB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC5B;YACA,OAAO;QACT;IACF;AACF"}},
|
||||
{"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/api/user/profile/route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from \"next/server\"\nimport { getServerSession } from \"next-auth\"\nimport { authOptions } from \"@/lib/auth\"\nimport { prisma } from \"@/lib/prisma\"\n\nexport async function GET(req: NextRequest) {\n try {\n const session = await getServerSession(authOptions)\n\n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n // 获取用户信息\n const user = await prisma.user.findUnique({\n where: { id: session.user.id },\n select: {\n id: true,\n email: true,\n name: true,\n createdAt: true,\n updatedAt: true,\n }\n })\n\n if (!user) {\n return NextResponse.json({ error: \"用户不存在\" }, { status: 404 })\n }\n\n // 获取用户拥有的家族树数量\n const ownedTreesCount = await prisma.familyTree.count({\n where: { ownerId: session.user.id }\n })\n\n // 获取用户作为协作者的家族树\n const collaborations = await prisma.treeCollaborator.findMany({\n where: { userId: session.user.id },\n include: {\n tree: {\n select: {\n id: true,\n name: true,\n }\n }\n }\n })\n\n return NextResponse.json({\n user: {\n ...user,\n ownedTreesCount,\n collaborations: collaborations.map((c) => ({\n treeId: c.tree.id,\n treeName: c.tree.name,\n role: c.role,\n }))\n }\n })\n } catch (error) {\n console.error(\"获取用户信息失败:\", error)\n return NextResponse.json(\n { error: \"获取用户信息失败\" },\n { status: 500 }\n )\n }\n}\n"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;;;;;AAEO,eAAe,IAAI,GAAgB;IACxC,IAAI;QACF,MAAM,UAAU,MAAM,IAAA,oaAAgB,EAAC,mLAAW;QAElD,IAAI,CAAC,SAAS,MAAM,IAAI;YACtB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAM,GAAG;gBAAE,QAAQ;YAAI;QAC3D;QAEA,SAAS;QACT,MAAM,OAAO,MAAM,gLAAM,CAAC,IAAI,CAAC,UAAU,CAAC;YACxC,OAAO;gBAAE,IAAI,QAAQ,IAAI,CAAC,EAAE;YAAC;YAC7B,QAAQ;gBACN,IAAI;gBACJ,OAAO;gBACP,MAAM;gBACN,WAAW;gBACX,WAAW;YACb;QACF;QAEA,IAAI,CAAC,MAAM;YACT,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAQ,GAAG;gBAAE,QAAQ;YAAI;QAC7D;QAEA,eAAe;QACf,MAAM,kBAAkB,MAAM,gLAAM,CAAC,UAAU,CAAC,KAAK,CAAC;YACpD,OAAO;gBAAE,SAAS,QAAQ,IAAI,CAAC,EAAE;YAAC;QACpC;QAEA,gBAAgB;QAChB,MAAM,iBAAiB,MAAM,gLAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAC5D,OAAO;gBAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;YAAC;YACjC,SAAS;gBACP,MAAM;oBACJ,QAAQ;wBACN,IAAI;wBACJ,MAAM;oBACR;gBACF;YACF;QACF;QAEA,OAAO,sUAAY,CAAC,IAAI,CAAC;YACvB,MAAM;gBACJ,GAAG,IAAI;gBACP;gBACA,gBAAgB,eAAe,GAAG,CAAC,CAAC,IAAM,CAAC;wBACzC,QAAQ,EAAE,IAAI,CAAC,EAAE;wBACjB,UAAU,EAAE,IAAI,CAAC,IAAI;wBACrB,MAAM,EAAE,IAAI;oBACd,CAAC;YACH;QACF;IACF,EAAE,OAAO,OAAO;QACd,QAAQ,KAAK,CAAC,aAAa;QAC3B,OAAO,sUAAY,CAAC,IAAI,CACtB;YAAE,OAAO;QAAW,GACpB;YAAE,QAAQ;QAAI;IAElB;AACF"}}]
|
||||
}
|
||||
@@ -0,0 +1,455 @@
|
||||
module.exports = [
|
||||
"[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/after-task-async-storage.external.js", () => require("next/dist/server/app-render/after-task-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/util [external] (util, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("util", () => require("util"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/url [external] (url, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("url", () => require("url"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/http [external] (http, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("http", () => require("http"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("crypto", () => require("crypto"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/assert [external] (assert, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("assert", () => require("assert"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/querystring [external] (querystring, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("querystring", () => require("querystring"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/buffer [external] (buffer, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("buffer", () => require("buffer"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/zlib [external] (zlib, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("zlib", () => require("zlib"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/https [external] (https, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("https", () => require("https"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/events [external] (events, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("events", () => require("events"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/@prisma/client [external] (@prisma/client, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("@prisma/client", () => require("@prisma/client"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"prisma",
|
||||
()=>prisma
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs)");
|
||||
;
|
||||
const globalForPrisma = globalThis;
|
||||
const prisma = globalForPrisma.prisma ?? new __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["PrismaClient"]();
|
||||
if ("TURBOPACK compile-time truthy", 1) globalForPrisma.prisma = prisma;
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"authOptions",
|
||||
()=>authOptions
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/bcryptjs@3.0.3/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
;
|
||||
;
|
||||
;
|
||||
const authOptions = {
|
||||
providers: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
name: "credentials",
|
||||
credentials: {
|
||||
email: {
|
||||
label: "Email",
|
||||
type: "email"
|
||||
},
|
||||
password: {
|
||||
label: "Password",
|
||||
type: "password"
|
||||
}
|
||||
},
|
||||
async authorize (credentials) {
|
||||
if (!credentials?.email || !credentials?.password) {
|
||||
throw new Error("请输入邮箱和密码");
|
||||
}
|
||||
const user = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].user.findUnique({
|
||||
where: {
|
||||
email: credentials.email
|
||||
}
|
||||
});
|
||||
if (!user || !user.password) {
|
||||
throw new Error("用户不存在");
|
||||
}
|
||||
const isValid = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].compare(credentials.password, user.password);
|
||||
if (!isValid) {
|
||||
throw new Error("密码错误");
|
||||
}
|
||||
return {
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
name: user.name
|
||||
};
|
||||
}
|
||||
})
|
||||
],
|
||||
session: {
|
||||
strategy: "jwt"
|
||||
},
|
||||
pages: {
|
||||
signIn: "/auth/signin"
|
||||
},
|
||||
callbacks: {
|
||||
async jwt ({ token, user }) {
|
||||
if (user) {
|
||||
token.id = user.id;
|
||||
}
|
||||
return token;
|
||||
},
|
||||
async session ({ session, token }) {
|
||||
if (session.user) {
|
||||
session.user.id = token.id;
|
||||
}
|
||||
return session;
|
||||
}
|
||||
}
|
||||
};
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/lib/permissions.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"checkPermission",
|
||||
()=>checkPermission,
|
||||
"requireAuth",
|
||||
()=>requireAuth
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs)");
|
||||
;
|
||||
;
|
||||
async function checkPermission(userId, treeId, requiredRole = __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["Role"].VIEWER) {
|
||||
// 检查是否是所有者
|
||||
const tree = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyTree.findFirst({
|
||||
where: {
|
||||
id: treeId,
|
||||
ownerId: userId
|
||||
}
|
||||
});
|
||||
if (tree) {
|
||||
return {
|
||||
hasPermission: true,
|
||||
role: __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["Role"].OWNER
|
||||
};
|
||||
}
|
||||
// 检查协作者权限
|
||||
const collaborator = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].treeCollaborator.findFirst({
|
||||
where: {
|
||||
treeId,
|
||||
userId
|
||||
}
|
||||
});
|
||||
if (!collaborator) {
|
||||
return {
|
||||
hasPermission: false,
|
||||
role: null
|
||||
};
|
||||
}
|
||||
const roleHierarchy = {
|
||||
[__TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["Role"].OWNER]: 3,
|
||||
[__TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["Role"].EDITOR]: 2,
|
||||
[__TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["Role"].VIEWER]: 1
|
||||
};
|
||||
const hasPermission = roleHierarchy[collaborator.role] >= roleHierarchy[requiredRole];
|
||||
return {
|
||||
hasPermission,
|
||||
role: collaborator.role
|
||||
};
|
||||
}
|
||||
async function requireAuth(userId) {
|
||||
if (!userId) {
|
||||
throw new Error("未授权");
|
||||
}
|
||||
return userId;
|
||||
}
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/api/trees/[treeId]/members/[memberId]/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"DELETE",
|
||||
()=>DELETE,
|
||||
"GET",
|
||||
()=>GET,
|
||||
"PATCH",
|
||||
()=>PATCH
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/server.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$permissions$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/permissions.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs)");
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
async function GET(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
}, {
|
||||
status: 401
|
||||
});
|
||||
}
|
||||
const { treeId, memberId } = await params;
|
||||
// 检查权限
|
||||
const { hasPermission } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$permissions$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["checkPermission"])(session.user.id, treeId);
|
||||
if (!hasPermission) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "无权访问此家族树"
|
||||
}, {
|
||||
status: 403
|
||||
});
|
||||
}
|
||||
const member = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findFirst({
|
||||
where: {
|
||||
id: memberId,
|
||||
treeId
|
||||
}
|
||||
});
|
||||
if (!member) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "成员不存在"
|
||||
}, {
|
||||
status: 404
|
||||
});
|
||||
}
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
member
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("获取成员失败:", error);
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "获取成员失败"
|
||||
}, {
|
||||
status: 500
|
||||
});
|
||||
}
|
||||
}
|
||||
async function PATCH(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
}, {
|
||||
status: 401
|
||||
});
|
||||
}
|
||||
const { treeId, memberId } = await params;
|
||||
// 检查权限(需要 EDITOR 权限)
|
||||
const { hasPermission } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$permissions$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["checkPermission"])(session.user.id, treeId, __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["Role"].EDITOR);
|
||||
if (!hasPermission) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "无权限修改成员"
|
||||
}, {
|
||||
status: 403
|
||||
});
|
||||
}
|
||||
const body = await req.json();
|
||||
// 检查成员是否存在
|
||||
const existingMember = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findFirst({
|
||||
where: {
|
||||
id: memberId,
|
||||
treeId
|
||||
}
|
||||
});
|
||||
if (!existingMember) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "成员不存在"
|
||||
}, {
|
||||
status: 404
|
||||
});
|
||||
}
|
||||
const member = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.update({
|
||||
where: {
|
||||
id: memberId
|
||||
},
|
||||
data: {
|
||||
...body,
|
||||
updatedAt: new Date()
|
||||
}
|
||||
});
|
||||
// 记录操作日志
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].activityLog.create({
|
||||
data: {
|
||||
treeId,
|
||||
userId: session.user.id,
|
||||
action: 'UPDATE',
|
||||
entityType: 'MEMBER',
|
||||
entityId: member.id,
|
||||
entityName: member.fullName,
|
||||
changes: body
|
||||
}
|
||||
});
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
member
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("更新成员失败:", error);
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "更新成员失败"
|
||||
}, {
|
||||
status: 500
|
||||
});
|
||||
}
|
||||
}
|
||||
async function DELETE(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
}, {
|
||||
status: 401
|
||||
});
|
||||
}
|
||||
const { treeId, memberId } = await params;
|
||||
// 检查权限(需要 EDITOR 权限)
|
||||
const { hasPermission } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$permissions$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["checkPermission"])(session.user.id, treeId, __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["Role"].EDITOR);
|
||||
if (!hasPermission) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "无权限删除成员"
|
||||
}, {
|
||||
status: 403
|
||||
});
|
||||
}
|
||||
// 检查成员是否存在
|
||||
const existingMember = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.findFirst({
|
||||
where: {
|
||||
id: memberId,
|
||||
treeId
|
||||
}
|
||||
});
|
||||
if (!existingMember) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "成员不存在"
|
||||
}, {
|
||||
status: 404
|
||||
});
|
||||
}
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyMember.delete({
|
||||
where: {
|
||||
id: memberId
|
||||
}
|
||||
});
|
||||
// 记录操作日志
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].activityLog.create({
|
||||
data: {
|
||||
treeId,
|
||||
userId: session.user.id,
|
||||
action: 'DELETE',
|
||||
entityType: 'MEMBER',
|
||||
entityId: memberId,
|
||||
entityName: existingMember.fullName
|
||||
}
|
||||
});
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
success: true
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("删除成员失败:", error);
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "删除成员失败"
|
||||
}, {
|
||||
status: 500
|
||||
});
|
||||
}
|
||||
}
|
||||
}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=%5Broot-of-the-server%5D__a8e2023b._.js.map
|
||||
File diff suppressed because one or more lines are too long
@@ -127,7 +127,7 @@ __turbopack_context__.s([
|
||||
"authOptions",
|
||||
()=>authOptions
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/bcryptjs@3.0.3/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
;
|
||||
@@ -135,7 +135,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch
|
||||
;
|
||||
const authOptions = {
|
||||
providers: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
name: "credentials",
|
||||
credentials: {
|
||||
email: {
|
||||
@@ -255,14 +255,18 @@ async function requireAuth(userId) {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"DELETE",
|
||||
()=>DELETE,
|
||||
"GET",
|
||||
()=>GET
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/server.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$permissions$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/permissions.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs)");
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
@@ -270,7 +274,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch
|
||||
;
|
||||
async function GET(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
@@ -281,11 +285,11 @@ async function GET(req, { params }) {
|
||||
const { treeId } = await params;
|
||||
const { searchParams } = new URL(req.url);
|
||||
const limit = parseInt(searchParams.get('limit') || '50');
|
||||
// 检查权限
|
||||
// 检查权限(所有有权限访问该家族树的人都能查看操作日志)
|
||||
const { hasPermission } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$permissions$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["checkPermission"])(session.user.id, treeId);
|
||||
if (!hasPermission) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "无权访问此家族树"
|
||||
error: "无权访问此家族树的操作日志"
|
||||
}, {
|
||||
status: 403
|
||||
});
|
||||
@@ -320,6 +324,46 @@ async function GET(req, { params }) {
|
||||
});
|
||||
}
|
||||
}
|
||||
async function DELETE(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
}, {
|
||||
status: 401
|
||||
});
|
||||
}
|
||||
const { treeId } = await params;
|
||||
// 检查权限(需要 OWNER 权限才能清空日志)
|
||||
const { hasPermission, role } = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$permissions$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["checkPermission"])(session.user.id, treeId, __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["Role"].OWNER);
|
||||
if (!hasPermission || role !== __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["Role"].OWNER) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "只有家族树所有者才能清空操作日志"
|
||||
}, {
|
||||
status: 403
|
||||
});
|
||||
}
|
||||
// 删除该家族树的所有日志
|
||||
const result = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].activityLog.deleteMany({
|
||||
where: {
|
||||
treeId
|
||||
}
|
||||
});
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
success: true,
|
||||
deletedCount: result.count,
|
||||
message: `已清空 ${result.count} 条操作日志`
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("清空活动日志失败:", error);
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "清空活动日志失败"
|
||||
}, {
|
||||
status: 500
|
||||
});
|
||||
}
|
||||
}
|
||||
}),
|
||||
];
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client'\n\nconst globalForPrisma = globalThis as unknown as {\n prisma: PrismaClient | undefined\n}\n\nexport const prisma = globalForPrisma.prisma ?? new PrismaClient()\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"names":[],"mappings":";;;;AAAA;;AAEA,MAAM,kBAAkB;AAIjB,MAAM,SAAS,gBAAgB,MAAM,IAAI,IAAI,6IAAY;AAEhE,wCAA2C,gBAAgB,MAAM,GAAG"}},
|
||||
{"offset": {"line": 125, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/auth.ts"],"sourcesContent":["import type { NextAuthOptions } from \"next-auth\"\nimport CredentialsProvider from \"next-auth/providers/credentials\"\nimport { prisma } from \"./prisma\"\nimport bcrypt from \"bcryptjs\"\n\nexport const authOptions: NextAuthOptions = {\n providers: [\n CredentialsProvider({\n name: \"credentials\",\n credentials: {\n email: { label: \"Email\", type: \"email\" },\n password: { label: \"Password\", type: \"password\" }\n },\n async authorize(credentials) {\n if (!credentials?.email || !credentials?.password) {\n throw new Error(\"请输入邮箱和密码\")\n }\n\n const user = await prisma.user.findUnique({\n where: { email: credentials.email }\n })\n\n if (!user || !user.password) {\n throw new Error(\"用户不存在\")\n }\n\n const isValid = await bcrypt.compare(credentials.password, user.password)\n\n if (!isValid) {\n throw new Error(\"密码错误\")\n }\n\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n }\n }\n })\n ],\n session: {\n strategy: \"jwt\"\n },\n pages: {\n signIn: \"/auth/signin\",\n },\n callbacks: {\n async jwt({ token, user }) {\n if (user) {\n token.id = user.id\n }\n return token\n },\n async session({ session, token }) {\n if (session.user) {\n session.user.id = token.id as string\n }\n return session\n }\n }\n}\n"],"names":[],"mappings":";;;;AACA;AACA;AACA;;;;AAEO,MAAM,cAA+B;IAC1C,WAAW;QACT,IAAA,0cAAmB,EAAC;YAClB,MAAM;YACN,aAAa;gBACX,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YAClD;YACA,MAAM,WAAU,WAAW;gBACzB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU;oBACjD,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,OAAO,MAAM,gLAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACxC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAC;gBACpC;gBAEA,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC3B,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,UAAU,MAAM,0PAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,EAAE,KAAK,QAAQ;gBAExE,IAAI,CAAC,SAAS;oBACZ,MAAM,IAAI,MAAM;gBAClB;gBAEA,OAAO;oBACL,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACjB;YACF;QACF;KACD;IACD,SAAS;QACP,UAAU;IACZ;IACA,OAAO;QACL,QAAQ;IACV;IACA,WAAW;QACT,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACvB,IAAI,MAAM;gBACR,MAAM,EAAE,GAAG,KAAK,EAAE;YACpB;YACA,OAAO;QACT;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9B,IAAI,QAAQ,IAAI,EAAE;gBAChB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC5B;YACA,OAAO;QACT;IACF;AACF"}},
|
||||
{"offset": {"line": 125, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/auth.ts"],"sourcesContent":["import type { NextAuthOptions } from \"next-auth\"\nimport CredentialsProvider from \"next-auth/providers/credentials\"\nimport { prisma } from \"./prisma\"\nimport bcrypt from \"bcryptjs\"\n\nexport const authOptions: NextAuthOptions = {\n providers: [\n CredentialsProvider({\n name: \"credentials\",\n credentials: {\n email: { label: \"Email\", type: \"email\" },\n password: { label: \"Password\", type: \"password\" }\n },\n async authorize(credentials) {\n if (!credentials?.email || !credentials?.password) {\n throw new Error(\"请输入邮箱和密码\")\n }\n\n const user = await prisma.user.findUnique({\n where: { email: credentials.email }\n })\n\n if (!user || !user.password) {\n throw new Error(\"用户不存在\")\n }\n\n const isValid = await bcrypt.compare(credentials.password, user.password)\n\n if (!isValid) {\n throw new Error(\"密码错误\")\n }\n\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n }\n }\n })\n ],\n session: {\n strategy: \"jwt\"\n },\n pages: {\n signIn: \"/auth/signin\",\n },\n callbacks: {\n async jwt({ token, user }) {\n if (user) {\n token.id = user.id\n }\n return token\n },\n async session({ session, token }) {\n if (session.user) {\n session.user.id = token.id as string\n }\n return session\n }\n }\n}\n"],"names":[],"mappings":";;;;AACA;AACA;AACA;;;;AAEO,MAAM,cAA+B;IAC1C,WAAW;QACT,IAAA,8aAAmB,EAAC;YAClB,MAAM;YACN,aAAa;gBACX,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YAClD;YACA,MAAM,WAAU,WAAW;gBACzB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU;oBACjD,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,OAAO,MAAM,gLAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACxC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAC;gBACpC;gBAEA,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC3B,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,UAAU,MAAM,0PAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,EAAE,KAAK,QAAQ;gBAExE,IAAI,CAAC,SAAS;oBACZ,MAAM,IAAI,MAAM;gBAClB;gBAEA,OAAO;oBACL,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACjB;YACF;QACF;KACD;IACD,SAAS;QACP,UAAU;IACZ;IACA,OAAO;QACL,QAAQ;IACV;IACA,WAAW;QACT,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACvB,IAAI,MAAM;gBACR,MAAM,EAAE,GAAG,KAAK,EAAE;YACpB;YACA,OAAO;QACT;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9B,IAAI,QAAQ,IAAI,EAAE;gBAChB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC5B;YACA,OAAO;QACT;IACF;AACF"}},
|
||||
{"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/permissions.ts"],"sourcesContent":["import { prisma } from \"./prisma\"\nimport { Role } from \"@prisma/client\"\n\nexport async function checkPermission(\n userId: string,\n treeId: string,\n requiredRole: Role = Role.VIEWER\n) {\n // 检查是否是所有者\n const tree = await prisma.familyTree.findFirst({\n where: {\n id: treeId,\n ownerId: userId\n }\n })\n\n if (tree) {\n return { hasPermission: true, role: Role.OWNER }\n }\n\n // 检查协作者权限\n const collaborator = await prisma.treeCollaborator.findFirst({\n where: {\n treeId,\n userId\n }\n })\n\n if (!collaborator) {\n return { hasPermission: false, role: null }\n }\n\n const roleHierarchy = {\n [Role.OWNER]: 3,\n [Role.EDITOR]: 2,\n [Role.VIEWER]: 1\n }\n\n const hasPermission = roleHierarchy[collaborator.role] >= roleHierarchy[requiredRole]\n\n return { hasPermission, role: collaborator.role }\n}\n\nexport async function requireAuth(userId: string | undefined) {\n if (!userId) {\n throw new Error(\"未授权\")\n }\n return userId\n}\n"],"names":[],"mappings":";;;;;;AAAA;AACA;;;AAEO,eAAe,gBACpB,MAAc,EACd,MAAc,EACd,eAAqB,qIAAI,CAAC,MAAM;IAEhC,WAAW;IACX,MAAM,OAAO,MAAM,gLAAM,CAAC,UAAU,CAAC,SAAS,CAAC;QAC7C,OAAO;YACL,IAAI;YACJ,SAAS;QACX;IACF;IAEA,IAAI,MAAM;QACR,OAAO;YAAE,eAAe;YAAM,MAAM,qIAAI,CAAC,KAAK;QAAC;IACjD;IAEA,UAAU;IACV,MAAM,eAAe,MAAM,gLAAM,CAAC,gBAAgB,CAAC,SAAS,CAAC;QAC3D,OAAO;YACL;YACA;QACF;IACF;IAEA,IAAI,CAAC,cAAc;QACjB,OAAO;YAAE,eAAe;YAAO,MAAM;QAAK;IAC5C;IAEA,MAAM,gBAAgB;QACpB,CAAC,qIAAI,CAAC,KAAK,CAAC,EAAE;QACd,CAAC,qIAAI,CAAC,MAAM,CAAC,EAAE;QACf,CAAC,qIAAI,CAAC,MAAM,CAAC,EAAE;IACjB;IAEA,MAAM,gBAAgB,aAAa,CAAC,aAAa,IAAI,CAAC,IAAI,aAAa,CAAC,aAAa;IAErF,OAAO;QAAE;QAAe,MAAM,aAAa,IAAI;IAAC;AAClD;AAEO,eAAe,YAAY,MAA0B;IAC1D,IAAI,CAAC,QAAQ;QACX,MAAM,IAAI,MAAM;IAClB;IACA,OAAO;AACT"}},
|
||||
{"offset": {"line": 256, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/api/trees/%5BtreeId%5D/activity-logs/route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from \"next/server\"\nimport { getServerSession } from \"next-auth\"\nimport { authOptions } from \"@/lib/auth\"\nimport { prisma } from \"@/lib/prisma\"\nimport { checkPermission } from \"@/lib/permissions\"\n\n// 获取家族树的活动日志\nexport async function GET(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId } = await params\n const { searchParams } = new URL(req.url)\n const limit = parseInt(searchParams.get('limit') || '50')\n\n // 检查权限\n const { hasPermission } = await checkPermission(session.user.id, treeId)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权访问此家族树\" }, { status: 403 })\n }\n\n const logs = await prisma.activityLog.findMany({\n where: { treeId },\n orderBy: { timestamp: 'desc' },\n take: limit,\n include: {\n user: {\n select: {\n id: true,\n name: true,\n email: true,\n }\n }\n }\n })\n\n return NextResponse.json({ logs })\n } catch (error) {\n console.error(\"获取活动日志失败:\", error)\n return NextResponse.json(\n { error: \"获取活动日志失败\" },\n { status: 500 }\n )\n }\n}\n"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;AACA;;;;;;AAGO,eAAe,IACpB,GAAgB,EAChB,EAAE,MAAM,EAA2C;IAEnD,IAAI;QACF,MAAM,UAAU,MAAM,IAAA,gcAAgB,EAAC,mLAAW;QAElD,IAAI,CAAC,SAAS,MAAM,IAAI;YACtB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAM,GAAG;gBAAE,QAAQ;YAAI;QAC3D;QAEA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;QACzB,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG;QACxC,MAAM,QAAQ,SAAS,aAAa,GAAG,CAAC,YAAY;QAEpD,OAAO;QACP,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,8LAAe,EAAC,QAAQ,IAAI,CAAC,EAAE,EAAE;QACjE,IAAI,CAAC,eAAe;YAClB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAW,GAAG;gBAAE,QAAQ;YAAI;QAChE;QAEA,MAAM,OAAO,MAAM,gLAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC7C,OAAO;gBAAE;YAAO;YAChB,SAAS;gBAAE,WAAW;YAAO;YAC7B,MAAM;YACN,SAAS;gBACP,MAAM;oBACJ,QAAQ;wBACN,IAAI;wBACJ,MAAM;wBACN,OAAO;oBACT;gBACF;YACF;QACF;QAEA,OAAO,sUAAY,CAAC,IAAI,CAAC;YAAE;QAAK;IAClC,EAAE,OAAO,OAAO;QACd,QAAQ,KAAK,CAAC,aAAa;QAC3B,OAAO,sUAAY,CAAC,IAAI,CACtB;YAAE,OAAO;QAAW,GACpB;YAAE,QAAQ;QAAI;IAElB;AACF"}}]
|
||||
{"offset": {"line": 256, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/api/trees/%5BtreeId%5D/activity-logs/route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from \"next/server\"\nimport { getServerSession } from \"next-auth\"\nimport { authOptions } from \"@/lib/auth\"\nimport { prisma } from \"@/lib/prisma\"\nimport { checkPermission } from \"@/lib/permissions\"\nimport { Role } from \"@prisma/client\"\n\n// 获取家族树的活动日志\nexport async function GET(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId } = await params\n const { searchParams } = new URL(req.url)\n const limit = parseInt(searchParams.get('limit') || '50')\n\n // 检查权限(所有有权限访问该家族树的人都能查看操作日志)\n const { hasPermission } = await checkPermission(session.user.id, treeId)\n if (!hasPermission) {\n return NextResponse.json({ error: \"无权访问此家族树的操作日志\" }, { status: 403 })\n }\n\n const logs = await prisma.activityLog.findMany({\n where: { treeId },\n orderBy: { timestamp: 'desc' },\n take: limit,\n include: {\n user: {\n select: {\n id: true,\n name: true,\n email: true,\n }\n }\n }\n })\n\n return NextResponse.json({ logs })\n } catch (error) {\n console.error(\"获取活动日志失败:\", error)\n return NextResponse.json(\n { error: \"获取活动日志失败\" },\n { status: 500 }\n )\n }\n}\n\n// 清空家族树的活动日志\nexport async function DELETE(\n req: NextRequest,\n { params }: { params: Promise<{ treeId: string }> }\n) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { treeId } = await params\n\n // 检查权限(需要 OWNER 权限才能清空日志)\n const { hasPermission, role } = await checkPermission(session.user.id, treeId, Role.OWNER)\n if (!hasPermission || role !== Role.OWNER) {\n return NextResponse.json({ error: \"只有家族树所有者才能清空操作日志\" }, { status: 403 })\n }\n\n // 删除该家族树的所有日志\n const result = await prisma.activityLog.deleteMany({\n where: { treeId }\n })\n\n return NextResponse.json({ \n success: true, \n deletedCount: result.count,\n message: `已清空 ${result.count} 条操作日志` \n })\n } catch (error) {\n console.error(\"清空活动日志失败:\", error)\n return NextResponse.json(\n { error: \"清空活动日志失败\" },\n { status: 500 }\n )\n }\n}\n"],"names":[],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;;;;;;;AAGO,eAAe,IACpB,GAAgB,EAChB,EAAE,MAAM,EAA2C;IAEnD,IAAI;QACF,MAAM,UAAU,MAAM,IAAA,oaAAgB,EAAC,mLAAW;QAElD,IAAI,CAAC,SAAS,MAAM,IAAI;YACtB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAM,GAAG;gBAAE,QAAQ;YAAI;QAC3D;QAEA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;QACzB,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG;QACxC,MAAM,QAAQ,SAAS,aAAa,GAAG,CAAC,YAAY;QAEpD,8BAA8B;QAC9B,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,IAAA,8LAAe,EAAC,QAAQ,IAAI,CAAC,EAAE,EAAE;QACjE,IAAI,CAAC,eAAe;YAClB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAgB,GAAG;gBAAE,QAAQ;YAAI;QACrE;QAEA,MAAM,OAAO,MAAM,gLAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC7C,OAAO;gBAAE;YAAO;YAChB,SAAS;gBAAE,WAAW;YAAO;YAC7B,MAAM;YACN,SAAS;gBACP,MAAM;oBACJ,QAAQ;wBACN,IAAI;wBACJ,MAAM;wBACN,OAAO;oBACT;gBACF;YACF;QACF;QAEA,OAAO,sUAAY,CAAC,IAAI,CAAC;YAAE;QAAK;IAClC,EAAE,OAAO,OAAO;QACd,QAAQ,KAAK,CAAC,aAAa;QAC3B,OAAO,sUAAY,CAAC,IAAI,CACtB;YAAE,OAAO;QAAW,GACpB;YAAE,QAAQ;QAAI;IAElB;AACF;AAGO,eAAe,OACpB,GAAgB,EAChB,EAAE,MAAM,EAA2C;IAEnD,IAAI;QACF,MAAM,UAAU,MAAM,IAAA,oaAAgB,EAAC,mLAAW;QAElD,IAAI,CAAC,SAAS,MAAM,IAAI;YACtB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAM,GAAG;gBAAE,QAAQ;YAAI;QAC3D;QAEA,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM;QAEzB,0BAA0B;QAC1B,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,GAAG,MAAM,IAAA,8LAAe,EAAC,QAAQ,IAAI,CAAC,EAAE,EAAE,QAAQ,qIAAI,CAAC,KAAK;QACzF,IAAI,CAAC,iBAAiB,SAAS,qIAAI,CAAC,KAAK,EAAE;YACzC,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAmB,GAAG;gBAAE,QAAQ;YAAI;QACxE;QAEA,cAAc;QACd,MAAM,SAAS,MAAM,gLAAM,CAAC,WAAW,CAAC,UAAU,CAAC;YACjD,OAAO;gBAAE;YAAO;QAClB;QAEA,OAAO,sUAAY,CAAC,IAAI,CAAC;YACvB,SAAS;YACT,cAAc,OAAO,KAAK;YAC1B,SAAS,CAAC,IAAI,EAAE,OAAO,KAAK,CAAC,MAAM,CAAC;QACtC;IACF,EAAE,OAAO,OAAO;QACd,QAAQ,KAAK,CAAC,aAAa;QAC3B,OAAO,sUAAY,CAAC,IAAI,CACtB;YAAE,OAAO;QAAW,GACpB;YAAE,QAAQ;QAAI;IAElB;AACF"}}]
|
||||
}
|
||||
@@ -127,7 +127,7 @@ __turbopack_context__.s([
|
||||
"authOptions",
|
||||
()=>authOptions
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/bcryptjs@3.0.3/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
;
|
||||
@@ -135,7 +135,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch
|
||||
;
|
||||
const authOptions = {
|
||||
providers: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
name: "credentials",
|
||||
credentials: {
|
||||
email: {
|
||||
@@ -203,7 +203,7 @@ __turbopack_context__.s([
|
||||
()=>POST
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/server.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js [app-route] (ecmascript) <export * as z>");
|
||||
@@ -218,7 +218,7 @@ const createTreeSchema = __TURBOPACK__imported__module__$5b$project$5d2f$Documen
|
||||
});
|
||||
async function GET(req) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
@@ -226,20 +226,10 @@ async function GET(req) {
|
||||
status: 401
|
||||
});
|
||||
}
|
||||
const trees = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyTree.findMany({
|
||||
// 1. 查询拥有的家族树
|
||||
const ownedTrees = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyTree.findMany({
|
||||
where: {
|
||||
OR: [
|
||||
{
|
||||
ownerId: session.user.id
|
||||
},
|
||||
{
|
||||
collaborators: {
|
||||
some: {
|
||||
userId: session.user.id
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
ownerId: session.user.id
|
||||
},
|
||||
include: {
|
||||
owner: {
|
||||
@@ -260,6 +250,59 @@ async function GET(req) {
|
||||
updatedAt: 'desc'
|
||||
}
|
||||
});
|
||||
// 2. 查询协作的家族树
|
||||
const collaboratedRelations = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].treeCollaborator.findMany({
|
||||
where: {
|
||||
userId: session.user.id
|
||||
},
|
||||
include: {
|
||||
tree: {
|
||||
include: {
|
||||
owner: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
email: true
|
||||
}
|
||||
},
|
||||
_count: {
|
||||
select: {
|
||||
members: true,
|
||||
collaborators: true
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
orderBy: {
|
||||
invitedAt: 'desc'
|
||||
}
|
||||
});
|
||||
// 3. 格式化数据
|
||||
const formattedOwnedTrees = ownedTrees.map((tree)=>({
|
||||
...tree,
|
||||
currentUserRole: "OWNER"
|
||||
}));
|
||||
const formattedCollaboratedTrees = collaboratedRelations.map((relation)=>({
|
||||
...relation.tree,
|
||||
currentUserRole: relation.role
|
||||
}));
|
||||
// 4. 合并列表
|
||||
const trees = [
|
||||
...formattedOwnedTrees,
|
||||
...formattedCollaboratedTrees
|
||||
];
|
||||
console.log('🌳 GET /api/trees 返回数据:', {
|
||||
userId: session.user.id,
|
||||
ownedCount: formattedOwnedTrees.length,
|
||||
collaboratedCount: formattedCollaboratedTrees.length,
|
||||
totalCount: trees.length,
|
||||
trees: trees.map((t)=>({
|
||||
id: t.id,
|
||||
name: t.name,
|
||||
role: t.currentUserRole
|
||||
}))
|
||||
});
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
trees
|
||||
});
|
||||
@@ -274,7 +317,7 @@ async function GET(req) {
|
||||
}
|
||||
async function POST(req) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,285 @@
|
||||
module.exports = [
|
||||
"[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/after-task-async-storage.external.js", () => require("next/dist/server/app-render/after-task-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/util [external] (util, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("util", () => require("util"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/url [external] (url, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("url", () => require("url"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/http [external] (http, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("http", () => require("http"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("crypto", () => require("crypto"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/assert [external] (assert, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("assert", () => require("assert"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/querystring [external] (querystring, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("querystring", () => require("querystring"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/buffer [external] (buffer, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("buffer", () => require("buffer"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/zlib [external] (zlib, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("zlib", () => require("zlib"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/https [external] (https, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("https", () => require("https"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/events [external] (events, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("events", () => require("events"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/@prisma/client [external] (@prisma/client, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("@prisma/client", () => require("@prisma/client"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"prisma",
|
||||
()=>prisma
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs)");
|
||||
;
|
||||
const globalForPrisma = globalThis;
|
||||
const prisma = globalForPrisma.prisma ?? new __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["PrismaClient"]();
|
||||
if ("TURBOPACK compile-time truthy", 1) globalForPrisma.prisma = prisma;
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"authOptions",
|
||||
()=>authOptions
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/bcryptjs@3.0.3/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
;
|
||||
;
|
||||
;
|
||||
const authOptions = {
|
||||
providers: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
name: "credentials",
|
||||
credentials: {
|
||||
email: {
|
||||
label: "Email",
|
||||
type: "email"
|
||||
},
|
||||
password: {
|
||||
label: "Password",
|
||||
type: "password"
|
||||
}
|
||||
},
|
||||
async authorize (credentials) {
|
||||
if (!credentials?.email || !credentials?.password) {
|
||||
throw new Error("请输入邮箱和密码");
|
||||
}
|
||||
const user = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].user.findUnique({
|
||||
where: {
|
||||
email: credentials.email
|
||||
}
|
||||
});
|
||||
if (!user || !user.password) {
|
||||
throw new Error("用户不存在");
|
||||
}
|
||||
const isValid = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].compare(credentials.password, user.password);
|
||||
if (!isValid) {
|
||||
throw new Error("密码错误");
|
||||
}
|
||||
return {
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
name: user.name
|
||||
};
|
||||
}
|
||||
})
|
||||
],
|
||||
session: {
|
||||
strategy: "jwt"
|
||||
},
|
||||
pages: {
|
||||
signIn: "/auth/signin"
|
||||
},
|
||||
callbacks: {
|
||||
async jwt ({ token, user }) {
|
||||
if (user) {
|
||||
token.id = user.id;
|
||||
}
|
||||
return token;
|
||||
},
|
||||
async session ({ session, token }) {
|
||||
if (session.user) {
|
||||
session.user.id = token.id;
|
||||
}
|
||||
return session;
|
||||
}
|
||||
}
|
||||
};
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/api/user/activity-logs/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"GET",
|
||||
()=>GET
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/server.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
async function GET(req) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
}, {
|
||||
status: 401
|
||||
});
|
||||
}
|
||||
const { searchParams } = new URL(req.url);
|
||||
const limit = parseInt(searchParams.get('limit') || '50');
|
||||
// 1. 查找用户拥有或协作的所有家族树 ID
|
||||
const ownedTrees = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyTree.findMany({
|
||||
where: {
|
||||
ownerId: session.user.id
|
||||
},
|
||||
select: {
|
||||
id: true
|
||||
}
|
||||
});
|
||||
const collaboratedTrees = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].treeCollaborator.findMany({
|
||||
where: {
|
||||
userId: session.user.id
|
||||
},
|
||||
select: {
|
||||
treeId: true
|
||||
}
|
||||
});
|
||||
const treeIds = [
|
||||
...ownedTrees.map((t)=>t.id),
|
||||
...collaboratedTrees.map((c)=>c.treeId)
|
||||
];
|
||||
// 2. 查询这些家族树的日志
|
||||
const logs = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].activityLog.findMany({
|
||||
where: {
|
||||
treeId: {
|
||||
in: treeIds
|
||||
}
|
||||
},
|
||||
orderBy: {
|
||||
timestamp: 'desc'
|
||||
},
|
||||
take: limit,
|
||||
include: {
|
||||
user: {
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
email: true
|
||||
}
|
||||
},
|
||||
tree: {
|
||||
select: {
|
||||
name: true
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
logs
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("获取用户活动日志失败:", error);
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "获取用户活动日志失败"
|
||||
}, {
|
||||
status: 500
|
||||
});
|
||||
}
|
||||
}
|
||||
}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=%5Broot-of-the-server%5D__dc5921dc._.js.map
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"version": 3,
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client'\n\nconst globalForPrisma = globalThis as unknown as {\n prisma: PrismaClient | undefined\n}\n\nexport const prisma = globalForPrisma.prisma ?? new PrismaClient()\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"names":[],"mappings":";;;;AAAA;;AAEA,MAAM,kBAAkB;AAIjB,MAAM,SAAS,gBAAgB,MAAM,IAAI,IAAI,6IAAY;AAEhE,wCAA2C,gBAAgB,MAAM,GAAG"}},
|
||||
{"offset": {"line": 125, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/auth.ts"],"sourcesContent":["import type { NextAuthOptions } from \"next-auth\"\nimport CredentialsProvider from \"next-auth/providers/credentials\"\nimport { prisma } from \"./prisma\"\nimport bcrypt from \"bcryptjs\"\n\nexport const authOptions: NextAuthOptions = {\n providers: [\n CredentialsProvider({\n name: \"credentials\",\n credentials: {\n email: { label: \"Email\", type: \"email\" },\n password: { label: \"Password\", type: \"password\" }\n },\n async authorize(credentials) {\n if (!credentials?.email || !credentials?.password) {\n throw new Error(\"请输入邮箱和密码\")\n }\n\n const user = await prisma.user.findUnique({\n where: { email: credentials.email }\n })\n\n if (!user || !user.password) {\n throw new Error(\"用户不存在\")\n }\n\n const isValid = await bcrypt.compare(credentials.password, user.password)\n\n if (!isValid) {\n throw new Error(\"密码错误\")\n }\n\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n }\n }\n })\n ],\n session: {\n strategy: \"jwt\"\n },\n pages: {\n signIn: \"/auth/signin\",\n },\n callbacks: {\n async jwt({ token, user }) {\n if (user) {\n token.id = user.id\n }\n return token\n },\n async session({ session, token }) {\n if (session.user) {\n session.user.id = token.id as string\n }\n return session\n }\n }\n}\n"],"names":[],"mappings":";;;;AACA;AACA;AACA;;;;AAEO,MAAM,cAA+B;IAC1C,WAAW;QACT,IAAA,8aAAmB,EAAC;YAClB,MAAM;YACN,aAAa;gBACX,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YAClD;YACA,MAAM,WAAU,WAAW;gBACzB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU;oBACjD,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,OAAO,MAAM,gLAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACxC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAC;gBACpC;gBAEA,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC3B,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,UAAU,MAAM,0PAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,EAAE,KAAK,QAAQ;gBAExE,IAAI,CAAC,SAAS;oBACZ,MAAM,IAAI,MAAM;gBAClB;gBAEA,OAAO;oBACL,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACjB;YACF;QACF;KACD;IACD,SAAS;QACP,UAAU;IACZ;IACA,OAAO;QACL,QAAQ;IACV;IACA,WAAW;QACT,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACvB,IAAI,MAAM;gBACR,MAAM,EAAE,GAAG,KAAK,EAAE;YACpB;YACA,OAAO;QACT;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9B,IAAI,QAAQ,IAAI,EAAE;gBAChB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC5B;YACA,OAAO;QACT;IACF;AACF"}},
|
||||
{"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/api/user/activity-logs/route.ts"],"sourcesContent":["import { NextRequest, NextResponse } from \"next/server\"\nimport { getServerSession } from \"next-auth\"\nimport { authOptions } from \"@/lib/auth\"\nimport { prisma } from \"@/lib/prisma\"\n\n// 获取当前用户的所有相关活动日志(拥有的或参与的家族树)\nexport async function GET(req: NextRequest) {\n try {\n const session = await getServerSession(authOptions)\n \n if (!session?.user?.id) {\n return NextResponse.json({ error: \"未授权\" }, { status: 401 })\n }\n\n const { searchParams } = new URL(req.url)\n const limit = parseInt(searchParams.get('limit') || '50')\n\n // 1. 查找用户拥有或协作的所有家族树 ID\n const ownedTrees = await prisma.familyTree.findMany({\n where: { ownerId: session.user.id },\n select: { id: true }\n })\n \n const collaboratedTrees = await prisma.treeCollaborator.findMany({\n where: { userId: session.user.id },\n select: { treeId: true }\n })\n\n const treeIds = [\n ...ownedTrees.map(t => t.id),\n ...collaboratedTrees.map(c => c.treeId)\n ]\n\n // 2. 查询这些家族树的日志\n const logs = await prisma.activityLog.findMany({\n where: {\n treeId: { in: treeIds }\n },\n orderBy: { timestamp: 'desc' },\n take: limit,\n include: {\n user: {\n select: {\n id: true,\n name: true,\n email: true\n }\n },\n tree: {\n select: {\n name: true\n }\n }\n }\n })\n\n return NextResponse.json({ logs })\n } catch (error) {\n console.error(\"获取用户活动日志失败:\", error)\n return NextResponse.json(\n { error: \"获取用户活动日志失败\" },\n { status: 500 }\n )\n }\n}\n"],"names":[],"mappings":";;;;AAAA;AACA;AACA;AACA;;;;;AAGO,eAAe,IAAI,GAAgB;IACxC,IAAI;QACF,MAAM,UAAU,MAAM,IAAA,oaAAgB,EAAC,mLAAW;QAElD,IAAI,CAAC,SAAS,MAAM,IAAI;YACtB,OAAO,sUAAY,CAAC,IAAI,CAAC;gBAAE,OAAO;YAAM,GAAG;gBAAE,QAAQ;YAAI;QAC3D;QAEA,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG;QACxC,MAAM,QAAQ,SAAS,aAAa,GAAG,CAAC,YAAY;QAEpD,wBAAwB;QACxB,MAAM,aAAa,MAAM,gLAAM,CAAC,UAAU,CAAC,QAAQ,CAAC;YAClD,OAAO;gBAAE,SAAS,QAAQ,IAAI,CAAC,EAAE;YAAC;YAClC,QAAQ;gBAAE,IAAI;YAAK;QACrB;QAEA,MAAM,oBAAoB,MAAM,gLAAM,CAAC,gBAAgB,CAAC,QAAQ,CAAC;YAC/D,OAAO;gBAAE,QAAQ,QAAQ,IAAI,CAAC,EAAE;YAAC;YACjC,QAAQ;gBAAE,QAAQ;YAAK;QACzB;QAEA,MAAM,UAAU;eACX,WAAW,GAAG,CAAC,CAAA,IAAK,EAAE,EAAE;eACxB,kBAAkB,GAAG,CAAC,CAAA,IAAK,EAAE,MAAM;SACvC;QAED,gBAAgB;QAChB,MAAM,OAAO,MAAM,gLAAM,CAAC,WAAW,CAAC,QAAQ,CAAC;YAC7C,OAAO;gBACL,QAAQ;oBAAE,IAAI;gBAAQ;YACxB;YACA,SAAS;gBAAE,WAAW;YAAO;YAC7B,MAAM;YACN,SAAS;gBACP,MAAM;oBACJ,QAAQ;wBACN,IAAI;wBACJ,MAAM;wBACN,OAAO;oBACT;gBACF;gBACA,MAAM;oBACJ,QAAQ;wBACN,MAAM;oBACR;gBACF;YACF;QACF;QAEA,OAAO,sUAAY,CAAC,IAAI,CAAC;YAAE;QAAK;IAClC,EAAE,OAAO,OAAO;QACd,QAAQ,KAAK,CAAC,eAAe;QAC7B,OAAO,sUAAY,CAAC,IAAI,CACtB;YAAE,OAAO;QAAa,GACtB;YAAE,QAAQ;QAAI;IAElB;AACF"}}]
|
||||
}
|
||||
@@ -127,7 +127,7 @@ __turbopack_context__.s([
|
||||
"authOptions",
|
||||
()=>authOptions
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/bcryptjs@3.0.3/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
;
|
||||
@@ -135,7 +135,7 @@ var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$ch
|
||||
;
|
||||
const authOptions = {
|
||||
providers: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
name: "credentials",
|
||||
credentials: {
|
||||
email: {
|
||||
@@ -202,11 +202,11 @@ __turbopack_context__.s([
|
||||
"POST",
|
||||
()=>handler
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)");
|
||||
;
|
||||
;
|
||||
const handler = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
const handler = (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
;
|
||||
}),
|
||||
];
|
||||
|
||||
@@ -3,6 +3,6 @@
|
||||
"sources": [],
|
||||
"sections": [
|
||||
{"offset": {"line": 112, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/prisma.ts"],"sourcesContent":["import { PrismaClient } from '@prisma/client'\n\nconst globalForPrisma = globalThis as unknown as {\n prisma: PrismaClient | undefined\n}\n\nexport const prisma = globalForPrisma.prisma ?? new PrismaClient()\n\nif (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma\n"],"names":[],"mappings":";;;;AAAA;;AAEA,MAAM,kBAAkB;AAIjB,MAAM,SAAS,gBAAgB,MAAM,IAAI,IAAI,6IAAY;AAEhE,wCAA2C,gBAAgB,MAAM,GAAG"}},
|
||||
{"offset": {"line": 125, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/auth.ts"],"sourcesContent":["import type { NextAuthOptions } from \"next-auth\"\nimport CredentialsProvider from \"next-auth/providers/credentials\"\nimport { prisma } from \"./prisma\"\nimport bcrypt from \"bcryptjs\"\n\nexport const authOptions: NextAuthOptions = {\n providers: [\n CredentialsProvider({\n name: \"credentials\",\n credentials: {\n email: { label: \"Email\", type: \"email\" },\n password: { label: \"Password\", type: \"password\" }\n },\n async authorize(credentials) {\n if (!credentials?.email || !credentials?.password) {\n throw new Error(\"请输入邮箱和密码\")\n }\n\n const user = await prisma.user.findUnique({\n where: { email: credentials.email }\n })\n\n if (!user || !user.password) {\n throw new Error(\"用户不存在\")\n }\n\n const isValid = await bcrypt.compare(credentials.password, user.password)\n\n if (!isValid) {\n throw new Error(\"密码错误\")\n }\n\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n }\n }\n })\n ],\n session: {\n strategy: \"jwt\"\n },\n pages: {\n signIn: \"/auth/signin\",\n },\n callbacks: {\n async jwt({ token, user }) {\n if (user) {\n token.id = user.id\n }\n return token\n },\n async session({ session, token }) {\n if (session.user) {\n session.user.id = token.id as string\n }\n return session\n }\n }\n}\n"],"names":[],"mappings":";;;;AACA;AACA;AACA;;;;AAEO,MAAM,cAA+B;IAC1C,WAAW;QACT,IAAA,0cAAmB,EAAC;YAClB,MAAM;YACN,aAAa;gBACX,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YAClD;YACA,MAAM,WAAU,WAAW;gBACzB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU;oBACjD,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,OAAO,MAAM,gLAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACxC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAC;gBACpC;gBAEA,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC3B,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,UAAU,MAAM,0PAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,EAAE,KAAK,QAAQ;gBAExE,IAAI,CAAC,SAAS;oBACZ,MAAM,IAAI,MAAM;gBAClB;gBAEA,OAAO;oBACL,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACjB;YACF;QACF;KACD;IACD,SAAS;QACP,UAAU;IACZ;IACA,OAAO;QACL,QAAQ;IACV;IACA,WAAW;QACT,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACvB,IAAI,MAAM;gBACR,MAAM,EAAE,GAAG,KAAK,EAAE;YACpB;YACA,OAAO;QACT;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9B,IAAI,QAAQ,IAAI,EAAE;gBAChB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC5B;YACA,OAAO;QACT;IACF;AACF"}},
|
||||
{"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/api/auth/%5B...nextauth%5D/route.ts"],"sourcesContent":["import NextAuth from \"next-auth\"\nimport { authOptions } from \"@/lib/auth\"\n\nconst handler = NextAuth(authOptions)\n\nexport { handler as GET, handler as POST }\n"],"names":[],"mappings":";;;;;;AAAA;AACA;;;AAEA,MAAM,UAAU,IAAA,ubAAQ,EAAC,mLAAW"}}]
|
||||
{"offset": {"line": 125, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/lib/auth.ts"],"sourcesContent":["import type { NextAuthOptions } from \"next-auth\"\nimport CredentialsProvider from \"next-auth/providers/credentials\"\nimport { prisma } from \"./prisma\"\nimport bcrypt from \"bcryptjs\"\n\nexport const authOptions: NextAuthOptions = {\n providers: [\n CredentialsProvider({\n name: \"credentials\",\n credentials: {\n email: { label: \"Email\", type: \"email\" },\n password: { label: \"Password\", type: \"password\" }\n },\n async authorize(credentials) {\n if (!credentials?.email || !credentials?.password) {\n throw new Error(\"请输入邮箱和密码\")\n }\n\n const user = await prisma.user.findUnique({\n where: { email: credentials.email }\n })\n\n if (!user || !user.password) {\n throw new Error(\"用户不存在\")\n }\n\n const isValid = await bcrypt.compare(credentials.password, user.password)\n\n if (!isValid) {\n throw new Error(\"密码错误\")\n }\n\n return {\n id: user.id,\n email: user.email,\n name: user.name,\n }\n }\n })\n ],\n session: {\n strategy: \"jwt\"\n },\n pages: {\n signIn: \"/auth/signin\",\n },\n callbacks: {\n async jwt({ token, user }) {\n if (user) {\n token.id = user.id\n }\n return token\n },\n async session({ session, token }) {\n if (session.user) {\n session.user.id = token.id as string\n }\n return session\n }\n }\n}\n"],"names":[],"mappings":";;;;AACA;AACA;AACA;;;;AAEO,MAAM,cAA+B;IAC1C,WAAW;QACT,IAAA,8aAAmB,EAAC;YAClB,MAAM;YACN,aAAa;gBACX,OAAO;oBAAE,OAAO;oBAAS,MAAM;gBAAQ;gBACvC,UAAU;oBAAE,OAAO;oBAAY,MAAM;gBAAW;YAClD;YACA,MAAM,WAAU,WAAW;gBACzB,IAAI,CAAC,aAAa,SAAS,CAAC,aAAa,UAAU;oBACjD,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,OAAO,MAAM,gLAAM,CAAC,IAAI,CAAC,UAAU,CAAC;oBACxC,OAAO;wBAAE,OAAO,YAAY,KAAK;oBAAC;gBACpC;gBAEA,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE;oBAC3B,MAAM,IAAI,MAAM;gBAClB;gBAEA,MAAM,UAAU,MAAM,0PAAM,CAAC,OAAO,CAAC,YAAY,QAAQ,EAAE,KAAK,QAAQ;gBAExE,IAAI,CAAC,SAAS;oBACZ,MAAM,IAAI,MAAM;gBAClB;gBAEA,OAAO;oBACL,IAAI,KAAK,EAAE;oBACX,OAAO,KAAK,KAAK;oBACjB,MAAM,KAAK,IAAI;gBACjB;YACF;QACF;KACD;IACD,SAAS;QACP,UAAU;IACZ;IACA,OAAO;QACL,QAAQ;IACV;IACA,WAAW;QACT,MAAM,KAAI,EAAE,KAAK,EAAE,IAAI,EAAE;YACvB,IAAI,MAAM;gBACR,MAAM,EAAE,GAAG,KAAK,EAAE;YACpB;YACA,OAAO;QACT;QACA,MAAM,SAAQ,EAAE,OAAO,EAAE,KAAK,EAAE;YAC9B,IAAI,QAAQ,IAAI,EAAE;gBAChB,QAAQ,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE;YAC5B;YACA,OAAO;QACT;IACF;AACF"}},
|
||||
{"offset": {"line": 198, "column": 0}, "map": {"version":3,"sources":["file:///Users/freedak/Documents/go-new/chinese-family-tree/app/api/auth/%5B...nextauth%5D/route.ts"],"sourcesContent":["import NextAuth from \"next-auth\"\nimport { authOptions } from \"@/lib/auth\"\n\nconst handler = NextAuth(authOptions)\n\nexport { handler as GET, handler as POST }\n"],"names":[],"mappings":";;;;;;AAAA;AACA;;;AAEA,MAAM,UAAU,IAAA,2ZAAQ,EAAC,mLAAW"}}]
|
||||
}
|
||||
@@ -0,0 +1,458 @@
|
||||
module.exports = [
|
||||
"[externals]/next/dist/compiled/next-server/app-route-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-route-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-route-turbo.runtime.dev.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/compiled/@opentelemetry/api [external] (next/dist/compiled/@opentelemetry/api, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/@opentelemetry/api", () => require("next/dist/compiled/@opentelemetry/api"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/compiled/next-server/app-page-turbo.runtime.dev.js [external] (next/dist/compiled/next-server/app-page-turbo.runtime.dev.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js", () => require("next/dist/compiled/next-server/app-page-turbo.runtime.dev.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/work-unit-async-storage.external.js [external] (next/dist/server/app-render/work-unit-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/work-unit-async-storage.external.js", () => require("next/dist/server/app-render/work-unit-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/work-async-storage.external.js [external] (next/dist/server/app-render/work-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/work-async-storage.external.js", () => require("next/dist/server/app-render/work-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/shared/lib/no-fallback-error.external.js [external] (next/dist/shared/lib/no-fallback-error.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/shared/lib/no-fallback-error.external.js", () => require("next/dist/shared/lib/no-fallback-error.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/next/dist/server/app-render/after-task-async-storage.external.js [external] (next/dist/server/app-render/after-task-async-storage.external.js, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("next/dist/server/app-render/after-task-async-storage.external.js", () => require("next/dist/server/app-render/after-task-async-storage.external.js"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/util [external] (util, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("util", () => require("util"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/url [external] (url, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("url", () => require("url"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/http [external] (http, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("http", () => require("http"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/crypto [external] (crypto, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("crypto", () => require("crypto"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/assert [external] (assert, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("assert", () => require("assert"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/querystring [external] (querystring, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("querystring", () => require("querystring"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/buffer [external] (buffer, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("buffer", () => require("buffer"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/zlib [external] (zlib, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("zlib", () => require("zlib"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/https [external] (https, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("https", () => require("https"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/events [external] (events, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("events", () => require("events"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/@prisma/client [external] (@prisma/client, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("@prisma/client", () => require("@prisma/client"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"prisma",
|
||||
()=>prisma
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__ = __turbopack_context__.i("[externals]/@prisma/client [external] (@prisma/client, cjs)");
|
||||
;
|
||||
const globalForPrisma = globalThis;
|
||||
const prisma = globalForPrisma.prisma ?? new __TURBOPACK__imported__module__$5b$externals$5d2f40$prisma$2f$client__$5b$external$5d$__$2840$prisma$2f$client$2c$__cjs$29$__["PrismaClient"]();
|
||||
if ("TURBOPACK compile-time truthy", 1) globalForPrisma.prisma = prisma;
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"authOptions",
|
||||
()=>authOptions
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/providers/credentials.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/bcryptjs@3.0.3/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
;
|
||||
;
|
||||
;
|
||||
const authOptions = {
|
||||
providers: [
|
||||
(0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$providers$2f$credentials$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"])({
|
||||
name: "credentials",
|
||||
credentials: {
|
||||
email: {
|
||||
label: "Email",
|
||||
type: "email"
|
||||
},
|
||||
password: {
|
||||
label: "Password",
|
||||
type: "password"
|
||||
}
|
||||
},
|
||||
async authorize (credentials) {
|
||||
if (!credentials?.email || !credentials?.password) {
|
||||
throw new Error("请输入邮箱和密码");
|
||||
}
|
||||
const user = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].user.findUnique({
|
||||
where: {
|
||||
email: credentials.email
|
||||
}
|
||||
});
|
||||
if (!user || !user.password) {
|
||||
throw new Error("用户不存在");
|
||||
}
|
||||
const isValid = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].compare(credentials.password, user.password);
|
||||
if (!isValid) {
|
||||
throw new Error("密码错误");
|
||||
}
|
||||
return {
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
name: user.name
|
||||
};
|
||||
}
|
||||
})
|
||||
],
|
||||
session: {
|
||||
strategy: "jwt"
|
||||
},
|
||||
pages: {
|
||||
signIn: "/auth/signin"
|
||||
},
|
||||
callbacks: {
|
||||
async jwt ({ token, user }) {
|
||||
if (user) {
|
||||
token.id = user.id;
|
||||
}
|
||||
return token;
|
||||
},
|
||||
async session ({ session, token }) {
|
||||
if (session.user) {
|
||||
session.user.id = token.id;
|
||||
}
|
||||
return session;
|
||||
}
|
||||
}
|
||||
};
|
||||
}),
|
||||
"[externals]/fs [external] (fs, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("fs", () => require("fs"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/stream [external] (stream, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("stream", () => require("stream"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/net [external] (net, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("net", () => require("net"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/dns [external] (dns, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("dns", () => require("dns"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/os [external] (os, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("os", () => require("os"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/path [external] (path, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("path", () => require("path"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/tls [external] (tls, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("tls", () => require("tls"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[externals]/child_process [external] (child_process, cjs)", ((__turbopack_context__, module, exports) => {
|
||||
|
||||
const mod = __turbopack_context__.x("child_process", () => require("child_process"));
|
||||
|
||||
module.exports = mod;
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/lib/mail.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"sendInvitationEmail",
|
||||
()=>sendInvitationEmail
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$nodemailer$40$7$2e$0$2e$10$2f$node_modules$2f$nodemailer$2f$lib$2f$nodemailer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/nodemailer@7.0.10/node_modules/nodemailer/lib/nodemailer.js [app-route] (ecmascript)");
|
||||
;
|
||||
const transporter = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$nodemailer$40$7$2e$0$2e$10$2f$node_modules$2f$nodemailer$2f$lib$2f$nodemailer$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["default"].createTransport({
|
||||
host: process.env.SMTP_HOST,
|
||||
port: parseInt(process.env.SMTP_PORT || '465'),
|
||||
secure: true,
|
||||
auth: {
|
||||
user: process.env.SMTP_USER,
|
||||
pass: process.env.SMTP_PASS
|
||||
}
|
||||
});
|
||||
async function sendInvitationEmail(to, inviterName, treeName, role, password) {
|
||||
const loginUrl = `${process.env.NEXTAUTH_URL}/auth/signin`;
|
||||
const roleText = role === 'EDITOR' ? '编辑者' : '查看者';
|
||||
let htmlContent = `
|
||||
<div style="font-family: sans-serif; padding: 20px;">
|
||||
<h2>家族树协作邀请</h2>
|
||||
<p>您好,</p>
|
||||
<p><strong>${inviterName}</strong> 邀请您作为 <strong>${roleText}</strong> 加入家族树 <strong>"${treeName}"</strong>。</p>
|
||||
`;
|
||||
if (password) {
|
||||
htmlContent += `
|
||||
<p>您的初始登录密码为:<br>
|
||||
<strong style="font-size: 18px; background: #eee; padding: 5px 10px; border-radius: 4px;">${password}</strong>
|
||||
</p>
|
||||
<p>请使用您的邮箱 (${to}) 和上述密码登录。</p>
|
||||
`;
|
||||
} else {
|
||||
htmlContent += `
|
||||
<p>您可以使用现有的账号登录查看。</p>
|
||||
`;
|
||||
}
|
||||
htmlContent += `
|
||||
<p>
|
||||
<a href="${loginUrl}" style="display: inline-block; background: #2563eb; color: white; padding: 10px 20px; text-decoration: none; border-radius: 5px;">
|
||||
立即登录
|
||||
</a>
|
||||
</p>
|
||||
<p style="color: #666; font-size: 12px; margin-top: 30px;">此邮件由中华家谱系统自动发送,请勿回复。</p>
|
||||
</div>
|
||||
`;
|
||||
await transporter.sendMail({
|
||||
from: process.env.SMTP_FROM,
|
||||
to,
|
||||
subject: `[中华家谱] ${inviterName} 邀请您协作`,
|
||||
html: htmlContent
|
||||
});
|
||||
}
|
||||
}),
|
||||
"[project]/Documents/go-new/chinese-family-tree/app/api/trees/[treeId]/invite/route.ts [app-route] (ecmascript)", ((__turbopack_context__) => {
|
||||
"use strict";
|
||||
|
||||
__turbopack_context__.s([
|
||||
"POST",
|
||||
()=>POST
|
||||
]);
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0/node_modules/next/server.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/next-auth@4.24.13_next@16.0.3_react-dom@19.2.0_react@19.2.0__react@19.2.0__nodemailer@7_3c43d6bc4ecce810d1d16651fe207b00/node_modules/next-auth/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/auth.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/prisma.ts [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/bcryptjs@3.0.3/node_modules/bcryptjs/index.js [app-route] (ecmascript)");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/node_modules/.pnpm/zod@3.25.76/node_modules/zod/v3/external.js [app-route] (ecmascript) <export * as z>");
|
||||
var __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$mail$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__ = __turbopack_context__.i("[project]/Documents/go-new/chinese-family-tree/lib/mail.ts [app-route] (ecmascript)");
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
const inviteSchema = __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].object({
|
||||
email: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().email("请输入有效的邮箱地址"),
|
||||
role: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].enum([
|
||||
"EDITOR",
|
||||
"VIEWER"
|
||||
], {
|
||||
errorMap: ()=>({
|
||||
message: "请选择有效的角色"
|
||||
})
|
||||
}),
|
||||
password: __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].string().min(6, "密码至少需要6位").optional()
|
||||
});
|
||||
async function POST(req, { params }) {
|
||||
try {
|
||||
const session = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$2d$auth$40$4$2e$24$2e$13_next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0_$5f$nodemailer$40$7_3c43d6bc4ecce810d1d16651fe207b00$2f$node_modules$2f$next$2d$auth$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["getServerSession"])(__TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$auth$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["authOptions"]);
|
||||
if (!session?.user?.id) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "未授权"
|
||||
}, {
|
||||
status: 401
|
||||
});
|
||||
}
|
||||
const { treeId } = await params;
|
||||
const body = await req.json();
|
||||
const { email, role, password } = inviteSchema.parse(body);
|
||||
// 1. 检查权限
|
||||
const tree = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].familyTree.findFirst({
|
||||
where: {
|
||||
id: treeId,
|
||||
ownerId: session.user.id
|
||||
}
|
||||
});
|
||||
if (!tree) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "家族树不存在或无权邀请"
|
||||
}, {
|
||||
status: 404
|
||||
});
|
||||
}
|
||||
// 2. 检查目标用户是否存在
|
||||
let user = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].user.findUnique({
|
||||
where: {
|
||||
email
|
||||
}
|
||||
});
|
||||
let isNewUser = false;
|
||||
// 3. 如果用户不存在,创建新用户
|
||||
if (!user) {
|
||||
if (!password) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "新用户必须设置初始密码"
|
||||
}, {
|
||||
status: 400
|
||||
});
|
||||
}
|
||||
const hashedPassword = await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$bcryptjs$40$3$2e$0$2e$3$2f$node_modules$2f$bcryptjs$2f$index$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["hash"])(password, 12);
|
||||
user = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].user.create({
|
||||
data: {
|
||||
email,
|
||||
password: hashedPassword,
|
||||
name: email.split('@')[0]
|
||||
}
|
||||
});
|
||||
isNewUser = true;
|
||||
}
|
||||
// 4. 检查是否已经是协作者或所有者
|
||||
if (user.id === tree.ownerId) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "不能邀请自己"
|
||||
}, {
|
||||
status: 400
|
||||
});
|
||||
}
|
||||
const existingCollaborator = await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].treeCollaborator.findUnique({
|
||||
where: {
|
||||
treeId_userId: {
|
||||
treeId,
|
||||
userId: user.id
|
||||
}
|
||||
}
|
||||
});
|
||||
if (existingCollaborator) {
|
||||
// 如果已存在,更新角色
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].treeCollaborator.update({
|
||||
where: {
|
||||
id: existingCollaborator.id
|
||||
},
|
||||
data: {
|
||||
role
|
||||
}
|
||||
});
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
message: "用户已是协作者,角色已更新",
|
||||
isNewUser: false
|
||||
});
|
||||
}
|
||||
// 5. 添加协作者
|
||||
await __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$prisma$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["prisma"].treeCollaborator.create({
|
||||
data: {
|
||||
treeId,
|
||||
userId: user.id,
|
||||
role,
|
||||
invitedBy: session.user.id
|
||||
}
|
||||
});
|
||||
// 6. 发送邀请邮件
|
||||
try {
|
||||
await (0, __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$lib$2f$mail$2e$ts__$5b$app$2d$route$5d$__$28$ecmascript$29$__["sendInvitationEmail"])(email, session.user.name || session.user.email || "用户", tree.name, role, isNewUser ? password : undefined);
|
||||
} catch (emailError) {
|
||||
console.error("发送邀请邮件失败:", emailError);
|
||||
// 邮件发送失败不影响邀请结果,但记录日志
|
||||
}
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
message: isNewUser ? "新用户已创建并添加为协作者,邮件已发送" : "用户已添加为协作者,邮件已发送",
|
||||
isNewUser
|
||||
}, {
|
||||
status: 201
|
||||
});
|
||||
} catch (error) {
|
||||
if (error instanceof __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$zod$40$3$2e$25$2e$76$2f$node_modules$2f$zod$2f$v3$2f$external$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__$3c$export__$2a$__as__z$3e$__["z"].ZodError) {
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: error.errors[0].message
|
||||
}, {
|
||||
status: 400
|
||||
});
|
||||
}
|
||||
console.error("邀请协作者失败:", error);
|
||||
return __TURBOPACK__imported__module__$5b$project$5d2f$Documents$2f$go$2d$new$2f$chinese$2d$family$2d$tree$2f$node_modules$2f2e$pnpm$2f$next$40$16$2e$0$2e$3_react$2d$dom$40$19$2e$2$2e$0_react$40$19$2e$2$2e$0_$5f$react$40$19$2e$2$2e$0$2f$node_modules$2f$next$2f$server$2e$js__$5b$app$2d$route$5d$__$28$ecmascript$29$__["NextResponse"].json({
|
||||
error: "邀请协作者失败"
|
||||
}, {
|
||||
status: 500
|
||||
});
|
||||
}
|
||||
}
|
||||
}),
|
||||
];
|
||||
|
||||
//# sourceMappingURL=%5Broot-of-the-server%5D__f394cfc4._.js.map
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user