feat: Docker部署与CI/CD集成, 搜索栏修复, 上传目录改为data
This commit is contained in:
1
.next/server/pages/api/v1/materials/[id].js
Normal file
1
.next/server/pages/api/v1/materials/[id].js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";(()=>{var e={};e.id=854,e.ids=[854],e.modules={3524:e=>{e.exports=require("@prisma/client")},7096:e=>{e.exports=require("bcrypt")},9344:e=>{e.exports=require("jsonwebtoken")},145:e=>{e.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},6213:(e,r,t)=>{t.r(r),t.d(r,{config:()=>f,default:()=>c,routeModule:()=>m});var s={};t.r(s),t.d(s,{default:()=>d});var a=t(1802),i=t(7153),o=t(6249),u=t(8103),n=t(432),l=t(7556);async function d(e,r){let{id:t}=e.query;if("string"!=typeof t)return r.status(400).json({success:!1,error:"Invalid material ID"});if("GET"===e.method){await (0,u.R)(e);try{let e=await n.U.getMaterialById(t);if(!e)return r.status(404).json({success:!1,error:"Material not found"});return r.status(200).json({success:!0,data:e})}catch(e){return console.error("Error fetching material:",e),r.status(500).json({success:!1,error:"Failed to fetch material"})}}if("DELETE"===e.method){if(!await (0,u.m)(e,r))return;try{let s=await n.U.getMaterialById(t);if(!s)return r.status(404).json({success:!1,error:"Material not found"});if(s.author.id!==e.user.id&&e.user.role!==l.i.ADMIN)return r.status(403).json({success:!1,error:"Not authorized to delete this material"});return await n.U.deleteMaterial(t),r.status(200).json({success:!0,message:"Material deleted successfully"})}catch(e){return console.error("Error deleting material:",e),r.status(500).json({success:!1,error:"Failed to delete material"})}}return r.status(405).json({success:!1,error:"Method not allowed"})}let c=(0,o.l)(s,"default"),f=(0,o.l)(s,"config"),m=new a.PagesAPIRouteModule({definition:{kind:i.x.PAGES_API,page:"/api/v1/materials/[id]",pathname:"/api/v1/materials/[id]",bundlePath:"",filename:""},userland:s})},7556:(e,r,t)=>{var s,a;t.d(r,{i:()=>s}),function(e){e.USER="USER",e.ADMIN="ADMIN",e.CREATOR="CREATOR",e.MANAGER="MANAGER"}(s||(s={})),function(e){e.CODE="CODE",e.ASSET_ZIP="ASSET_ZIP",e.VIDEO="VIDEO"}(a||(a={}))}};var r=require("../../../../webpack-api-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[876],()=>t(6213));module.exports=s})();
|
||||
1
.next/server/pages/api/v1/materials/[id].js.nft.json
Normal file
1
.next/server/pages/api/v1/materials/[id].js.nft.json
Normal file
File diff suppressed because one or more lines are too long
1
.next/server/pages/api/v1/materials/[id]/comments.js
Normal file
1
.next/server/pages/api/v1/materials/[id]/comments.js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";(()=>{var e={};e.id=439,e.ids=[439],e.modules={3524:e=>{e.exports=require("@prisma/client")},7096:e=>{e.exports=require("bcrypt")},9344:e=>{e.exports=require("jsonwebtoken")},145:e=>{e.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},8855:(e,r,t)=>{t.r(r),t.d(r,{config:()=>m,default:()=>c,routeModule:()=>l});var s={};t.r(s),t.d(s,{default:()=>d});var a=t(1802),o=t(7153),i=t(6249),n=t(8103),u=t(432);async function d(e,r){if("POST"!==e.method)return r.status(405).json({success:!1,error:"Method not allowed"});if(!await (0,n.m)(e,r))return;let{id:t}=e.query,{content:s}=e.body;if("string"!=typeof t)return r.status(400).json({success:!1,error:"Invalid material ID"});if(!s||!s.trim())return r.status(400).json({success:!1,error:"Comment content is required"});try{let a=await u.U.addComment(t,e.user.id,s);return r.status(201).json({success:!0,data:a})}catch(e){return console.error("Error adding comment:",e),r.status(500).json({success:!1,error:"Failed to add comment"})}}let c=(0,i.l)(s,"default"),m=(0,i.l)(s,"config"),l=new a.PagesAPIRouteModule({definition:{kind:o.x.PAGES_API,page:"/api/v1/materials/[id]/comments",pathname:"/api/v1/materials/[id]/comments",bundlePath:"",filename:""},userland:s})}};var r=require("../../../../../webpack-api-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[876],()=>t(8855));module.exports=s})();
|
||||
File diff suppressed because one or more lines are too long
1
.next/server/pages/api/v1/materials/[id]/favorite.js
Normal file
1
.next/server/pages/api/v1/materials/[id]/favorite.js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";(()=>{var e={};e.id=37,e.ids=[37],e.modules={3524:e=>{e.exports=require("@prisma/client")},7096:e=>{e.exports=require("bcrypt")},9344:e=>{e.exports=require("jsonwebtoken")},145:e=>{e.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},7732:(e,r,t)=>{t.r(r),t.d(r,{config:()=>c,default:()=>d,routeModule:()=>p});var s={};t.r(s),t.d(s,{default:()=>l});var a=t(1802),i=t(7153),o=t(6249),u=t(8103),n=t(432);async function l(e,r){if("POST"!==e.method)return r.status(405).json({success:!1,error:"Method not allowed"});if(!await (0,u.m)(e,r))return;let{id:t}=e.query;if("string"!=typeof t)return r.status(400).json({success:!1,error:"Invalid material ID"});try{let s=await n.U.toggleFavorite(t,e.user.id);return r.status(200).json({success:!0,data:{favorites:s}})}catch(e){return console.error("Error toggling favorite:",e),r.status(500).json({success:!1,error:"Failed to toggle favorite"})}}let d=(0,o.l)(s,"default"),c=(0,o.l)(s,"config"),p=new a.PagesAPIRouteModule({definition:{kind:i.x.PAGES_API,page:"/api/v1/materials/[id]/favorite",pathname:"/api/v1/materials/[id]/favorite",bundlePath:"",filename:""},userland:s})}};var r=require("../../../../../webpack-api-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[876],()=>t(7732));module.exports=s})();
|
||||
File diff suppressed because one or more lines are too long
1
.next/server/pages/api/v1/materials/upload-video.js
Normal file
1
.next/server/pages/api/v1/materials/upload-video.js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";(()=>{var e={};e.id=766,e.ids=[766],e.modules={3524:e=>{e.exports=require("@prisma/client")},7096:e=>{e.exports=require("bcrypt")},9344:e=>{e.exports=require("jsonwebtoken")},145:e=>{e.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},6705:e=>{e.exports=import("formidable")},7147:e=>{e.exports=require("fs")},1017:e=>{e.exports=require("path")},7610:(e,r,t)=>{t.a(e,async(e,s)=>{try{t.r(r),t.d(r,{config:()=>d,default:()=>u,routeModule:()=>p});var a=t(1802),i=t(7153),o=t(6249),n=t(3250),l=e([n]);n=(l.then?(await l)():l)[0];let u=(0,o.l)(n,"default"),d=(0,o.l)(n,"config"),p=new a.PagesAPIRouteModule({definition:{kind:i.x.PAGES_API,page:"/api/v1/materials/upload-video",pathname:"/api/v1/materials/upload-video",bundlePath:"",filename:""},userland:n});s()}catch(e){s(e)}})},9036:(e,r,t)=>{t.d(r,{A:()=>i,I:()=>a});let s={uploadMaxMB:3},a=()=>s,i=e=>("number"==typeof e.uploadMaxMB&&(s.uploadMaxMB=e.uploadMaxMB),s)},3250:(e,r,t)=>{t.a(e,async(e,s)=>{try{t.r(r),t.d(r,{config:()=>M,default:()=>m});var a=t(8103),i=t(9036),o=t(7556),n=t(432),l=t(6705),u=t(7147),d=t.n(u),p=t(1017),c=t.n(p),f=e([l]);l=(f.then?(await f)():f)[0];let M={api:{bodyParser:!1}};async function m(e,r){if("POST"!==e.method)return r.status(405).json({success:!1,error:"Method not allowed"});if(!await (0,a.m)(e,r))return;if(e.user.role!==o.i.MANAGER&&e.user.role!==o.i.ADMIN)return r.status(403).json({success:!1,error:"Manager role required"});let{uploadMaxMB:t}=(0,i.I)(),s=1048576*t,u=(0,l.default)({maxFileSize:s,multiples:!1,filter:({mimetype:e,originalFilename:r})=>{let t=(r||"").toLowerCase();return e?.startsWith("video/")||t.endsWith(".mp4")||t.endsWith(".webm")||t.endsWith(".mov")}});try{let{fields:a,files:i}=await new Promise((r,t)=>{u.parse(e,(e,s,a)=>{e?t(e):r({fields:s,files:a})})}),o=(e=>{if(!e)return null;let r=Object.values(e||{});if(!r.length)return null;let t=r[0];return Array.isArray(t)?t[0]||null:t||null})(i);if(!o)return r.status(400).json({success:!1,error:"No file provided"});if((o.size||0)>s)return r.status(413).json({success:!1,error:`File too large. Max ${t}MB`});let l=c().join(process.cwd(),"public","uploads");d().existsSync(l)||d().mkdirSync(l,{recursive:!0});let p=`video_${Date.now()}_${c().basename(o.originalFilename||"video.mp4")}`,f=c().join(l,p),m=o.filepath||o.path;if(!m)return r.status(400).json({success:!1,error:"Invalid upload temp path"});await d().promises.copyFile(m,f);let M=`/uploads/${p}`,v=await n.U.createMaterial(e.user.id,{title:a?.title?.toString()||"Video Asset",description:a?.description?.toString()||"Uploaded video asset",type:"VIDEO",contentUrl:M,tags:(a?.tags?.toString()||"").split(",").filter(Boolean)});return r.status(201).json({success:!0,data:v})}catch(e){return console.error("Upload VIDEO error:",e),r.status(500).json({success:!1,error:e.message||"Upload failed"})}}s()}catch(e){s(e)}})},7556:(e,r,t)=>{var s,a;t.d(r,{i:()=>s}),function(e){e.USER="USER",e.ADMIN="ADMIN",e.CREATOR="CREATOR",e.MANAGER="MANAGER"}(s||(s={})),function(e){e.CODE="CODE",e.ASSET_ZIP="ASSET_ZIP",e.VIDEO="VIDEO"}(a||(a={}))}};var r=require("../../../../webpack-api-runtime.js");r.C(e);var t=e=>r(r.s=e),s=r.X(0,[876],()=>t(7610));module.exports=s})();
|
||||
File diff suppressed because one or more lines are too long
1
.next/server/pages/api/v1/materials/upload-zip.js
Normal file
1
.next/server/pages/api/v1/materials/upload-zip.js
Normal file
@@ -0,0 +1 @@
|
||||
"use strict";(()=>{var e={};e.id=447,e.ids=[447],e.modules={3524:e=>{e.exports=require("@prisma/client")},7096:e=>{e.exports=require("bcrypt")},9344:e=>{e.exports=require("jsonwebtoken")},145:e=>{e.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},6705:e=>{e.exports=import("formidable")},7147:e=>{e.exports=require("fs")},1017:e=>{e.exports=require("path")},9596:(e,t,r)=>{r.a(e,async(e,a)=>{try{r.r(t),r.d(t,{config:()=>p,default:()=>u,routeModule:()=>d});var s=r(1802),i=r(7153),o=r(6249),l=r(120),n=e([l]);l=(n.then?(await n)():n)[0];let u=(0,o.l)(l,"default"),p=(0,o.l)(l,"config"),d=new s.PagesAPIRouteModule({definition:{kind:i.x.PAGES_API,page:"/api/v1/materials/upload-zip",pathname:"/api/v1/materials/upload-zip",bundlePath:"",filename:""},userland:l});a()}catch(e){a(e)}})},9036:(e,t,r)=>{r.d(t,{A:()=>i,I:()=>s});let a={uploadMaxMB:3},s=()=>a,i=e=>("number"==typeof e.uploadMaxMB&&(a.uploadMaxMB=e.uploadMaxMB),a)},120:(e,t,r)=>{r.a(e,async(e,a)=>{try{r.r(t),r.d(t,{config:()=>m,default:()=>f});var s=r(8103),i=r(9036),o=r(432),l=r(6705),n=r(7147),u=r.n(n),p=r(1017),d=r.n(p),c=e([l]);l=(c.then?(await c)():c)[0];let m={api:{bodyParser:!1}};async function f(e,t){if("POST"!==e.method)return t.status(405).json({success:!1,error:"Method not allowed"});if(!await (0,s.m)(e,t))return;let{uploadMaxMB:r}=(0,i.I)(),a=1048576*r,n=(0,l.default)({maxFileSize:a,multiples:!1,filter:({mimetype:e,originalFilename:t})=>"application/zip"===e||(t||"").toLowerCase().endsWith(".zip")});try{let{fields:s,files:i}=await new Promise((t,r)=>{n.parse(e,(e,a,s)=>{e?r(e):t({fields:a,files:s})})}),l=(e=>{if(!e)return null;let t=Object.values(e||{});if(!t.length)return null;let r=t[0];return Array.isArray(r)?r[0]||null:r||null})(i);if(!l)return t.status(400).json({success:!1,error:"No file provided"});if((l.size||0)>a)return t.status(413).json({success:!1,error:`File too large. Max ${r}MB`});let p=d().join(process.cwd(),"public","uploads");u().existsSync(p)||u().mkdirSync(p,{recursive:!0});let c=`zip_${Date.now()}_${d().basename(l.originalFilename||"asset.zip")}`,f=d().join(p,c),m=l.filepath||l.path;if(!m)return t.status(400).json({success:!1,error:"Invalid upload temp path"});await u().promises.copyFile(m,f);let x=`/uploads/${c}`,g=await o.U.createMaterial(e.user.id,{title:s?.title?.toString()||"ZIP Asset",description:s?.description?.toString()||"Uploaded ZIP asset",type:"ASSET_ZIP",contentUrl:x,tags:(s?.tags?.toString()||"").split(",").filter(Boolean)});return t.status(201).json({success:!0,data:g})}catch(e){return console.error("Upload ZIP error:",e),t.status(500).json({success:!1,error:e.message||"Upload failed"})}}a()}catch(e){a(e)}})}};var t=require("../../../../webpack-api-runtime.js");t.C(e);var r=e=>t(t.s=e),a=t.X(0,[876],()=>r(9596));module.exports=a})();
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user