NeahNew/.next/server/app/api/missions/upload/route.js
2025-05-06 23:01:34 +02:00

1 line
6.3 KiB
JavaScript

"use strict";(()=>{var e={};e.id=9189,e.ids=[9189],e.modules={3295:e=>{e.exports=require("next/dist/server/app-render/after-task-async-storage.external.js")},10846:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},11723:e=>{e.exports=require("querystring")},12412:e=>{e.exports=require("assert")},21820:e=>{e.exports=require("os")},24247:(e,r,t)=>{t.r(r),t.d(r,{patchFetch:()=>j,routeModule:()=>h,serverHooks:()=>y,workAsyncStorage:()=>x,workUnitAsyncStorage:()=>q});var o={};t.r(o),t.d(o,{GET:()=>f,POST:()=>m});var s=t(96559),i=t(48088),n=t(37719),a=t(32190),l=t(19854),u=t(26690),d=t(79464),p=t(22039),c=t(14182);async function g(e){let r=await (0,l.getServerSession)(u.N);return r?.user?.id?{authorized:!0,userId:r.user.id}:(console.error("Unauthorized access attempt:",{url:e.url,method:e.method,headers:Object.fromEntries(e.headers)}),{authorized:!1,userId:null})}async function f(e){try{let r,{authorized:t,userId:o}=await g(e);if(!t||!o)return a.NextResponse.json({error:"Unauthorized"},{status:401});let{searchParams:s}=new URL(e.url),i=s.get("missionId"),n=s.get("type"),l=s.get("filename");if(!i||!n||!l)return a.NextResponse.json({error:"Missing required parameters",required:{missionId:!0,type:!0,filename:!0},received:{missionId:!!i,type:!!n,filename:!!l}},{status:400});let u=await d.z.mission.findUnique({where:{id:i},select:{id:!0,creatorId:!0}});if(!u)return a.NextResponse.json({error:"Mission not found"},{status:404});if(u.creatorId!==o)return a.NextResponse.json({error:"Not authorized to upload to this mission"},{status:403});if("logo"===n){let e=l.substring(l.lastIndexOf("."));r=await (0,p.nq)(o,i,e)}else{if("attachment"!==n)return a.NextResponse.json({error:"Invalid upload type"},{status:400});r=await (0,p.dm)(o,i,l)}return a.NextResponse.json(r)}catch(e){return console.error("Error generating upload URL:",e),a.NextResponse.json({error:"Internal server error",details:e instanceof Error?e.message:String(e)},{status:500})}}async function m(e){console.log("=== File upload request received ===");try{console.log("Checking authentication...");let{authorized:r,userId:t}=await g(e);if(!r||!t)return console.log("Authentication failed"),a.NextResponse.json({error:"Unauthorized"},{status:401});console.log("User authenticated:",t),console.log("Parsing form data...");let o=await e.formData(),s=o.get("missionId"),i=o.get("type"),n=o.get("file");if(console.log("Form data received:",{missionId:s,type:i,fileExists:!!n,fileName:n?.name,fileSize:n?.size,fileType:n?.type}),!s||!i||!n)return console.log("Missing required fields:",{missionId:!!s,type:!!i,file:!!n}),a.NextResponse.json({error:"Missing required fields",required:{missionId:!0,type:!0,file:!0},received:{missionId:!!s,type:!!i,file:!!n}},{status:400});console.log("Verifying mission access...");let l=await d.z.mission.findUnique({where:{id:s},select:{id:!0,creatorId:!0}});if(!l)return console.log("Mission not found:",s),a.NextResponse.json({error:"Mission not found"},{status:404});if(l.creatorId!==t)return console.log("User not authorized to upload to this mission",{userId:t,creatorId:l.creatorId}),a.NextResponse.json({error:"Not authorized to upload to this mission"},{status:403});if(console.log("Mission access verified"),"logo"===i){console.log("Processing logo upload...");try{let{filePath:e}=await (0,p.vB)(t,s,n);console.log("Logo uploaded successfully to path:",e);let r=(0,c.b4)(e,c.YE.bucket);return console.log("Public URL for logo:",r),console.log("Updating mission record with logo path..."),await d.z.mission.update({where:{id:s},data:{logo:e}}),console.log("Mission record updated"),a.NextResponse.json({success:!0,filePath:e,publicUrl:r})}catch(e){return console.error("Error in logo upload process:",e),a.NextResponse.json({error:"Logo upload failed",details:e instanceof Error?e.message:String(e)},{status:500})}}if("attachment"!==i)return console.log("Invalid upload type:",i),a.NextResponse.json({error:"Invalid upload type"},{status:400});console.log("Processing attachment upload...");try{let{filename:e,filePath:r,fileType:o,fileSize:i}=await (0,p.jY)(t,s,n);console.log("Attachment uploaded successfully to path:",r);let l=(0,c.b4)(r,c.YE.bucket);console.log("Public URL for attachment:",l),console.log("Creating attachment record in database...");let u=await d.z.attachment.create({data:{filename:e,filePath:r,fileType:o,fileSize:i,missionId:s,uploaderId:t}});return console.log("Attachment record created:",u.id),a.NextResponse.json({success:!0,attachment:{id:u.id,filename:u.filename,filePath:u.filePath,publicUrl:l,fileType:u.fileType,fileSize:u.fileSize,createdAt:u.createdAt}})}catch(e){return console.error("Error in attachment upload process:",e),a.NextResponse.json({error:"Attachment upload failed",details:e instanceof Error?e.message:String(e)},{status:500})}}catch(e){return console.error("Unhandled error in upload process:",e),a.NextResponse.json({error:"Internal server error",details:e instanceof Error?e.message:String(e)},{status:500})}}let h=new s.AppRouteRouteModule({definition:{kind:i.RouteKind.APP_ROUTE,page:"/api/missions/upload/route",pathname:"/api/missions/upload",filename:"route",bundlePath:"app/api/missions/upload/route"},resolvedPagePath:"/Users/alma/Documents/NeahNew/app/api/missions/upload/route.ts",nextConfigOutput:"",userland:o}),{workAsyncStorage:x,workUnitAsyncStorage:q,serverHooks:y}=h;function j(){return(0,n.patchFetch)({workAsyncStorage:x,workUnitAsyncStorage:q})}},27910:e=>{e.exports=require("stream")},28354:e=>{e.exports=require("util")},29021:e=>{e.exports=require("fs")},29294:e=>{e.exports=require("next/dist/server/app-render/work-async-storage.external.js")},33873:e=>{e.exports=require("path")},44870:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},55511:e=>{e.exports=require("crypto")},55591:e=>{e.exports=require("https")},57075:e=>{e.exports=require("node:stream")},63033:e=>{e.exports=require("next/dist/server/app-render/work-unit-async-storage.external.js")},73496:e=>{e.exports=require("http2")},74075:e=>{e.exports=require("zlib")},79428:e=>{e.exports=require("buffer")},79551:e=>{e.exports=require("url")},81630:e=>{e.exports=require("http")},91043:e=>{e.exports=require("@aws-sdk/client-s3")},94735:e=>{e.exports=require("events")},96330:e=>{e.exports=require("@prisma/client")}};var r=require("../../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),o=r.X(0,[4243,5419,580,762,1046,6300],()=>t(24247));module.exports=o})();