feat: Docker部署与CI/CD集成, 搜索栏修复, 上传目录改为data

This commit is contained in:
xiner
2025-11-28 18:42:30 +08:00
commit 8351d6bbfc
243 changed files with 13192 additions and 0 deletions

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=355,e.ids=[355],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")},6249:(e,t)=>{Object.defineProperty(t,"l",{enumerable:!0,get:function(){return function e(t,r){return r in t?t[r]:"then"in t&&"function"==typeof t.then?t.then(t=>e(t,r)):"function"==typeof t&&"default"===r?t:void 0}}})},4585:(e,t,r)=>{r.r(t),r.d(t,{config:()=>f,default:()=>l,routeModule:()=>p});var a={};r.r(a),r.d(a,{default:()=>c});var n=r(1802),s=r(7153),u=r(6249),o=r(2944),i=r(9036);let d={maintenanceMode:!1,apiVersion:"1.0.0",maxUploadMB:(0,i.I)().uploadMaxMB};async function c(e,t){if(await (0,o.k)(e,t)){if("GET"===e.method)return t.status(200).json({success:!0,data:d});if("PUT"===e.method){let{maxUploadMB:r}=e.body||{};return"number"==typeof r&&((0,i.A)({uploadMaxMB:r}),d.maxUploadMB=r),t.status(200).json({success:!0,message:"Configuration updated successfully",data:e.body})}return t.status(405).json({success:!1,error:"Method not allowed"})}}let l=(0,u.l)(a,"default"),f=(0,u.l)(a,"config"),p=new n.PagesAPIRouteModule({definition:{kind:s.x.PAGES_API,page:"/api/v1/admin/config",pathname:"/api/v1/admin/config",bundlePath:"",filename:""},userland:a})},3481:(e,t,r)=>{r.d(t,{K:()=>s});var a=r(1450),n=r(1026);let s={async getUserById(e){let t=await a.Z.user.findUnique({where:{id:e},select:{id:!0,username:!0,avatarUrl:!0,role:!0,status:!0,createdAt:!0,lastLogin:!0}});return t?{...t,role:t.role,createdAt:t.createdAt.toISOString(),lastLogin:t.lastLogin?.toISOString()||new Date().toISOString(),avatarUrl:t.avatarUrl||""}:null},getUserByUsername:async e=>a.Z.user.findUnique({where:{username:e}}),async createUser(e,t,r){let s=await (0,n.c_)(t),u=`https://api.dicebear.com/7.x/avataaars/svg?seed=${e}`;return a.Z.user.create({data:{username:e,password:s,avatarUrl:u,role:"CREATOR",status:"ACTIVE"}})},async authenticateUser(e,t){let r=await this.getUserByUsername(e);return r&&r.password&&await (0,n.Gv)(t,r.password)?(await a.Z.user.update({where:{id:r.id},data:{lastLogin:new Date}}),{id:r.id,username:r.username,avatarUrl:r.avatarUrl||"",role:r.role,status:r.status,createdAt:r.createdAt.toISOString(),lastLogin:new Date().toISOString()}):null},getAllUsers:async()=>a.Z.user.findMany({orderBy:{createdAt:"desc"}}),updateUser:async(e,t)=>a.Z.user.update({where:{id:e},data:{username:t.username,avatarUrl:t.avatarUrl}}),updateUserRole:async(e,t)=>a.Z.user.update({where:{id:e},data:{role:t}}),async toggleUserStatus(e){let t=await a.Z.user.findUnique({where:{id:e}});if(!t)throw Error("User not found");let r="ACTIVE"===t.status?"BANNED":"ACTIVE";return a.Z.user.update({where:{id:e},data:{status:r}})}}},1026:(e,t,r)=>{r.d(t,{Gv:()=>d,RA:()=>c,WX:()=>l,c_:()=>i});var a=r(7096),n=r.n(a),s=r(9344),u=r.n(s);function o(){let e=process.env.JWT_SECRET;if(!e)throw Error("JWT_SECRET is not set");return e}async function i(e){return n().hash(e,10)}async function d(e,t){return n().compare(e,t)}function c(e){return u().sign({userId:e},o(),{expiresIn:"7d"})}function l(e){try{return u().verify(e,o())}catch(e){return null}}},2944:(e,t,r)=>{r.d(t,{k:()=>s});var a=r(8103),n=r(7556);async function s(e,t){return!!await (0,a.m)(e,t)&&(e.user?.role===n.i.ADMIN||(t.status(403).json({success:!1,error:"Admin access required"}),!1))}},8103:(e,t,r)=>{r.d(t,{R:()=>u,m:()=>s});var a=r(1026),n=r(3481);async function s(e,t){let r=o(e);if(!r)return t.status(401).json({success:!1,error:"Authentication required"}),!1;let s=(0,a.WX)(r);if(!s)return t.status(401).json({success:!1,error:"Invalid or expired token"}),!1;let u=await n.K.getUserById(s.userId);return u?"BANNED"===u.status?(t.status(403).json({success:!1,error:"Account has been banned"}),!1):(e.user=u,!0):(t.status(401).json({success:!1,error:"User not found"}),!1)}async function u(e){let t=o(e);if(!t)return;let r=(0,a.WX)(t);if(!r)return;let s=await n.K.getUserById(r.userId);s&&"BANNED"!==s.status&&(e.user=s)}function o(e){if(e.cookies.token)return e.cookies.token;let t=e.headers.authorization;return t&&t.startsWith("Bearer ")?t.substring(7):null}},1450:(e,t,r)=>{r.d(t,{Z:()=>n});var a=r(3524);let n=globalThis.prisma??new a.PrismaClient},9036:(e,t,r)=>{r.d(t,{A:()=>s,I:()=>n});let a={uploadMaxMB:3},n=()=>a,s=e=>("number"==typeof e.uploadMaxMB&&(a.uploadMaxMB=e.uploadMaxMB),a)},7556:(e,t,r)=>{var a,n;r.d(t,{i:()=>a}),function(e){e.USER="USER",e.ADMIN="ADMIN",e.CREATOR="CREATOR",e.MANAGER="MANAGER"}(a||(a={})),function(e){e.CODE="CODE",e.ASSET_ZIP="ASSET_ZIP",e.VIDEO="VIDEO"}(n||(n={}))},7153:(e,t)=>{var r;Object.defineProperty(t,"x",{enumerable:!0,get:function(){return r}}),function(e){e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE"}(r||(r={}))},1802:(e,t,r)=>{e.exports=r(145)}};var t=require("../../../../webpack-api-runtime.js");t.C(e);var r=t(t.s=4585);module.exports=r})();

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=345,e.ids=[345],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")},6249:(e,t)=>{Object.defineProperty(t,"l",{enumerable:!0,get:function(){return function e(t,r){return r in t?t[r]:"then"in t&&"function"==typeof t.then?t.then(t=>e(t,r)):"function"==typeof t&&"default"===r?t:void 0}}})},1717:(e,t,r)=>{r.r(t),r.d(t,{config:()=>l,default:()=>d,routeModule:()=>f});var s={};r.r(s),r.d(s,{default:()=>c});var a=r(1802),n=r(7153),u=r(6249),i=r(2944),o=r(3481);async function c(e,t){if("GET"!==e.method)return t.status(405).json({success:!1,error:"Method not allowed"});if(await (0,i.k)(e,t))try{let e=await o.K.getAllUsers();return t.status(200).json({success:!0,data:e})}catch(e){return console.error("Error fetching users:",e),t.status(500).json({success:!1,error:"Failed to fetch users"})}}let d=(0,u.l)(s,"default"),l=(0,u.l)(s,"config"),f=new a.PagesAPIRouteModule({definition:{kind:n.x.PAGES_API,page:"/api/v1/admin/users",pathname:"/api/v1/admin/users",bundlePath:"",filename:""},userland:s})},3481:(e,t,r)=>{r.d(t,{K:()=>n});var s=r(1450),a=r(1026);let n={async getUserById(e){let t=await s.Z.user.findUnique({where:{id:e},select:{id:!0,username:!0,avatarUrl:!0,role:!0,status:!0,createdAt:!0,lastLogin:!0}});return t?{...t,role:t.role,createdAt:t.createdAt.toISOString(),lastLogin:t.lastLogin?.toISOString()||new Date().toISOString(),avatarUrl:t.avatarUrl||""}:null},getUserByUsername:async e=>s.Z.user.findUnique({where:{username:e}}),async createUser(e,t,r){let n=await (0,a.c_)(t),u=`https://api.dicebear.com/7.x/avataaars/svg?seed=${e}`;return s.Z.user.create({data:{username:e,password:n,avatarUrl:u,role:"CREATOR",status:"ACTIVE"}})},async authenticateUser(e,t){let r=await this.getUserByUsername(e);return r&&r.password&&await (0,a.Gv)(t,r.password)?(await s.Z.user.update({where:{id:r.id},data:{lastLogin:new Date}}),{id:r.id,username:r.username,avatarUrl:r.avatarUrl||"",role:r.role,status:r.status,createdAt:r.createdAt.toISOString(),lastLogin:new Date().toISOString()}):null},getAllUsers:async()=>s.Z.user.findMany({orderBy:{createdAt:"desc"}}),updateUser:async(e,t)=>s.Z.user.update({where:{id:e},data:{username:t.username,avatarUrl:t.avatarUrl}}),updateUserRole:async(e,t)=>s.Z.user.update({where:{id:e},data:{role:t}}),async toggleUserStatus(e){let t=await s.Z.user.findUnique({where:{id:e}});if(!t)throw Error("User not found");let r="ACTIVE"===t.status?"BANNED":"ACTIVE";return s.Z.user.update({where:{id:e},data:{status:r}})}}},1026:(e,t,r)=>{r.d(t,{Gv:()=>c,RA:()=>d,WX:()=>l,c_:()=>o});var s=r(7096),a=r.n(s),n=r(9344),u=r.n(n);function i(){let e=process.env.JWT_SECRET;if(!e)throw Error("JWT_SECRET is not set");return e}async function o(e){return a().hash(e,10)}async function c(e,t){return a().compare(e,t)}function d(e){return u().sign({userId:e},i(),{expiresIn:"7d"})}function l(e){try{return u().verify(e,i())}catch(e){return null}}},2944:(e,t,r)=>{r.d(t,{k:()=>n});var s=r(8103),a=r(7556);async function n(e,t){return!!await (0,s.m)(e,t)&&(e.user?.role===a.i.ADMIN||(t.status(403).json({success:!1,error:"Admin access required"}),!1))}},8103:(e,t,r)=>{r.d(t,{R:()=>u,m:()=>n});var s=r(1026),a=r(3481);async function n(e,t){let r=i(e);if(!r)return t.status(401).json({success:!1,error:"Authentication required"}),!1;let n=(0,s.WX)(r);if(!n)return t.status(401).json({success:!1,error:"Invalid or expired token"}),!1;let u=await a.K.getUserById(n.userId);return u?"BANNED"===u.status?(t.status(403).json({success:!1,error:"Account has been banned"}),!1):(e.user=u,!0):(t.status(401).json({success:!1,error:"User not found"}),!1)}async function u(e){let t=i(e);if(!t)return;let r=(0,s.WX)(t);if(!r)return;let n=await a.K.getUserById(r.userId);n&&"BANNED"!==n.status&&(e.user=n)}function i(e){if(e.cookies.token)return e.cookies.token;let t=e.headers.authorization;return t&&t.startsWith("Bearer ")?t.substring(7):null}},1450:(e,t,r)=>{r.d(t,{Z:()=>a});var s=r(3524);let a=globalThis.prisma??new s.PrismaClient},7556:(e,t,r)=>{var s,a;r.d(t,{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={}))},7153:(e,t)=>{var r;Object.defineProperty(t,"x",{enumerable:!0,get:function(){return r}}),function(e){e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE"}(r||(r={}))},1802:(e,t,r)=>{e.exports=r(145)}};var t=require("../../../../webpack-api-runtime.js");t.C(e);var r=t(t.s=1717);module.exports=r})();

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=68,e.ids=[68],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")},6249:(e,r)=>{Object.defineProperty(r,"l",{enumerable:!0,get:function(){return function e(r,t){return t in r?r[t]:"then"in r&&"function"==typeof r.then?r.then(r=>e(r,t)):"function"==typeof r&&"default"===t?r:void 0}}})},3824:(e,r,t)=>{t.r(r),t.d(r,{config:()=>l,default:()=>c,routeModule:()=>f});var a={};t.r(a),t.d(a,{default:()=>d});var s=t(1802),n=t(7153),u=t(6249),i=t(2944),o=t(3481);async function d(e,r){if("POST"!==e.method)return r.status(405).json({success:!1,error:"Method not allowed"});if(!await (0,i.k)(e,r))return;let{id:t}=e.query,{role:a}=e.body||{};if("string"!=typeof t||"string"!=typeof a)return r.status(400).json({success:!1,error:"Invalid input"});try{let e=await o.K.updateUserRole(t,a);return r.status(200).json({success:!0,data:e})}catch(e){return console.error("Error updating role:",e),r.status(500).json({success:!1,error:"Failed to update role"})}}let c=(0,u.l)(a,"default"),l=(0,u.l)(a,"config"),f=new s.PagesAPIRouteModule({definition:{kind:n.x.PAGES_API,page:"/api/v1/admin/users/[id]/role",pathname:"/api/v1/admin/users/[id]/role",bundlePath:"",filename:""},userland:a})},3481:(e,r,t)=>{t.d(r,{K:()=>n});var a=t(1450),s=t(1026);let n={async getUserById(e){let r=await a.Z.user.findUnique({where:{id:e},select:{id:!0,username:!0,avatarUrl:!0,role:!0,status:!0,createdAt:!0,lastLogin:!0}});return r?{...r,role:r.role,createdAt:r.createdAt.toISOString(),lastLogin:r.lastLogin?.toISOString()||new Date().toISOString(),avatarUrl:r.avatarUrl||""}:null},getUserByUsername:async e=>a.Z.user.findUnique({where:{username:e}}),async createUser(e,r,t){let n=await (0,s.c_)(r),u=`https://api.dicebear.com/7.x/avataaars/svg?seed=${e}`;return a.Z.user.create({data:{username:e,password:n,avatarUrl:u,role:"CREATOR",status:"ACTIVE"}})},async authenticateUser(e,r){let t=await this.getUserByUsername(e);return t&&t.password&&await (0,s.Gv)(r,t.password)?(await a.Z.user.update({where:{id:t.id},data:{lastLogin:new Date}}),{id:t.id,username:t.username,avatarUrl:t.avatarUrl||"",role:t.role,status:t.status,createdAt:t.createdAt.toISOString(),lastLogin:new Date().toISOString()}):null},getAllUsers:async()=>a.Z.user.findMany({orderBy:{createdAt:"desc"}}),updateUser:async(e,r)=>a.Z.user.update({where:{id:e},data:{username:r.username,avatarUrl:r.avatarUrl}}),updateUserRole:async(e,r)=>a.Z.user.update({where:{id:e},data:{role:r}}),async toggleUserStatus(e){let r=await a.Z.user.findUnique({where:{id:e}});if(!r)throw Error("User not found");let t="ACTIVE"===r.status?"BANNED":"ACTIVE";return a.Z.user.update({where:{id:e},data:{status:t}})}}},1026:(e,r,t)=>{t.d(r,{Gv:()=>d,RA:()=>c,WX:()=>l,c_:()=>o});var a=t(7096),s=t.n(a),n=t(9344),u=t.n(n);function i(){let e=process.env.JWT_SECRET;if(!e)throw Error("JWT_SECRET is not set");return e}async function o(e){return s().hash(e,10)}async function d(e,r){return s().compare(e,r)}function c(e){return u().sign({userId:e},i(),{expiresIn:"7d"})}function l(e){try{return u().verify(e,i())}catch(e){return null}}},2944:(e,r,t)=>{t.d(r,{k:()=>n});var a=t(8103),s=t(7556);async function n(e,r){return!!await (0,a.m)(e,r)&&(e.user?.role===s.i.ADMIN||(r.status(403).json({success:!1,error:"Admin access required"}),!1))}},8103:(e,r,t)=>{t.d(r,{R:()=>u,m:()=>n});var a=t(1026),s=t(3481);async function n(e,r){let t=i(e);if(!t)return r.status(401).json({success:!1,error:"Authentication required"}),!1;let n=(0,a.WX)(t);if(!n)return r.status(401).json({success:!1,error:"Invalid or expired token"}),!1;let u=await s.K.getUserById(n.userId);return u?"BANNED"===u.status?(r.status(403).json({success:!1,error:"Account has been banned"}),!1):(e.user=u,!0):(r.status(401).json({success:!1,error:"User not found"}),!1)}async function u(e){let r=i(e);if(!r)return;let t=(0,a.WX)(r);if(!t)return;let n=await s.K.getUserById(t.userId);n&&"BANNED"!==n.status&&(e.user=n)}function i(e){if(e.cookies.token)return e.cookies.token;let r=e.headers.authorization;return r&&r.startsWith("Bearer ")?r.substring(7):null}},1450:(e,r,t)=>{t.d(r,{Z:()=>s});var a=t(3524);let s=globalThis.prisma??new a.PrismaClient},7556:(e,r,t)=>{var a,s;t.d(r,{i:()=>a}),function(e){e.USER="USER",e.ADMIN="ADMIN",e.CREATOR="CREATOR",e.MANAGER="MANAGER"}(a||(a={})),function(e){e.CODE="CODE",e.ASSET_ZIP="ASSET_ZIP",e.VIDEO="VIDEO"}(s||(s={}))},7153:(e,r)=>{var t;Object.defineProperty(r,"x",{enumerable:!0,get:function(){return t}}),function(e){e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE"}(t||(t={}))},1802:(e,r,t)=>{e.exports=t(145)}};var r=require("../../../../../../webpack-api-runtime.js");r.C(e);var t=r(r.s=3824);module.exports=t})();

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=691,e.ids=[691],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")},6249:(e,t)=>{Object.defineProperty(t,"l",{enumerable:!0,get:function(){return function e(t,r){return r in t?t[r]:"then"in t&&"function"==typeof t.then?t.then(t=>e(t,r)):"function"==typeof t&&"default"===r?t:void 0}}})},5113:(e,t,r)=>{r.r(t),r.d(t,{config:()=>l,default:()=>d,routeModule:()=>f});var s={};r.r(s),r.d(s,{default:()=>c});var a=r(1802),n=r(7153),u=r(6249),i=r(2944),o=r(3481);async function c(e,t){if("POST"!==e.method)return t.status(405).json({success:!1,error:"Method not allowed"});if(!await (0,i.k)(e,t))return;let{id:r}=e.query;if("string"!=typeof r)return t.status(400).json({success:!1,error:"Invalid user ID"});try{let e=await o.K.toggleUserStatus(r);return t.status(200).json({success:!0,data:e})}catch(e){return console.error("Error toggling user status:",e),t.status(500).json({success:!1,error:"Failed to toggle user status"})}}let d=(0,u.l)(s,"default"),l=(0,u.l)(s,"config"),f=new a.PagesAPIRouteModule({definition:{kind:n.x.PAGES_API,page:"/api/v1/admin/users/[id]/toggle-status",pathname:"/api/v1/admin/users/[id]/toggle-status",bundlePath:"",filename:""},userland:s})},3481:(e,t,r)=>{r.d(t,{K:()=>n});var s=r(1450),a=r(1026);let n={async getUserById(e){let t=await s.Z.user.findUnique({where:{id:e},select:{id:!0,username:!0,avatarUrl:!0,role:!0,status:!0,createdAt:!0,lastLogin:!0}});return t?{...t,role:t.role,createdAt:t.createdAt.toISOString(),lastLogin:t.lastLogin?.toISOString()||new Date().toISOString(),avatarUrl:t.avatarUrl||""}:null},getUserByUsername:async e=>s.Z.user.findUnique({where:{username:e}}),async createUser(e,t,r){let n=await (0,a.c_)(t),u=`https://api.dicebear.com/7.x/avataaars/svg?seed=${e}`;return s.Z.user.create({data:{username:e,password:n,avatarUrl:u,role:"CREATOR",status:"ACTIVE"}})},async authenticateUser(e,t){let r=await this.getUserByUsername(e);return r&&r.password&&await (0,a.Gv)(t,r.password)?(await s.Z.user.update({where:{id:r.id},data:{lastLogin:new Date}}),{id:r.id,username:r.username,avatarUrl:r.avatarUrl||"",role:r.role,status:r.status,createdAt:r.createdAt.toISOString(),lastLogin:new Date().toISOString()}):null},getAllUsers:async()=>s.Z.user.findMany({orderBy:{createdAt:"desc"}}),updateUser:async(e,t)=>s.Z.user.update({where:{id:e},data:{username:t.username,avatarUrl:t.avatarUrl}}),updateUserRole:async(e,t)=>s.Z.user.update({where:{id:e},data:{role:t}}),async toggleUserStatus(e){let t=await s.Z.user.findUnique({where:{id:e}});if(!t)throw Error("User not found");let r="ACTIVE"===t.status?"BANNED":"ACTIVE";return s.Z.user.update({where:{id:e},data:{status:r}})}}},1026:(e,t,r)=>{r.d(t,{Gv:()=>c,RA:()=>d,WX:()=>l,c_:()=>o});var s=r(7096),a=r.n(s),n=r(9344),u=r.n(n);function i(){let e=process.env.JWT_SECRET;if(!e)throw Error("JWT_SECRET is not set");return e}async function o(e){return a().hash(e,10)}async function c(e,t){return a().compare(e,t)}function d(e){return u().sign({userId:e},i(),{expiresIn:"7d"})}function l(e){try{return u().verify(e,i())}catch(e){return null}}},2944:(e,t,r)=>{r.d(t,{k:()=>n});var s=r(8103),a=r(7556);async function n(e,t){return!!await (0,s.m)(e,t)&&(e.user?.role===a.i.ADMIN||(t.status(403).json({success:!1,error:"Admin access required"}),!1))}},8103:(e,t,r)=>{r.d(t,{R:()=>u,m:()=>n});var s=r(1026),a=r(3481);async function n(e,t){let r=i(e);if(!r)return t.status(401).json({success:!1,error:"Authentication required"}),!1;let n=(0,s.WX)(r);if(!n)return t.status(401).json({success:!1,error:"Invalid or expired token"}),!1;let u=await a.K.getUserById(n.userId);return u?"BANNED"===u.status?(t.status(403).json({success:!1,error:"Account has been banned"}),!1):(e.user=u,!0):(t.status(401).json({success:!1,error:"User not found"}),!1)}async function u(e){let t=i(e);if(!t)return;let r=(0,s.WX)(t);if(!r)return;let n=await a.K.getUserById(r.userId);n&&"BANNED"!==n.status&&(e.user=n)}function i(e){if(e.cookies.token)return e.cookies.token;let t=e.headers.authorization;return t&&t.startsWith("Bearer ")?t.substring(7):null}},1450:(e,t,r)=>{r.d(t,{Z:()=>a});var s=r(3524);let a=globalThis.prisma??new s.PrismaClient},7556:(e,t,r)=>{var s,a;r.d(t,{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={}))},7153:(e,t)=>{var r;Object.defineProperty(t,"x",{enumerable:!0,get:function(){return r}}),function(e){e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE"}(r||(r={}))},1802:(e,t,r)=>{e.exports=r(145)}};var t=require("../../../../../../webpack-api-runtime.js");t.C(e);var r=t(t.s=5113);module.exports=r})();

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=396,e.ids=[396],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")},6249:(e,t)=>{Object.defineProperty(t,"l",{enumerable:!0,get:function(){return function e(t,r){return r in t?t[r]:"then"in t&&"function"==typeof t.then?t.then(t=>e(t,r)):"function"==typeof t&&"default"===r?t:void 0}}})},8995:(e,t,r)=>{r.r(t),r.d(t,{config:()=>l,default:()=>c,routeModule:()=>p});var a={};r.r(a),r.d(a,{default:()=>d});var s=r(1802),n=r(7153),u=r(6249),i=r(3481),o=r(1026);async function d(e,t){if("POST"!==e.method)return t.status(405).json({success:!1,error:"Method not allowed"});try{let{username:r,password:a}=e.body;if(!r||!a)return t.status(400).json({success:!1,error:"Username and password are required"});let s=await i.K.authenticateUser(r,a);if(!s)return t.status(401).json({success:!1,error:"Invalid username or password"});if("BANNED"===s.status)return t.status(403).json({success:!1,error:"Account has been banned"});let n=(0,o.RA)(s.id);return t.setHeader("Set-Cookie",`token=${n}; HttpOnly; Path=/; Max-Age=604800; SameSite=Strict`),t.status(200).json({success:!0,data:{user:s,token:n}})}catch(e){return console.error("Login error:",e),t.status(500).json({success:!1,error:"Login failed"})}}let c=(0,u.l)(a,"default"),l=(0,u.l)(a,"config"),p=new s.PagesAPIRouteModule({definition:{kind:n.x.PAGES_API,page:"/api/v1/auth/login",pathname:"/api/v1/auth/login",bundlePath:"",filename:""},userland:a})},3481:(e,t,r)=>{r.d(t,{K:()=>n});var a=r(1450),s=r(1026);let n={async getUserById(e){let t=await a.Z.user.findUnique({where:{id:e},select:{id:!0,username:!0,avatarUrl:!0,role:!0,status:!0,createdAt:!0,lastLogin:!0}});return t?{...t,role:t.role,createdAt:t.createdAt.toISOString(),lastLogin:t.lastLogin?.toISOString()||new Date().toISOString(),avatarUrl:t.avatarUrl||""}:null},getUserByUsername:async e=>a.Z.user.findUnique({where:{username:e}}),async createUser(e,t,r){let n=await (0,s.c_)(t),u=`https://api.dicebear.com/7.x/avataaars/svg?seed=${e}`;return a.Z.user.create({data:{username:e,password:n,avatarUrl:u,role:"CREATOR",status:"ACTIVE"}})},async authenticateUser(e,t){let r=await this.getUserByUsername(e);return r&&r.password&&await (0,s.Gv)(t,r.password)?(await a.Z.user.update({where:{id:r.id},data:{lastLogin:new Date}}),{id:r.id,username:r.username,avatarUrl:r.avatarUrl||"",role:r.role,status:r.status,createdAt:r.createdAt.toISOString(),lastLogin:new Date().toISOString()}):null},getAllUsers:async()=>a.Z.user.findMany({orderBy:{createdAt:"desc"}}),updateUser:async(e,t)=>a.Z.user.update({where:{id:e},data:{username:t.username,avatarUrl:t.avatarUrl}}),updateUserRole:async(e,t)=>a.Z.user.update({where:{id:e},data:{role:t}}),async toggleUserStatus(e){let t=await a.Z.user.findUnique({where:{id:e}});if(!t)throw Error("User not found");let r="ACTIVE"===t.status?"BANNED":"ACTIVE";return a.Z.user.update({where:{id:e},data:{status:r}})}}},1026:(e,t,r)=>{r.d(t,{Gv:()=>d,RA:()=>c,WX:()=>l,c_:()=>o});var a=r(7096),s=r.n(a),n=r(9344),u=r.n(n);function i(){let e=process.env.JWT_SECRET;if(!e)throw Error("JWT_SECRET is not set");return e}async function o(e){return s().hash(e,10)}async function d(e,t){return s().compare(e,t)}function c(e){return u().sign({userId:e},i(),{expiresIn:"7d"})}function l(e){try{return u().verify(e,i())}catch(e){return null}}},1450:(e,t,r)=>{r.d(t,{Z:()=>s});var a=r(3524);let s=globalThis.prisma??new a.PrismaClient},7153:(e,t)=>{var r;Object.defineProperty(t,"x",{enumerable:!0,get:function(){return r}}),function(e){e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE"}(r||(r={}))},1802:(e,t,r)=>{e.exports=r(145)}};var t=require("../../../../webpack-api-runtime.js");t.C(e);var r=t(t.s=8995);module.exports=r})();

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=502,e.ids=[502],e.modules={145:e=>{e.exports=require("next/dist/compiled/next-server/pages-api.runtime.prod.js")},6249:(e,t)=>{Object.defineProperty(t,"l",{enumerable:!0,get:function(){return function e(t,n){return n in t?t[n]:"then"in t&&"function"==typeof t.then?t.then(t=>e(t,n)):"function"==typeof t&&"default"===n?t:void 0}}})},8930:(e,t,n)=>{n.r(t),n.d(t,{config:()=>d,default:()=>s,routeModule:()=>l});var o={};n.r(o),n.d(o,{default:()=>i});var r=n(1802),u=n(7153),a=n(6249);async function i(e,t){return"POST"!==e.method?t.status(405).json({success:!1,error:"Method not allowed"}):(t.setHeader("Set-Cookie","token=; HttpOnly; Path=/; Max-Age=0; SameSite=Strict"),t.status(200).json({success:!0,message:"Logged out successfully"}))}let s=(0,a.l)(o,"default"),d=(0,a.l)(o,"config"),l=new r.PagesAPIRouteModule({definition:{kind:u.x.PAGES_API,page:"/api/v1/auth/logout",pathname:"/api/v1/auth/logout",bundlePath:"",filename:""},userland:o})},7153:(e,t)=>{var n;Object.defineProperty(t,"x",{enumerable:!0,get:function(){return n}}),function(e){e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE"}(n||(n={}))},1802:(e,t,n)=>{e.exports=n(145)}};var t=require("../../../../webpack-api-runtime.js");t.C(e);var n=t(t.s=8930);module.exports=n})();

View File

@@ -0,0 +1 @@
{"version":1,"files":["../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/index.js","../../../../../../node_modules/next/dist/compiled/@opentelemetry/api/package.json","../../../../../../node_modules/next/dist/compiled/bytes/index.js","../../../../../../node_modules/next/dist/compiled/bytes/package.json","../../../../../../node_modules/next/dist/compiled/jsonwebtoken/index.js","../../../../../../node_modules/next/dist/compiled/jsonwebtoken/package.json","../../../../../../node_modules/next/dist/compiled/next-server/pages-api.runtime.prod.js","../../../../../../node_modules/next/dist/compiled/raw-body/index.js","../../../../../../node_modules/next/dist/compiled/raw-body/package.json","../../../../../../node_modules/next/dist/lib/semver-noop.js","../../../../../../node_modules/next/dist/server/lib/trace/constants.js","../../../../../../node_modules/next/dist/server/lib/trace/tracer.js","../../../../../../node_modules/next/package.json","../../../../../../package.json","../../../../../package.json","../../../../webpack-api-runtime.js"]}

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=51,e.ids=[51],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")},6249:(e,t)=>{Object.defineProperty(t,"l",{enumerable:!0,get:function(){return function e(t,r){return r in t?t[r]:"then"in t&&"function"==typeof t.then?t.then(t=>e(t,r)):"function"==typeof t&&"default"===r?t:void 0}}})},6023:(e,t,r)=>{r.r(t),r.d(t,{config:()=>c,default:()=>d,routeModule:()=>l});var a={};r.r(a),r.d(a,{default:()=>o});var s=r(1802),n=r(7153),u=r(6249),i=r(8103);async function o(e,t){return"GET"!==e.method?t.status(405).json({success:!1,error:"Method not allowed"}):await (0,i.m)(e,t)?t.status(200).json({success:!0,data:e.user}):void 0}let d=(0,u.l)(a,"default"),c=(0,u.l)(a,"config"),l=new s.PagesAPIRouteModule({definition:{kind:n.x.PAGES_API,page:"/api/v1/auth/me",pathname:"/api/v1/auth/me",bundlePath:"",filename:""},userland:a})},3481:(e,t,r)=>{r.d(t,{K:()=>n});var a=r(1450),s=r(1026);let n={async getUserById(e){let t=await a.Z.user.findUnique({where:{id:e},select:{id:!0,username:!0,avatarUrl:!0,role:!0,status:!0,createdAt:!0,lastLogin:!0}});return t?{...t,role:t.role,createdAt:t.createdAt.toISOString(),lastLogin:t.lastLogin?.toISOString()||new Date().toISOString(),avatarUrl:t.avatarUrl||""}:null},getUserByUsername:async e=>a.Z.user.findUnique({where:{username:e}}),async createUser(e,t,r){let n=await (0,s.c_)(t),u=`https://api.dicebear.com/7.x/avataaars/svg?seed=${e}`;return a.Z.user.create({data:{username:e,password:n,avatarUrl:u,role:"CREATOR",status:"ACTIVE"}})},async authenticateUser(e,t){let r=await this.getUserByUsername(e);return r&&r.password&&await (0,s.Gv)(t,r.password)?(await a.Z.user.update({where:{id:r.id},data:{lastLogin:new Date}}),{id:r.id,username:r.username,avatarUrl:r.avatarUrl||"",role:r.role,status:r.status,createdAt:r.createdAt.toISOString(),lastLogin:new Date().toISOString()}):null},getAllUsers:async()=>a.Z.user.findMany({orderBy:{createdAt:"desc"}}),updateUser:async(e,t)=>a.Z.user.update({where:{id:e},data:{username:t.username,avatarUrl:t.avatarUrl}}),updateUserRole:async(e,t)=>a.Z.user.update({where:{id:e},data:{role:t}}),async toggleUserStatus(e){let t=await a.Z.user.findUnique({where:{id:e}});if(!t)throw Error("User not found");let r="ACTIVE"===t.status?"BANNED":"ACTIVE";return a.Z.user.update({where:{id:e},data:{status:r}})}}},1026:(e,t,r)=>{r.d(t,{Gv:()=>d,RA:()=>c,WX:()=>l,c_:()=>o});var a=r(7096),s=r.n(a),n=r(9344),u=r.n(n);function i(){let e=process.env.JWT_SECRET;if(!e)throw Error("JWT_SECRET is not set");return e}async function o(e){return s().hash(e,10)}async function d(e,t){return s().compare(e,t)}function c(e){return u().sign({userId:e},i(),{expiresIn:"7d"})}function l(e){try{return u().verify(e,i())}catch(e){return null}}},8103:(e,t,r)=>{r.d(t,{R:()=>u,m:()=>n});var a=r(1026),s=r(3481);async function n(e,t){let r=i(e);if(!r)return t.status(401).json({success:!1,error:"Authentication required"}),!1;let n=(0,a.WX)(r);if(!n)return t.status(401).json({success:!1,error:"Invalid or expired token"}),!1;let u=await s.K.getUserById(n.userId);return u?"BANNED"===u.status?(t.status(403).json({success:!1,error:"Account has been banned"}),!1):(e.user=u,!0):(t.status(401).json({success:!1,error:"User not found"}),!1)}async function u(e){let t=i(e);if(!t)return;let r=(0,a.WX)(t);if(!r)return;let n=await s.K.getUserById(r.userId);n&&"BANNED"!==n.status&&(e.user=n)}function i(e){if(e.cookies.token)return e.cookies.token;let t=e.headers.authorization;return t&&t.startsWith("Bearer ")?t.substring(7):null}},1450:(e,t,r)=>{r.d(t,{Z:()=>s});var a=r(3524);let s=globalThis.prisma??new a.PrismaClient},7153:(e,t)=>{var r;Object.defineProperty(t,"x",{enumerable:!0,get:function(){return r}}),function(e){e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE"}(r||(r={}))},1802:(e,t,r)=>{e.exports=r(145)}};var t=require("../../../../webpack-api-runtime.js");t.C(e);var r=t(t.s=6023);module.exports=r})();

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=519,e.ids=[519],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")},6249:(e,r)=>{Object.defineProperty(r,"l",{enumerable:!0,get:function(){return function e(r,t){return t in r?r[t]:"then"in r&&"function"==typeof r.then?r.then(r=>e(r,t)):"function"==typeof r&&"default"===t?r:void 0}}})},1833:(e,r,t)=>{t.r(r),t.d(r,{config:()=>c,default:()=>l,routeModule:()=>p});var a={};t.r(a),t.d(a,{default:()=>d});var s=t(1802),n=t(7153),u=t(6249),i=t(3481),o=t(1026);async function d(e,r){if("POST"!==e.method)return r.status(405).json({success:!1,error:"Method not allowed"});try{let{username:t,password:a,email:s}=e.body;if(!t||!a)return r.status(400).json({success:!1,error:"Username and password are required"});if(t.length<3)return r.status(400).json({success:!1,error:"Username must be at least 3 characters"});if(a.length<6)return r.status(400).json({success:!1,error:"Password must be at least 6 characters"});if(await i.K.getUserByUsername(t))return r.status(409).json({success:!1,error:"Username already taken"});let n=await i.K.createUser(t,a,s),u=(0,o.RA)(n.id);return r.setHeader("Set-Cookie",`token=${u}; HttpOnly; Path=/; Max-Age=604800; SameSite=Strict`),r.status(201).json({success:!0,data:{user:{id:n.id,username:n.username,avatarUrl:n.avatarUrl,role:n.role,status:n.status},token:u}})}catch(e){return console.error("Registration error:",e),r.status(500).json({success:!1,error:"Registration failed"})}}let l=(0,u.l)(a,"default"),c=(0,u.l)(a,"config"),p=new s.PagesAPIRouteModule({definition:{kind:n.x.PAGES_API,page:"/api/v1/auth/register",pathname:"/api/v1/auth/register",bundlePath:"",filename:""},userland:a})},3481:(e,r,t)=>{t.d(r,{K:()=>n});var a=t(1450),s=t(1026);let n={async getUserById(e){let r=await a.Z.user.findUnique({where:{id:e},select:{id:!0,username:!0,avatarUrl:!0,role:!0,status:!0,createdAt:!0,lastLogin:!0}});return r?{...r,role:r.role,createdAt:r.createdAt.toISOString(),lastLogin:r.lastLogin?.toISOString()||new Date().toISOString(),avatarUrl:r.avatarUrl||""}:null},getUserByUsername:async e=>a.Z.user.findUnique({where:{username:e}}),async createUser(e,r,t){let n=await (0,s.c_)(r),u=`https://api.dicebear.com/7.x/avataaars/svg?seed=${e}`;return a.Z.user.create({data:{username:e,password:n,avatarUrl:u,role:"CREATOR",status:"ACTIVE"}})},async authenticateUser(e,r){let t=await this.getUserByUsername(e);return t&&t.password&&await (0,s.Gv)(r,t.password)?(await a.Z.user.update({where:{id:t.id},data:{lastLogin:new Date}}),{id:t.id,username:t.username,avatarUrl:t.avatarUrl||"",role:t.role,status:t.status,createdAt:t.createdAt.toISOString(),lastLogin:new Date().toISOString()}):null},getAllUsers:async()=>a.Z.user.findMany({orderBy:{createdAt:"desc"}}),updateUser:async(e,r)=>a.Z.user.update({where:{id:e},data:{username:r.username,avatarUrl:r.avatarUrl}}),updateUserRole:async(e,r)=>a.Z.user.update({where:{id:e},data:{role:r}}),async toggleUserStatus(e){let r=await a.Z.user.findUnique({where:{id:e}});if(!r)throw Error("User not found");let t="ACTIVE"===r.status?"BANNED":"ACTIVE";return a.Z.user.update({where:{id:e},data:{status:t}})}}},1026:(e,r,t)=>{t.d(r,{Gv:()=>d,RA:()=>l,WX:()=>c,c_:()=>o});var a=t(7096),s=t.n(a),n=t(9344),u=t.n(n);function i(){let e=process.env.JWT_SECRET;if(!e)throw Error("JWT_SECRET is not set");return e}async function o(e){return s().hash(e,10)}async function d(e,r){return s().compare(e,r)}function l(e){return u().sign({userId:e},i(),{expiresIn:"7d"})}function c(e){try{return u().verify(e,i())}catch(e){return null}}},1450:(e,r,t)=>{t.d(r,{Z:()=>s});var a=t(3524);let s=globalThis.prisma??new a.PrismaClient},7153:(e,r)=>{var t;Object.defineProperty(r,"x",{enumerable:!0,get:function(){return t}}),function(e){e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE"}(t||(t={}))},1802:(e,r,t)=>{e.exports=t(145)}};var r=require("../../../../webpack-api-runtime.js");r.C(e);var t=r(r.s=1833);module.exports=t})();

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=113,e.ids=[113],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")},5458:(e,r,t)=>{t.r(r),t.d(r,{config:()=>d,default:()=>c,routeModule:()=>p});var a={};t.r(a),t.d(a,{default:()=>l});var s=t(1802),i=t(7153),o=t(6249),u=t(8103),n=t(432);async function l(e,r){if("GET"===e.method){await (0,u.R)(e);try{let t=e.query.type,a=parseInt(e.query.page||"1",10)||1,s=parseInt(e.query.limit||"20",10)||20,i=e.query.q||"",{items:o,total:u}=await n.U.getAllMaterials(t,a,s,i),l=a*s<u;return r.status(200).json({success:!0,data:{items:o,total:u,page:a,limit:s,hasNext:l}})}catch(e){return console.error("Error fetching materials:",e),r.status(500).json({success:!1,error:"Failed to fetch materials"})}}if("POST"===e.method){if(!await (0,u.m)(e,r))return;try{let t=await n.U.createMaterial(e.user.id,e.body);return r.status(201).json({success:!0,data:t})}catch(e){return console.error("Error creating material:",e),r.status(500).json({success:!1,error:"Failed to create material"})}}return r.status(405).json({success:!1,error:"Method not allowed"})}let c=(0,o.l)(a,"default"),d=(0,o.l)(a,"config"),p=new s.PagesAPIRouteModule({definition:{kind:i.x.PAGES_API,page:"/api/v1/materials",pathname:"/api/v1/materials",bundlePath:"",filename:""},userland:a})}};var r=require("../../../webpack-api-runtime.js");r.C(e);var t=e=>r(r.s=e),a=r.X(0,[876],()=>t(5458));module.exports=a})();

