Nicholai 16cee69250 __Admin dashboard scaffolded with D1 database and R2 file uploads__
This commit implements the core admin dashboard functionality including NextAuth authentication, Cloudflare D1 database integration with complete schema, and Cloudflare R2 file upload system for portfolio images. Features include artist management, appointment scheduling, and data migration capabilities.
2025-09-17 16:08:34 -06:00

4 lines
4.8 KiB
JavaScript

"use strict";(()=>{var e={};e.id=5701,e.ids=[5701],e.modules={72934:e=>{e.exports=require("next/dist/client/components/action-async-storage.external.js")},54580:e=>{e.exports=require("next/dist/client/components/request-async-storage.external.js")},45869:e=>{e.exports=require("next/dist/client/components/static-generation-async-storage.external.js")},20399:e=>{e.exports=require("next/dist/compiled/next-server/app-page.runtime.prod.js")},30517:e=>{e.exports=require("next/dist/compiled/next-server/app-route.runtime.prod.js")},27790:e=>{e.exports=require("assert")},78893:e=>{e.exports=require("buffer")},84770:e=>{e.exports=require("crypto")},17702:e=>{e.exports=require("events")},32615:e=>{e.exports=require("http")},35240:e=>{e.exports=require("https")},86624:e=>{e.exports=require("querystring")},17360:e=>{e.exports=require("url")},21764:e=>{e.exports=require("util")},71568:e=>{e.exports=require("zlib")},56710:(e,r,t)=>{t.r(r),t.d(r,{originalPathname:()=>v,patchFetch:()=>O,requestAsyncStorage:()=>j,routeModule:()=>y,serverHooks:()=>R,staticGenerationAsyncStorage:()=>E});var n={};t.r(n),t.d(n,{GET:()=>x,POST:()=>m,dynamic:()=>d});var s=t(73278),o=t(45002),a=t(54877),i=t(71309),u=t(18445),p=t(33897),l=t(1035),c=t(29628);let d="force-dynamic",f=c.z.object({name:c.z.string().min(1),email:c.z.string().email(),role:c.z.enum(["SUPER_ADMIN","SHOP_ADMIN","ARTIST","CLIENT"])});async function x(e,{params:r}={},t){try{let r=await (0,u.getServerSession)(p.Lz);if(!r?.user)return i.NextResponse.json({error:"Unauthorized"},{status:401});let{searchParams:n}=new URL(e.url),s=n.get("email"),o=(0,l.VK)(t?.env);if(s){let e=o.prepare("SELECT * FROM users WHERE email = ?"),r=await e.bind(s).first();if(!r)return i.NextResponse.json({error:"User not found"},{status:404});return i.NextResponse.json({user:r})}{let e=o.prepare("SELECT * FROM users ORDER BY created_at DESC"),r=await e.all();return i.NextResponse.json({users:r.results})}}catch(e){return console.error("Error fetching users:",e),i.NextResponse.json({error:"Failed to fetch users"},{status:500})}}async function m(e,{params:r}={},t){try{let r=await (0,u.getServerSession)(p.Lz);if(!r?.user)return i.NextResponse.json({error:"Unauthorized"},{status:401});let n=await e.json(),s=f.parse(n),o=(0,l.VK)(t?.env),a=o.prepare("SELECT id FROM users WHERE email = ?"),c=await a.bind(s.email).first();if(c)return i.NextResponse.json({user:c});let d=crypto.randomUUID(),x=o.prepare(`
INSERT INTO users (id, email, name, role, created_at, updated_at)
VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP)
`);await x.bind(d,s.email,s.name,s.role).run();let m=o.prepare("SELECT * FROM users WHERE id = ?"),y=await m.bind(d).first();return i.NextResponse.json({user:y},{status:201})}catch(e){if(console.error("Error creating user:",e),e instanceof c.z.ZodError)return i.NextResponse.json({error:"Invalid user data",details:e.errors},{status:400});return i.NextResponse.json({error:"Failed to create user"},{status:500})}}let y=new s.AppRouteRouteModule({definition:{kind:o.x.APP_ROUTE,page:"/api/users/route",pathname:"/api/users",filename:"route",bundlePath:"app/api/users/route"},resolvedPagePath:"/home/Nicholai/Documents/Dev/united_v03/united-tattoo/united-tattoo/app/api/users/route.ts",nextConfigOutput:"standalone",userland:n}),{requestAsyncStorage:j,staticGenerationAsyncStorage:E,serverHooks:R}=y,v="/api/users/route";function O(){return(0,a.patchFetch)({serverHooks:R,staticGenerationAsyncStorage:E})}},32482:(e,r)=>{Object.defineProperty(r,"__esModule",{value:!0})},18445:(e,r,t)=>{Object.defineProperty(r,"__esModule",{value:!0});var n={};Object.defineProperty(r,"default",{enumerable:!0,get:function(){return o.default}});var s=t(32482);Object.keys(s).forEach(function(e){!("default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(n,e))&&(e in r&&r[e]===s[e]||Object.defineProperty(r,e,{enumerable:!0,get:function(){return s[e]}}))});var o=function(e,r){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=a(void 0);if(t&&t.has(e))return t.get(e);var n={__proto__:null},s=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var o in e)if("default"!==o&&({}).hasOwnProperty.call(e,o)){var i=s?Object.getOwnPropertyDescriptor(e,o):null;i&&(i.get||i.set)?Object.defineProperty(n,o,i):n[o]=e[o]}return n.default=e,t&&t.set(e,n),n}(t(4128));function a(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(a=function(e){return e?t:r})(e)}Object.keys(o).forEach(function(e){!("default"===e||"__esModule"===e||Object.prototype.hasOwnProperty.call(n,e))&&(e in r&&r[e]===o[e]||Object.defineProperty(r,e,{enumerable:!0,get:function(){return o[e]}}))})}};var r=require("../../../webpack-runtime.js");r.C(e);var t=e=>r(r.s=e),n=r.X(0,[9379,8213,4128,4833,1253],()=>t(56710));module.exports=n})();