835 lines
44 KiB
JavaScript
835 lines
44 KiB
JavaScript
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([
|
|
"canDeleteTree",
|
|
()=>canDeleteTree,
|
|
"canEditTree",
|
|
()=>canEditTree,
|
|
"canInviteCollaborators",
|
|
()=>canInviteCollaborators,
|
|
"checkPermission",
|
|
()=>checkPermission,
|
|
"getRoleDescription",
|
|
()=>getRoleDescription,
|
|
"getRoleDisplayName",
|
|
()=>getRoleDisplayName,
|
|
"getRolePermissions",
|
|
()=>getRolePermissions,
|
|
"permissions",
|
|
()=>permissions,
|
|
"requireAuth",
|
|
()=>requireAuth,
|
|
"requirePermission",
|
|
()=>requirePermission
|
|
]);
|
|
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;
|
|
}
|
|
const permissions = {
|
|
// ==================== 增加权限 ====================
|
|
/**
|
|
* 是否可以创建/添加成员
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canCreate: (role)=>{
|
|
return role === "OWNER" || role === "EDITOR";
|
|
},
|
|
/**
|
|
* 是否可以创建家族树
|
|
* 所有登录用户都可以创建自己的家族树
|
|
*/ canCreateTree: (role)=>{
|
|
return true // 所有人都可以创建新家族树
|
|
;
|
|
},
|
|
// ==================== 修改权限 ====================
|
|
/**
|
|
* 是否可以编辑/更新成员信息
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canUpdate: (role)=>{
|
|
return role === "OWNER" || role === "EDITOR";
|
|
},
|
|
/**
|
|
* 是否可以导入数据
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canImport: (role)=>{
|
|
return role === "OWNER" || role === "EDITOR";
|
|
},
|
|
// ==================== 删除权限 ====================
|
|
/**
|
|
* 是否可以删除成员
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canDeleteMember: (role)=>{
|
|
return role === "OWNER" || role === "EDITOR";
|
|
},
|
|
/**
|
|
* 是否可以删除家族树
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canDeleteTree: (role)=>{
|
|
return role === "OWNER";
|
|
},
|
|
/**
|
|
* 是否可以清空数据
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canClearData: (role)=>{
|
|
return role === "OWNER";
|
|
},
|
|
// ==================== 协作者管理权限 ====================
|
|
/**
|
|
* 是否可以邀请协作者
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canInviteCollaborators: (role)=>{
|
|
return role === "OWNER";
|
|
},
|
|
/**
|
|
* 是否可以移除协作者
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canRemoveCollaborators: (role)=>{
|
|
return role === "OWNER";
|
|
},
|
|
/**
|
|
* 是否可以管理协作者(邀请和移除)
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canManageCollaborators: (role)=>{
|
|
return role === "OWNER";
|
|
},
|
|
// ==================== 查看权限 ====================
|
|
/**
|
|
* 是否可以查看信息
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canView: (role)=>{
|
|
return true //
|
|
;
|
|
},
|
|
/**
|
|
* 是否可以搜索和查询
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canSearch: (role)=>{
|
|
return true //
|
|
;
|
|
},
|
|
/**
|
|
* 是否可以导出数据
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canExport: (role)=>{
|
|
return true //
|
|
;
|
|
},
|
|
/**
|
|
* 是否可以打印
|
|
* OWNER | EDITOR | VIEWER
|
|
*/ canPrint: (role)=>{
|
|
return true //
|
|
;
|
|
}
|
|
};
|
|
function canEditTree(role) {
|
|
return permissions.canUpdate(role);
|
|
}
|
|
function canDeleteTree(role) {
|
|
return permissions.canDeleteTree(role);
|
|
}
|
|
function canInviteCollaborators(role) {
|
|
return permissions.canInviteCollaborators(role);
|
|
}
|
|
function requirePermission(role, permissionCheck, errorMessage = "您没有权限执行此操作") {
|
|
if (!permissionCheck(role)) {
|
|
throw new Error(errorMessage);
|
|
}
|
|
}
|
|
function getRoleDisplayName(role) {
|
|
const roleNames = {
|
|
OWNER: "所有者",
|
|
EDITOR: "编辑者",
|
|
VIEWER: "查看者"
|
|
};
|
|
return roleNames[role] || role;
|
|
}
|
|
function getRoleDescription(role) {
|
|
const descriptions = {
|
|
OWNER: "拥有全部权限,可以管理家族树和协作者",
|
|
EDITOR: "可以添加、编辑和删除成员,但不能删除家族树或管理协作者",
|
|
VIEWER: "只能查看、搜索和导出数据,不能进行任何修改操作"
|
|
};
|
|
return descriptions[role] || "";
|
|
}
|
|
function getRolePermissions(role) {
|
|
const allPermissions = {
|
|
OWNER: [
|
|
"查看所有信息",
|
|
"搜索和筛选",
|
|
"导出和打印",
|
|
"添加成员",
|
|
"编辑成员",
|
|
"删除成员",
|
|
"导入数据",
|
|
"邀请协作者",
|
|
"移除协作者",
|
|
"删除家族树",
|
|
"清空数据"
|
|
],
|
|
EDITOR: [
|
|
"查看所有信息",
|
|
"搜索和筛选",
|
|
"导出和打印",
|
|
"添加成员",
|
|
"编辑成员",
|
|
"删除成员",
|
|
"导入数据"
|
|
],
|
|
VIEWER: [
|
|
"查看所有信息",
|
|
"搜索和筛选",
|
|
"导出和打印"
|
|
]
|
|
};
|
|
return allPermissions[role] || [];
|
|
}
|
|
}),
|
|
"[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()
|
|
}
|
|
});
|
|
// 维护配偶双向关系
|
|
if (body.spouseIds !== undefined) {
|
|
const newSpouseIds = body.spouseIds || [];
|
|
const oldSpouseIds = existingMember.spouseIds || [];
|
|
// 添加新配偶的反向关系
|
|
for (const spouseId of newSpouseIds){
|
|
if (!oldSpouseIds.includes(spouseId)) {
|
|
const spouse = 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.findUnique({
|
|
where: {
|
|
id: spouseId
|
|
}
|
|
});
|
|
if (spouse && !spouse.spouseIds.includes(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"].familyMember.update({
|
|
where: {
|
|
id: spouseId
|
|
},
|
|
data: {
|
|
spouseIds: [
|
|
...spouse.spouseIds,
|
|
memberId
|
|
]
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
// 移除旧配偶的反向关系
|
|
for (const oldSpouseId of oldSpouseIds){
|
|
if (!newSpouseIds.includes(oldSpouseId)) {
|
|
const spouse = 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.findUnique({
|
|
where: {
|
|
id: oldSpouseId
|
|
}
|
|
});
|
|
if (spouse && spouse.spouseIds.includes(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"].familyMember.update({
|
|
where: {
|
|
id: oldSpouseId
|
|
},
|
|
data: {
|
|
spouseIds: spouse.spouseIds.filter((id)=>id !== memberId)
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 维护父母-子女双向关系
|
|
// 1. 处理父亲关系变化
|
|
if (body.fatherId !== undefined) {
|
|
const oldFatherId = existingMember.fatherId;
|
|
const newFatherId = body.fatherId;
|
|
// 从旧父亲的子女列表中移除
|
|
if (oldFatherId && oldFatherId !== newFatherId) {
|
|
const oldFather = 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.findUnique({
|
|
where: {
|
|
id: oldFatherId
|
|
}
|
|
});
|
|
if (oldFather && oldFather.childrenIds.includes(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"].familyMember.update({
|
|
where: {
|
|
id: oldFatherId
|
|
},
|
|
data: {
|
|
childrenIds: oldFather.childrenIds.filter((id)=>id !== memberId)
|
|
}
|
|
});
|
|
}
|
|
}
|
|
// 添加到新父亲的子女列表
|
|
if (newFatherId && newFatherId !== oldFatherId) {
|
|
const newFather = 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.findUnique({
|
|
where: {
|
|
id: newFatherId
|
|
}
|
|
});
|
|
if (newFather && !newFather.childrenIds.includes(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"].familyMember.update({
|
|
where: {
|
|
id: newFatherId
|
|
},
|
|
data: {
|
|
childrenIds: [
|
|
...newFather.childrenIds,
|
|
memberId
|
|
]
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
// 2. 处理母亲关系变化
|
|
if (body.motherId !== undefined) {
|
|
const oldMotherId = existingMember.motherId;
|
|
const newMotherId = body.motherId;
|
|
// 从旧母亲的子女列表中移除
|
|
if (oldMotherId && oldMotherId !== newMotherId) {
|
|
const oldMother = 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.findUnique({
|
|
where: {
|
|
id: oldMotherId
|
|
}
|
|
});
|
|
if (oldMother && oldMother.childrenIds.includes(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"].familyMember.update({
|
|
where: {
|
|
id: oldMotherId
|
|
},
|
|
data: {
|
|
childrenIds: oldMother.childrenIds.filter((id)=>id !== memberId)
|
|
}
|
|
});
|
|
}
|
|
}
|
|
// 添加到新母亲的子女列表
|
|
if (newMotherId && newMotherId !== oldMotherId) {
|
|
const newMother = 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.findUnique({
|
|
where: {
|
|
id: newMotherId
|
|
}
|
|
});
|
|
if (newMother && !newMother.childrenIds.includes(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"].familyMember.update({
|
|
where: {
|
|
id: newMotherId
|
|
},
|
|
data: {
|
|
childrenIds: [
|
|
...newMother.childrenIds,
|
|
memberId
|
|
]
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
// 3. 处理子女关系变化
|
|
if (body.childrenIds !== undefined) {
|
|
const newChildrenIds = body.childrenIds || [];
|
|
const oldChildrenIds = existingMember.childrenIds || [];
|
|
// 添加新子女的父母关系
|
|
for (const childId of newChildrenIds){
|
|
if (!oldChildrenIds.includes(childId)) {
|
|
const child = 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.findUnique({
|
|
where: {
|
|
id: childId
|
|
}
|
|
});
|
|
if (child) {
|
|
// 根据当前成员的性别设置为父亲或母亲
|
|
if (member.gender === 'MALE' && !child.fatherId) {
|
|
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: childId
|
|
},
|
|
data: {
|
|
fatherId: memberId
|
|
}
|
|
});
|
|
} else if (member.gender === 'FEMALE' && !child.motherId) {
|
|
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: childId
|
|
},
|
|
data: {
|
|
motherId: memberId
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 移除旧子女的父母关系
|
|
for (const oldChildId of oldChildrenIds){
|
|
if (!newChildrenIds.includes(oldChildId)) {
|
|
const child = 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.findUnique({
|
|
where: {
|
|
id: oldChildId
|
|
}
|
|
});
|
|
if (child) {
|
|
// 根据当前成员的性别移除父亲或母亲
|
|
if (member.gender === 'MALE' && child.fatherId === 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"].familyMember.update({
|
|
where: {
|
|
id: oldChildId
|
|
},
|
|
data: {
|
|
fatherId: null
|
|
}
|
|
});
|
|
} else if (member.gender === 'FEMALE' && child.motherId === 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"].familyMember.update({
|
|
where: {
|
|
id: oldChildId
|
|
},
|
|
data: {
|
|
motherId: null
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// 记录操作日志
|
|
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
|