File diff suppressed because one or more lines are too long

View 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})();

File diff suppressed because one or more lines are too long

View 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

View 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

View 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

View 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

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=701,e.ids=[701],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")},6249:(e,t)=>{Object.defineProperty(t,"l",{enumerable:!0,get:function(){return function e(t,r){return r in t?t[r]:"then"in t&&"function"==typeof t.then?t.then(t=>e(t,r)):"function"==typeof t&&"default"===r?t:void 0}}})},7337:(e,t,r)=>{r.r(t),r.d(t,{config:()=>l,default:()=>c,routeModule:()=>f});var a={};r.r(a),r.d(a,{default:()=>d});var s=r(1802),n=r(7153),u=r(6249),i=r(8103),o=r(3481);async function d(e,t){if("PATCH"!==e.method)return t.status(405).json({success:!1,error:"Method not allowed"});if(await (0,i.m)(e,t))try{let{username:r,avatarUrl:a}=e.body,s=await o.K.updateUser(e.user.id,{username:r,avatarUrl:a});return t.status(200).json({success:!0,data:s})}catch(e){return console.error("Error updating user:",e),t.status(500).json({success:!1,error:"Failed to update user"})}}let c=(0,u.l)(a,"default"),l=(0,u.l)(a,"config"),f=new s.PagesAPIRouteModule({definition:{kind:n.x.PAGES_API,page:"/api/v1/users/me",pathname:"/api/v1/users/me",bundlePath:"",filename:""},userland:a})},3481:(e,t,r)=>{r.d(t,{K:()=>n});var a=r(1450),s=r(1026);let n={async getUserById(e){let t=await a.Z.user.findUnique({where:{id:e},select:{id:!0,username:!0,avatarUrl:!0,role:!0,status:!0,createdAt:!0,lastLogin:!0}});return t?{...t,role:t.role,createdAt:t.createdAt.toISOString(),lastLogin:t.lastLogin?.toISOString()||new Date().toISOString(),avatarUrl:t.avatarUrl||""}:null},getUserByUsername:async e=>a.Z.user.findUnique({where:{username:e}}),async createUser(e,t,r){let n=await (0,s.c_)(t),u=`https://api.dicebear.com/7.x/avataaars/svg?seed=${e}`;return a.Z.user.create({data:{username:e,password:n,avatarUrl:u,role:"CREATOR",status:"ACTIVE"}})},async authenticateUser(e,t){let r=await this.getUserByUsername(e);return r&&r.password&&await (0,s.Gv)(t,r.password)?(await a.Z.user.update({where:{id:r.id},data:{lastLogin:new Date}}),{id:r.id,username:r.username,avatarUrl:r.avatarUrl||"",role:r.role,status:r.status,createdAt:r.createdAt.toISOString(),lastLogin:new Date().toISOString()}):null},getAllUsers:async()=>a.Z.user.findMany({orderBy:{createdAt:"desc"}}),updateUser:async(e,t)=>a.Z.user.update({where:{id:e},data:{username:t.username,avatarUrl:t.avatarUrl}}),updateUserRole:async(e,t)=>a.Z.user.update({where:{id:e},data:{role:t}}),async toggleUserStatus(e){let t=await a.Z.user.findUnique({where:{id:e}});if(!t)throw Error("User not found");let r="ACTIVE"===t.status?"BANNED":"ACTIVE";return a.Z.user.update({where:{id:e},data:{status:r}})}}},1026:(e,t,r)=>{r.d(t,{Gv:()=>d,RA:()=>c,WX:()=>l,c_:()=>o});var a=r(7096),s=r.n(a),n=r(9344),u=r.n(n);function i(){let e=process.env.JWT_SECRET;if(!e)throw Error("JWT_SECRET is not set");return e}async function o(e){return s().hash(e,10)}async function d(e,t){return s().compare(e,t)}function c(e){return u().sign({userId:e},i(),{expiresIn:"7d"})}function l(e){try{return u().verify(e,i())}catch(e){return null}}},8103:(e,t,r)=>{r.d(t,{R:()=>u,m:()=>n});var a=r(1026),s=r(3481);async function n(e,t){let r=i(e);if(!r)return t.status(401).json({success:!1,error:"Authentication required"}),!1;let n=(0,a.WX)(r);if(!n)return t.status(401).json({success:!1,error:"Invalid or expired token"}),!1;let u=await s.K.getUserById(n.userId);return u?"BANNED"===u.status?(t.status(403).json({success:!1,error:"Account has been banned"}),!1):(e.user=u,!0):(t.status(401).json({success:!1,error:"User not found"}),!1)}async function u(e){let t=i(e);if(!t)return;let r=(0,a.WX)(t);if(!r)return;let n=await s.K.getUserById(r.userId);n&&"BANNED"!==n.status&&(e.user=n)}function i(e){if(e.cookies.token)return e.cookies.token;let t=e.headers.authorization;return t&&t.startsWith("Bearer ")?t.substring(7):null}},1450:(e,t,r)=>{r.d(t,{Z:()=>s});var a=r(3524);let s=globalThis.prisma??new a.PrismaClient},7153:(e,t)=>{var r;Object.defineProperty(t,"x",{enumerable:!0,get:function(){return r}}),function(e){e.PAGES="PAGES",e.PAGES_API="PAGES_API",e.APP_PAGE="APP_PAGE",e.APP_ROUTE="APP_ROUTE"}(r||(r={}))},1802:(e,t,r)=>{e.exports=r(145)}};var t=require("../../../../webpack-api-runtime.js");t.C(e);var r=t(t.s=7337);module.exports=r})();

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=762,e.ids=[762],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")},1991:(e,r,t)=>{t.r(r),t.d(r,{config:()=>p,default:()=>l,routeModule:()=>c});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);async function d(e,r){if("GET"!==e.method)return r.status(405).json({success:!1,error:"Method not allowed"});try{if(!await (0,u.m)(e,r))return;let t=parseInt(e.query.page||"1",10)||1,s=parseInt(e.query.limit||"20",10)||20,{items:a,total:i}=await n.U.getFavoritedMaterialsByUser(e.user.id,t,s),o=t*s<i;return r.status(200).json({success:!0,data:{items:a,total:i,page:t,limit:s,hasNext:o},timestamp:new Date().toISOString()})}catch(e){return console.error("Get user favorites error:",e),r.status(500).json({success:!1,error:e.message||"Failed to get favorites"})}}let l=(0,o.l)(s,"default"),p=(0,o.l)(s,"config"),c=new a.PagesAPIRouteModule({definition:{kind:i.x.PAGES_API,page:"/api/v1/users/me/favorites",pathname:"/api/v1/users/me/favorites",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(1991));module.exports=s})();

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
"use strict";(()=>{var e={};e.id=263,e.ids=[263],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")},8134:(e,r,t)=>{t.r(r),t.d(r,{config:()=>p,default:()=>d,routeModule:()=>m});var s={};t.r(s),t.d(s,{default:()=>l});var a=t(1802),i=t(7153),u=t(6249),o=t(8103),n=t(432);async function l(e,r){if("GET"!==e.method)return r.status(405).json({success:!1,error:"Method not allowed"});try{if(!await (0,o.m)(e,r))return;let{user:t}=e,s=parseInt(e.query.page||"1",10)||1,a=parseInt(e.query.limit||"20",10)||20,{items:i,total:u}=await n.U.getMaterialsByAuthor(t.id,s,a),l=s*a<u;return r.status(200).json({success:!0,data:{items:i,total:u,page:s,limit:a,hasNext:l},timestamp:new Date().toISOString()})}catch(e){return console.error("Get user materials error:",e),r.status(500).json({success:!1,error:e.message||"Failed to get materials"})}}let d=(0,u.l)(s,"default"),p=(0,u.l)(s,"config"),m=new a.PagesAPIRouteModule({definition:{kind:i.x.PAGES_API,page:"/api/v1/users/me/materials",pathname:"/api/v1/users/me/materials",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(8134));module.exports=s})();

File diff suppressed because one or more lines are too long