![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/lavocat.ca/private_html/.next/server/pages/api/live-cases/[id]/ |
"use strict";(()=>{var e={};e.id=8886,e.ids=[8886],e.modules={8667:(e,r)=>{Object.defineProperty(r,"A",{enumerable:!0,get:function(){return s}});var s=function(e){return e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE",e.IMAGE="IMAGE",e}({})},15581:(e,r,s)=>{s.a(e,async(e,t)=>{try{s.r(r),s.d(r,{config:()=>p,default:()=>g});var i=s(15806),o=s(41822),a=s(76760),n=s(79748),l=s(33873),c=s(29021),d=s(67313),u=e([d]);d=(u.then?(await u)():u)[0];let p={api:{bodyParser:!1}};async function m(e,r){console.log(`Cascade deleting comment: ${r}`);try{await e.caseComment.update({where:{id:r},data:{isDeleted:!0}}),console.log(`Marked comment ${r} as deleted`);let s=await e.caseComment.findMany({where:{parentId:r,isDeleted:!1}});for(let t of(console.log(`Found ${s.length} replies to delete for comment ${r}`),s))await m(e,t.id);console.log(`Completed cascade delete for comment ${r}`)}catch(e){throw console.error(`Error in cascade delete for comment ${r}:`,e),e}}async function g(e,r){let{id:s}=e.query;if(!s||"string"!=typeof s)return r.status(400).json({message:"Invalid case ID"});if("POST"===e.method){let t=await (0,i.getServerSession)(e,r,o.N);if(console.log("=== COMMENT POST ATTEMPT ==="),console.log("Session:",t),console.log("Session user:",t?.user),console.log("Request headers:",e.headers),e.headers["content-type"]?.includes("application/json")){let r="";e.on("data",e=>{r+=e}),e.on("end",()=>{console.log("Request body:",r)})}if(!t?.user?.id)return r.status(401).json({message:"Authentication required"});try{if(e.headers["content-type"]?.includes("multipart/form-data")){let i=(0,d.default)({uploadDir:(0,l.join)(process.cwd(),"public","uploads","comments"),keepExtensions:!0,maxFileSize:5242880,multiples:!0});(0,c.existsSync)((0,l.join)(process.cwd(),"public","uploads","comments"))||await (0,n.mkdir)((0,l.join)(process.cwd(),"public","uploads","comments"),{recursive:!0}),await new Promise((o,n)=>{i.parse(e,async(e,i,l)=>{if(e)return n(e);let{content:c,parentId:d}=i;if(!c||0===String(c).trim().length)return r.status(400).json({message:"Comment content is required"});if(!await a.z.legalCase.findFirst({where:{id:s,isPublic:!0}}))return r.status(404).json({message:"Case not found or not available"});let u=Array.isArray(d)?d[0]:d;if(u&&!await a.z.caseComment.findFirst({where:{id:u,caseId:s,isDeleted:!1}}))return r.status(404).json({message:"Parent comment not found"});let m=await a.z.caseComment.create({data:{caseId:s,userId:t.user.id,parentId:Array.isArray(d)?d[0]:d||null,content:String(c).trim(),likes:0,isEdited:!1,isDeleted:!1},include:{user:{select:{id:!0,name:!0,username:!0,profilePicture:!0,role:!0,isVerified:!0}},replies:{include:{user:{select:{id:!0,name:!0,username:!0,profilePicture:!0,role:!0,isVerified:!0}}},orderBy:{createdAt:"asc"}},reactions:{include:{user:{select:{id:!0,name:!0,username:!0}}}},_count:{select:{replies:!0,likedBy:!0,reactions:!0}}}}),g=[],p=Array.isArray(l.attachments)?l.attachments:l.attachments?[l.attachments]:[];for(let e of(console.log("Files received:",l),console.log("File array:",p),p)){console.log("Processing file:",e);let r=e.newFilename||e.originalFilename||e.name,s=`/uploads/comments/${e.newFilename}`;console.log("File URL:",s);let t=await a.z.commentAttachment.create({data:{commentId:m.id,name:r,url:s,type:e.mimetype||"",size:e.size||0}});console.log("Created attachment:",t),g.push(t)}if(u){let e=await a.z.caseComment.findFirst({where:{id:u,caseId:s,isDeleted:!1},include:{user:!0}});e&&e.userId!==t.user.id&&await a.z.notification.create({data:{userId:e.userId,type:"reply",title:"New reply to your comment",message:`${t.user.name||"Someone"} replied to your comment.`,data:JSON.stringify({caseId:s,commentId:u})}})}r.status(201).json({message:"Comment added successfully",comment:{...m,attachments:g,createdAt:m.createdAt.toISOString(),updatedAt:m.updatedAt.toISOString()}}),o()})});return}let i="";e.on("data",e=>{i+=e});let{content:o,parentId:u}=await new Promise((r,s)=>{e.on("end",()=>{try{i?r(JSON.parse(i)):r({})}catch(e){s(e)}})});if(!o||0===o.trim().length)return r.status(400).json({message:"Comment content is required"});if(!await a.z.legalCase.findFirst({where:{id:s,isPublic:!0}}))return r.status(404).json({message:"Case not found or not available"});if(u&&!await a.z.caseComment.findFirst({where:{id:u,caseId:s,isDeleted:!1}}))return r.status(404).json({message:"Parent comment not found"});let m=await a.z.caseComment.create({data:{caseId:s,userId:t.user.id,parentId:u||null,content:o.trim(),likes:0,isEdited:!1,isDeleted:!1},include:{user:{select:{id:!0,name:!0,profilePicture:!0,role:!0,isVerified:!0}},replies:{include:{user:{select:{id:!0,name:!0,profilePicture:!0,role:!0,isVerified:!0}}},orderBy:{createdAt:"asc"}},reactions:{include:{user:{select:{id:!0,name:!0}}}},_count:{select:{replies:!0,likedBy:!0,reactions:!0}}}});if(u){let e=await a.z.caseComment.findFirst({where:{id:u,caseId:s,isDeleted:!1},include:{user:!0}});e&&e.userId!==t.user.id&&await a.z.notification.create({data:{userId:e.userId,type:"reply",title:"New reply to your comment",message:`${t.user.name||"Someone"} replied to your comment.`,data:JSON.stringify({caseId:s,commentId:u})}})}r.status(201).json({message:"Comment added successfully",comment:{...m,createdAt:m.createdAt.toISOString(),updatedAt:m.updatedAt.toISOString()}})}catch(e){if(console.error("=== COMMENT POST ERROR ==="),console.error("Error:",e),e instanceof Error)return console.error("Error stack:",e.stack),r.status(500).json({message:"Failed to add comment",error:{message:e.message,stack:e.stack}});return r.status(500).json({message:"Failed to add comment",error:e})}}else if("GET"===e.method)try{let{page:t="1",limit:i="20",parentId:o,sortBy:n="newest",filterBy:l="all",search:c=""}=e.query,d=parseInt(t),u=parseInt(i);if(!await a.z.legalCase.findFirst({where:{id:s,isPublic:!0}}))return r.status(404).json({message:"Case not found or not available"});let m={caseId:s,isDeleted:!1};o?m.parentId=o:m.parentId=null,c&&"string"==typeof c&&(m.content={contains:c,mode:"insensitive"}),l&&"all"!==l&&"string"==typeof l&&(m.user={role:{equals:l.toUpperCase(),mode:"insensitive"}});let g={createdAt:"desc"};switch(n){case"oldest":g={createdAt:"asc"};break;case"mostLiked":g={likes:"desc"};break;case"mostReplies":g={replies:{_count:"desc"}};break;default:g={createdAt:"desc"}}await a.z.caseComment.findMany({where:m,include:{user:{select:{id:!0,name:!0,username:!0,profilePicture:!0,role:!0,isVerified:!0}},attachments:!0,replies:{where:{isDeleted:!1},include:{user:{select:{id:!0,name:!0,username:!0,profilePicture:!0,role:!0,isVerified:!0}},attachments:!0},orderBy:{createdAt:"asc"}},reactions:{include:{user:{select:{id:!0,name:!0,username:!0}}}},_count:{select:{replies:!0,likedBy:!0,reactions:!0}}},orderBy:g,skip:(d-1)*u,take:u}),await a.z.caseComment.count({where:m});let p=await a.z.caseComment.findMany({where:{caseId:s,isDeleted:!1},include:{user:{select:{id:!0,name:!0,username:!0,profilePicture:!0,role:!0,isVerified:!0}},attachments:!0,replies:{where:{isDeleted:!1},include:{user:{select:{id:!0,name:!0,username:!0,profilePicture:!0,role:!0,isVerified:!0}},attachments:!0},orderBy:{createdAt:"asc"}},reactions:{include:{user:{select:{id:!0,name:!0,username:!0}}}},_count:{select:{replies:!0,likedBy:!0,reactions:!0}}},orderBy:{createdAt:"asc"}}),f={};p.forEach(e=>{f[e.id]={...e,replies:[]}});let h=[];p.forEach(e=>{e.parentId&&f[e.parentId]?f[e.parentId].replies.push(f[e.id]):e.parentId||h.push(f[e.id])}),r.status(200).json({comments:h.map(e=>({...e,createdAt:e.createdAt.toISOString(),updatedAt:e.updatedAt.toISOString()})),pagination:{total:p.length}})}catch(e){console.error("Error fetching comments:",e),r.status(500).json({message:"Failed to fetch comments",error:void 0})}else if("DELETE"===e.method){let t=await (0,i.getServerSession)(e,r,o.N);if(console.log("=== DELETE ATTEMPT ==="),console.log("Session:",t),console.log("Session user:",t?.user),console.log("Request query:",e.query),console.log("Request headers:",e.headers),console.log("=== LIVE CASES DELETE COMMENT DEBUG ==="),console.log("Request query:",e.query),console.log("Case ID:",s),console.log("Session user:",t?.user),console.log("Session user ID:",t?.user?.id),console.log("Session user role:",t?.user?.role),!t?.user?.id)return console.log("ERROR: No session or user ID"),r.status(401).json({message:"Authentication required"});let{commentId:n}=e.query;if(console.log("Comment ID from query:",n),!n||"string"!=typeof n)return console.log("ERROR: Invalid comment ID"),r.status(400).json({message:"Invalid comment ID"});try{console.log("Looking up comment:",n,"in case:",s);let e=await a.z.caseComment.findFirst({where:{id:n,caseId:s},include:{user:!0}});if(console.log("Comment lookup result:",e),!e||e.isDeleted)return console.log("Comment not found or already deleted - treating as success"),r.status(200).json({message:"Comment already deleted or not found (idempotent)"});console.log("Comment found - User ID:",e.userId),console.log("Comment found - User:",e.user),console.log("Current user ID:",t.user.id),console.log("Current user role:",t.user.role);let i=e.userId===t.user.id||"ADMIN"===t.user.role||"SUPERADMIN"===t.user.role;if(console.log("Can delete check:",{isOwner:e.userId===t.user.id,isAdmin:"ADMIN"===t.user.role,isSuperAdmin:"SUPERADMIN"===t.user.role,canDelete:i}),!i)return console.log("ERROR: User not authorized to delete this comment"),r.status(403).json({message:"Not authorized to delete this comment"});return console.log("Proceeding with cascade deletion..."),await m(a.z,n),console.log(`Comment ${n} deleted by user ${t.user.id}`),console.log("=== LIVE CASES DELETE COMMENT SUCCESS ==="),r.status(200).json({message:"Comment and all replies deleted"})}catch(e){return console.error("=== LIVE CASES DELETE COMMENT ERROR ==="),console.error("Error deleting comment:",e),console.error("Error stack:",e instanceof Error?e.stack:"No stack trace"),r.status(500).json({message:"Failed to delete comment",error:void 0})}}else r.setHeader("Allow",["GET","POST","DELETE"]),r.status(405).json({message:`Method ${e.method} Not Allowed`})}t()}catch(e){t(e)}})},15806:e=>{e.exports=require("next-auth/next")},16382:e=>{e.exports=require("next-auth/providers/credentials")},29021:e=>{e.exports=require("fs")},33480:(e,r,s)=>{e.exports=s(75600)},33684:(e,r,s)=>{s.a(e,async(e,t)=>{try{s.r(r),s.d(r,{config:()=>d,default:()=>c,routeModule:()=>u});var i=s(33480),o=s(8667),a=s(86435),n=s(15581),l=e([n]);n=(l.then?(await l)():l)[0];let c=(0,a.M)(n,"default"),d=(0,a.M)(n,"config"),u=new i.PagesAPIRouteModule({definition:{kind:o.A.PAGES_API,page:"/api/live-cases/[id]/comments",pathname:"/api/live-cases/[id]/comments",bundlePath:"",filename:""},userland:n});t()}catch(e){t(e)}})},33873:e=>{e.exports=require("path")},41822:(e,r,s)=>{s.d(r,{N:()=>n});var t=s(16382),i=s.n(t),o=s(74729),a=s(76760);let n={providers:[i()({name:"Credentials",credentials:{email:{label:"Email",type:"email"},password:{label:"Password",type:"password"}},async authorize(e){if(!e?.email||!e?.password)return null;try{let r=await a.z.user.findUnique({where:{email:e.email},select:{id:!0,email:!0,password:!0,role:!0,name:!0,isVerified:!0,verificationStatus:!0}});if(!r||!await (0,o.compare)(e.password,r.password))return null;let{password:s,...t}=r;return{...t,name:t.name||t.email}}catch(e){return console.error("Auth error:",e),null}}})],session:{strategy:"jwt",maxAge:2592e3},cookies:{sessionToken:{name:"__Secure-next-auth.session-token",options:{httpOnly:!0,sameSite:"lax",path:"/",secure:!0,domain:process.env.COOKIE_DOMAIN}}},pages:{signIn:"/auth/login",signOut:"/auth/login",error:"/auth/error"},callbacks:{async jwt({token:e,user:r,trigger:s}){try{if(console.log("JWT Callback - trigger:",s),console.log("JWT Callback - user:",r?{id:r.id,email:r.email,role:r.role}:null),r)e.id=r.id,e.role=r.role,e.email=r.email,e.name=r.name||r.email,e.profilePicture=r.profilePicture||void 0,e.username=r.username||void 0,e.isVerified=r.isVerified||!1,e.verificationStatus=r.verificationStatus||"PENDING",e.isImpersonating=r.isImpersonating||!1,e.originalUser=r.originalUser||void 0,console.log("JWT Callback - Updated token from user:",{id:e.id,role:e.role,isImpersonating:e.isImpersonating});else if(e.id)try{console.log("JWT Callback - Checking for impersonation sessions...");let r=await a.z.impersonationSession.findFirst({where:{originalUserId:e.id,isActive:!0,expiresAt:{gt:new Date}},include:{impersonatedUser:{select:{id:!0,email:!0,name:!0,role:!0,profilePicture:!0,username:!0}},originalUser:{select:{id:!0,email:!0,name:!0,role:!0,profilePicture:!0,username:!0}}}});if(r){let s=r.impersonatedUser;e.id=s.id,e.email=s.email,e.name=s.name||s.email,e.role=s.role,e.profilePicture=s.profilePicture||void 0,e.username=s.username||void 0,e.isImpersonating=!0,e.originalUser={id:r.originalUser.id,email:r.originalUser.email,name:r.originalUser.name||r.originalUser.email,role:r.originalUser.role,profilePicture:r.originalUser.profilePicture||void 0,username:r.originalUser.username||void 0},console.log("JWT Callback - Applied impersonation:",{originalId:e.originalUser.id,impersonatedId:e.id,originalRole:e.originalUser.role,impersonatedRole:e.role})}else e.isImpersonating&&(e.originalUser&&(console.log("JWT Callback - Restoring original user from token"),e.id=e.originalUser.id,e.email=e.originalUser.email,e.name=e.originalUser.name||e.originalUser.email,e.role=e.originalUser.role,e.profilePicture=e.originalUser.profilePicture||void 0,e.username=e.originalUser.username||void 0),e.isImpersonating=!1,e.originalUser=void 0,console.log("JWT Callback - Cleared impersonation state"))}catch(r){console.error("JWT Callback - Database error:",r),e.isImpersonating&&e.originalUser&&(console.log("JWT Callback - Error occurred, restoring original user"),e.id=e.originalUser.id,e.email=e.originalUser.email,e.name=e.originalUser.name||e.originalUser.email,e.role=e.originalUser.role,e.profilePicture=e.originalUser.profilePicture||void 0,e.username=e.originalUser.username||void 0,e.isImpersonating=!1,e.originalUser=void 0)}return console.log("JWT Callback - Final token:",{id:e.id,email:e.email,role:e.role,isImpersonating:e.isImpersonating}),e}catch(r){return console.error("JWT Callback - Error:",r),e}},async session({session:e,token:r}){try{return console.log("Session Callback - token:",{id:r.id,email:r.email,role:r.role,isImpersonating:r.isImpersonating}),console.log("Session Callback - session before:",e),r&&e.user&&(e.user.id=r.id,e.user.role=r.role,e.user.email=r.email,e.user.name=r.name,e.user.profilePicture=r.profilePicture,e.user.username=r.username,e.user.isVerified=r.isVerified,e.user.verificationStatus=r.verificationStatus,e.user.isImpersonating=r.isImpersonating,e.user.originalUser=r.originalUser),console.log("Session Callback - session after:",e),console.log("Session Callback - Final user ID:",e.user?.id),e}catch(r){return console.error("Session Callback - Error:",r),e}},redirect:async({url:e,baseUrl:r})=>e===r||e===`${r}/`||e.endsWith("/auth/login")?r:e.startsWith("/")?`${r}${e}`:e.startsWith(r)?e:r},secret:process.env.NEXTAUTH_SECRET||"3560f921b7bbf968e64fbc2835960840d184fcb95977e960a2124de6bbbed2d3",debug:!1}},67313:e=>{e.exports=import("formidable")},74729:e=>{e.exports=require("bcryptjs")},75600:e=>{e.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},76760:(e,r,s)=>{s.d(r,{z:()=>i});var t=s(96330);let i=globalThis.prisma??new t.PrismaClient({log:["error"]})},79748:e=>{e.exports=require("fs/promises")},86435:(e,r)=>{Object.defineProperty(r,"M",{enumerable:!0,get:function(){return function e(r,s){return s in r?r[s]:"then"in r&&"function"==typeof r.then?r.then(r=>e(r,s)):"function"==typeof r&&"default"===s?r:void 0}}})},96330:e=>{e.exports=require("@prisma/client")}};var r=require("../../../../webpack-api-runtime.js");r.C(e);var s=r(r.s=33684);module.exports=s})();