[2026-08-30T16:54:55.454Z] INFO Error logger initialised
[2026-08-30T20:22:14.727Z] INFO Error logger initialised
[2026-08-30T23:00:23.886Z] INFO Error logger initialised
[2026-08-30T23:05:38.291Z] INFO Error logger initialised
[2026-08-30T23:08:38.287Z] ERROR PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:228:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:3)
[2026-08-30T23:09:05.202Z] INFO Error logger initialised
[2026-08-31T17:22:58.727Z] INFO Error logger initialised
[2026-08-31T17:37:27.752Z] INFO Error logger initialised
[2026-08-31T17:40:10.964Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async getCart (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:175)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:13:86)
[2026-08-31T17:40:11.529Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-08-31T17:40:13.194Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-08-31T17:40:13.198Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
[2026-08-31T17:40:13.201Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:91)
[2026-08-31T17:40:13.206Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.banner.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:143

  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
  17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany({ where: { isActive: true }, orderBy: { sortOrder: 'asc' } }) })))
  18 catalogRouter.get('/brands', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.brand.findMany({ where: { isActive: true }, orderBy: { name: 'asc' } }) })))
→ 19 catalogRouter.get('/banners', asyncHandler(async (_req, res) => { const now = new Date(); res.json({ success: true, data: await prisma.banner.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.banner.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:143

  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
  17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany({ where: { isActive: true }, orderBy: { sortOrder: 'asc' } }) })))
  18 catalogRouter.get('/brands', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.brand.findMany({ where: { isActive: true }, orderBy: { name: 'asc' } }) })))
→ 19 catalogRouter.get('/banners', asyncHandler(async (_req, res) => { const now = new Date(); res.json({ success: true, data: await prisma.banner.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:123)
[2026-08-31T17:52:08.881Z] INFO Error logger initialised
[2026-08-31T17:52:36.415Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-08-31T17:52:39.622Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-08-31T18:22:59.044Z] INFO Error logger initialised
[2026-08-31T18:42:55.432Z] INFO Error logger initialised
[2026-08-31T22:32:24.349Z] INFO Error logger initialised
[2026-09-01T15:53:03.544Z] INFO Error logger initialised
[2026-09-01T15:53:54.743Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:100)
[2026-09-01T15:53:55.022Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async getCart (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:175)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:13:86)
[2026-09-01T15:53:55.027Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:91)
[2026-09-01T15:53:55.033Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-09-01T15:53:55.039Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-09-01T15:53:55.042Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
[2026-09-01T16:12:03.627Z] INFO Error logger initialised
[2026-09-01T16:20:15.862Z] ERROR PrismaClientValidationError: 
Invalid `tx.productImage.deleteMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:681

  28 adminRouter.post('/products', asyncHandler(async (req, res) => { const input = productInput.parse(req.body); const { images, variants, ...data } = input; const product = await prisma.product.create({ data: { ...data, images: { create: images }, variants:{create:variants} }, include: { images: true,variants:true } }); await audit(req.user!.id, 'product.created', 'Product', product.id); res.status(201).json({ success: true, data: product }) }))
  29 // @ts-ignore -- the field is narrowed to either the unique SKU or slug below.
  30 adminRouter.post('/products/:id/duplicate', asyncHandler(async (req, res) => { const source = await prisma.product.findUnique({ where: { id: String(req.params.id) }, include: { images: { orderBy: { sortOrder: 'asc' } }, variants: true } }); if (!source) throw new AppError(404, 'Product not found.'); const uniqueProductValue = async (base: string, field: 'sku'|'slug') => { for (let suffix = 1; ; suffix++) { const value = `${base}-copy-${suffix}`; if (!await prisma.product.findUnique({ where: { [field]: value } })) return value } }; const sku = await uniqueProductValue(source.sku, 'sku'); const slug = await uniqueProductValue(source.slug, 'slug'); const variants = []; for (const variant of source.variants) { let variantSku = `${variant.sku}-copy-1`; for (let suffix = 1; await prisma.productVariant.findUnique({ where: { sku: variantSku } }); suffix++) variantSku = `${variant.sku}-copy-${suffix + 1}`; variants.push({ name: variant.name, sku: variantSku, price: variant.price, stockQuantity: variant.stockQuantity, attributes: variant.attributes ?? {}, image: variant.image, isActive: variant.isActive }) }; const product = await prisma.product.create({ data: { name: `${source.name} (Copy)`, slug, sku, shortDescription: source.shortDescription, description: source.description, categoryId: source.categoryId, brandId: source.brandId, price: source.price, compareAtPrice: source.compareAtPrice, costPrice: source.costPrice, stockQuantity: source.stockQuantity, lowStockThreshold: source.lowStockThreshold, trackInventory: source.trackInventory, isFeatured: false, isNewArrival: false, isBestSeller: false, isActive: false, status: 'DRAFT', ingredients: source.ingredients, howToUse: source.howToUse, benefits: source.benefits, skinType: source.skinType, hairType: source.hairType, concerns: source.concerns, size: source.size, videoUrls: source.videoUrls, weight: source.weight, seoTitle: source.seoTitle, seoDescription: source.seoDescription, images: { create: source.images.map(image => ({ url: image.url, altText: image.altText, sortOrder: image.sortOrder })) }, variants: { create: variants } }, include: { images: true, variants: true } }); await audit(req.user!.id, 'product.duplicated', 'Product', product.id, { sourceProductId: source.id }); res.status(201).json({ success: true, data: product }) }))
→ 31 adminRouter.patch('/products/:id', asyncHandler(async (req, res) => { const input = productInput.partial().parse(req.body); const { images, variants, ...data } = input; const product = await prisma.$transaction(async tx => { if (images) { await tx.productImage.deleteMany({
       where: {
         id: "cmt94vgrd0039u60cb3d62s33"
       },
       data: {
         name: "QL001 Negative Ion Hair Straightening Comb",
         slug: "mini-hair-straightening-comb",
         sku: "SKU-004",
         description: "The **QL001 Negative Ion Hair Straightening Comb** is a powerful cordless styling tool designed to straighten, smooth, and manage hair with greater convenience. Featuring advanced heating technology and up to **200 million negative ions**, it helps reduce frizz and static while leaving hair looking smoother and more polished.\n\nWith a maximum heating temperature of approximately **220°C ±5°C** and **12 adjustable temperature levels**, the comb allows you to select the heat level that best suits your hair type and styling needs. Temperature settings increase in approximately 10°C increments across a range of about **120°C to 230°C**.\n\nThe QL001 features **3 rows of comb teeth with 37 heating teeth**, allowing heat to distribute through the hair as you comb. It reaches approximately **115°C in about 1 minute** and around **210°C in approximately 3 minutes**, helping reduce preparation time before styling.\n\nPowered by a large **9600mAh rechargeable battery**, the comb provides more than **65 minutes of continuous use at maximum temperature**. A full recharge takes approximately **3.8 to 4.5 hours**, making it suitable for both home use and travel.\n\nIts body is constructed using durable **PC + ABS materials**, while the comb teeth are made from heat-resistant **PA46**. A PET heat-insulating backboard further helps improve handling during use.\n\n**Key Features**\n\n* Up to 200 million negative ions\n* Helps reduce frizz and static electricity\n* Cordless rechargeable design\n* 35W rated power\n* 9600mAh high-capacity battery\n* More than 65 minutes of continuous use\n* 12 adjustable temperature levels\n* Temperature range of approximately 120°C–230°C\n* Maximum temperature approximately 220°C ±5°C\n* Fast heating in approximately 1–3 minutes\n* 3-row comb design\n* 37 heating teeth\n* Heat-resistant construction\n* Suitable for everyday straightening and smoothing\n* Includes styling and storage accessories\n\n**Specifications**\n\n* Model: QL001\n* Product Type: Negative Ion Hair Straightening Comb\n* Power: 35W\n* Battery Capacity: 9600mAh\n* Heating Time to 115°C: Approx. 1 minute\n* Heating Time to 210°C: Approx. 3 minutes\n* Charging Time: Approx. 3.8–4.5 hours\n* Battery Life: Over 65 minutes at maximum temperature\n* Comb Rows: 3\n* Heating Teeth: 37\n* Negative Ion Count: Approx. 200 million\n* Maximum Temperature: 220°C ±5°C\n* Temperature Settings: 12 levels\n* Temperature Range: Approx. 120°C–230°C\n* Product Dimensions: 196 × 47.8 × 35 mm\n* Packaging Dimensions: 230 × 80 × 67 mm\n* Packaged Weight: Approx. 550g\n\n**Materials**\n\n* Housing, buttons and decorative parts: PC + ABS\n* Comb Teeth: PA46\n* Heat-Insulating Backboard: PET\n\n**Package Includes**\n\n* 1 × QL001 Hair Straightening Comb\n* 1 × Charging Cable\n* 2 × Hair Clips\n* 1 × Storage Bag\n* 1 × Blister Box with Lid\n* 1 × 16-Page Folded User Manual",
         shortDescription: "The **QL001 Negative Ion Hair Straightening Comb** combines fast heating, 12 adjustable temperature levels, and up to 200 million negative ions to help smooth, straighten, and reduce frizz. Its cordless rechargeable design provides over 65 minutes of use for convenient styling at home or on the go.",
         categoryId: "cmt0it6qb0004ccg8ai9xw8ou",
         ~~~~~~~~~~
         brandId: "cmt930lfn0002u60cau0qmi3z",
         price: 3500,
         compareAtPrice: 4500,
         costPrice: 2500,
         stockQuantity: 15,
         lowStockThreshold: 5,
         status: "ACTIVE",
         isActive: true,
         isFeatured: true,
         isNewArrival: false,
         isBestSeller: false,
         skinType: [],
         hairType: [],
         concerns: [],
         videoUrls: [
           "https://drive.google.com/file/d/1Gt8gXQ7VhxR1nLGRv3LFKdbk6vPglVZL/view?usp=drive_link"
         ],
         weight: 10,
         seoTitle: "QL001 Negative Ion Hair Straightening Comb – Cordless 12-Level",
         seoDescription: "Shop the QL001 cordless hair straightening comb with 200 million negative ions, 12 heat levels, fast heating, 9600mAh battery, and over 65 minutes of use.",
     ?   id?: String | StringFieldUpdateOperationsInput,
     ?   trackInventory?: Boolean | BoolFieldUpdateOperationsInput,
     ?   averageRating?: Decimal | DecimalFieldUpdateOperationsInput,
     ?   reviewCount?: Int | IntFieldUpdateOperationsInput,
     ?   ingredients?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   howToUse?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   benefits?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   size?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   videoUrl?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   createdAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   updatedAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   category?: CategoryUpdateOneRequiredWithoutProductsNestedInput,
     ?   brand?: BrandUpdateOneRequiredWithoutProductsNestedInput,
     ?   images?: ProductImageUpdateManyWithoutProductNestedInput,
     ?   variants?: ProductVariantUpdateManyWithoutProductNestedInput,
     ?   cartItems?: CartItemUpdateManyWithoutProductNestedInput,
     ?   wishlistItems?: WishlistItemUpdateManyWithoutProductNestedInput,
     ?   orderItems?: OrderItemUpdateManyWithoutProductNestedInput,
     ?   reviews?: ReviewUpdateManyWithoutProductNestedInput,
     ?   inventoryMovements?: InventoryMovementUpdateManyWithoutProductNestedInput
       },
       include: {
         images: true,
         variants: true
       }
     })

Unknown argument `categoryId`. Did you mean `category`? Available options are marked with ?.
PrismaClientValidationError: 
Invalid `tx.productImage.deleteMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:681

  28 adminRouter.post('/products', asyncHandler(async (req, res) => { const input = productInput.parse(req.body); const { images, variants, ...data } = input; const product = await prisma.product.create({ data: { ...data, images: { create: images }, variants:{create:variants} }, include: { images: true,variants:true } }); await audit(req.user!.id, 'product.created', 'Product', product.id); res.status(201).json({ success: true, data: product }) }))
  29 // @ts-ignore -- the field is narrowed to either the unique SKU or slug below.
  30 adminRouter.post('/products/:id/duplicate', asyncHandler(async (req, res) => { const source = await prisma.product.findUnique({ where: { id: String(req.params.id) }, include: { images: { orderBy: { sortOrder: 'asc' } }, variants: true } }); if (!source) throw new AppError(404, 'Product not found.'); const uniqueProductValue = async (base: string, field: 'sku'|'slug') => { for (let suffix = 1; ; suffix++) { const value = `${base}-copy-${suffix}`; if (!await prisma.product.findUnique({ where: { [field]: value } })) return value } }; const sku = await uniqueProductValue(source.sku, 'sku'); const slug = await uniqueProductValue(source.slug, 'slug'); const variants = []; for (const variant of source.variants) { let variantSku = `${variant.sku}-copy-1`; for (let suffix = 1; await prisma.productVariant.findUnique({ where: { sku: variantSku } }); suffix++) variantSku = `${variant.sku}-copy-${suffix + 1}`; variants.push({ name: variant.name, sku: variantSku, price: variant.price, stockQuantity: variant.stockQuantity, attributes: variant.attributes ?? {}, image: variant.image, isActive: variant.isActive }) }; const product = await prisma.product.create({ data: { name: `${source.name} (Copy)`, slug, sku, shortDescription: source.shortDescription, description: source.description, categoryId: source.categoryId, brandId: source.brandId, price: source.price, compareAtPrice: source.compareAtPrice, costPrice: source.costPrice, stockQuantity: source.stockQuantity, lowStockThreshold: source.lowStockThreshold, trackInventory: source.trackInventory, isFeatured: false, isNewArrival: false, isBestSeller: false, isActive: false, status: 'DRAFT', ingredients: source.ingredients, howToUse: source.howToUse, benefits: source.benefits, skinType: source.skinType, hairType: source.hairType, concerns: source.concerns, size: source.size, videoUrls: source.videoUrls, weight: source.weight, seoTitle: source.seoTitle, seoDescription: source.seoDescription, images: { create: source.images.map(image => ({ url: image.url, altText: image.altText, sortOrder: image.sortOrder })) }, variants: { create: variants } }, include: { images: true, variants: true } }); await audit(req.user!.id, 'product.duplicated', 'Product', product.id, { sourceProductId: source.id }); res.status(201).json({ success: true, data: product }) }))
→ 31 adminRouter.patch('/products/:id', asyncHandler(async (req, res) => { const input = productInput.partial().parse(req.body); const { images, variants, ...data } = input; const product = await prisma.$transaction(async tx => { if (images) { await tx.productImage.deleteMany({
       where: {
         id: "cmt94vgrd0039u60cb3d62s33"
       },
       data: {
         name: "QL001 Negative Ion Hair Straightening Comb",
         slug: "mini-hair-straightening-comb",
         sku: "SKU-004",
         description: "The **QL001 Negative Ion Hair Straightening Comb** is a powerful cordless styling tool designed to straighten, smooth, and manage hair with greater convenience. Featuring advanced heating technology and up to **200 million negative ions**, it helps reduce frizz and static while leaving hair looking smoother and more polished.\n\nWith a maximum heating temperature of approximately **220°C ±5°C** and **12 adjustable temperature levels**, the comb allows you to select the heat level that best suits your hair type and styling needs. Temperature settings increase in approximately 10°C increments across a range of about **120°C to 230°C**.\n\nThe QL001 features **3 rows of comb teeth with 37 heating teeth**, allowing heat to distribute through the hair as you comb. It reaches approximately **115°C in about 1 minute** and around **210°C in approximately 3 minutes**, helping reduce preparation time before styling.\n\nPowered by a large **9600mAh rechargeable battery**, the comb provides more than **65 minutes of continuous use at maximum temperature**. A full recharge takes approximately **3.8 to 4.5 hours**, making it suitable for both home use and travel.\n\nIts body is constructed using durable **PC + ABS materials**, while the comb teeth are made from heat-resistant **PA46**. A PET heat-insulating backboard further helps improve handling during use.\n\n**Key Features**\n\n* Up to 200 million negative ions\n* Helps reduce frizz and static electricity\n* Cordless rechargeable design\n* 35W rated power\n* 9600mAh high-capacity battery\n* More than 65 minutes of continuous use\n* 12 adjustable temperature levels\n* Temperature range of approximately 120°C–230°C\n* Maximum temperature approximately 220°C ±5°C\n* Fast heating in approximately 1–3 minutes\n* 3-row comb design\n* 37 heating teeth\n* Heat-resistant construction\n* Suitable for everyday straightening and smoothing\n* Includes styling and storage accessories\n\n**Specifications**\n\n* Model: QL001\n* Product Type: Negative Ion Hair Straightening Comb\n* Power: 35W\n* Battery Capacity: 9600mAh\n* Heating Time to 115°C: Approx. 1 minute\n* Heating Time to 210°C: Approx. 3 minutes\n* Charging Time: Approx. 3.8–4.5 hours\n* Battery Life: Over 65 minutes at maximum temperature\n* Comb Rows: 3\n* Heating Teeth: 37\n* Negative Ion Count: Approx. 200 million\n* Maximum Temperature: 220°C ±5°C\n* Temperature Settings: 12 levels\n* Temperature Range: Approx. 120°C–230°C\n* Product Dimensions: 196 × 47.8 × 35 mm\n* Packaging Dimensions: 230 × 80 × 67 mm\n* Packaged Weight: Approx. 550g\n\n**Materials**\n\n* Housing, buttons and decorative parts: PC + ABS\n* Comb Teeth: PA46\n* Heat-Insulating Backboard: PET\n\n**Package Includes**\n\n* 1 × QL001 Hair Straightening Comb\n* 1 × Charging Cable\n* 2 × Hair Clips\n* 1 × Storage Bag\n* 1 × Blister Box with Lid\n* 1 × 16-Page Folded User Manual",
         shortDescription: "The **QL001 Negative Ion Hair Straightening Comb** combines fast heating, 12 adjustable temperature levels, and up to 200 million negative ions to help smooth, straighten, and reduce frizz. Its cordless rechargeable design provides over 65 minutes of use for convenient styling at home or on the go.",
         categoryId: "cmt0it6qb0004ccg8ai9xw8ou",
         ~~~~~~~~~~
         brandId: "cmt930lfn0002u60cau0qmi3z",
         price: 3500,
         compareAtPrice: 4500,
         costPrice: 2500,
         stockQuantity: 15,
         lowStockThreshold: 5,
         status: "ACTIVE",
         isActive: true,
         isFeatured: true,
         isNewArrival: false,
         isBestSeller: false,
         skinType: [],
         hairType: [],
         concerns: [],
         videoUrls: [
           "https://drive.google.com/file/d/1Gt8gXQ7VhxR1nLGRv3LFKdbk6vPglVZL/view?usp=drive_link"
         ],
         weight: 10,
         seoTitle: "QL001 Negative Ion Hair Straightening Comb – Cordless 12-Level",
         seoDescription: "Shop the QL001 cordless hair straightening comb with 200 million negative ions, 12 heat levels, fast heating, 9600mAh battery, and over 65 minutes of use.",
     ?   id?: String | StringFieldUpdateOperationsInput,
     ?   trackInventory?: Boolean | BoolFieldUpdateOperationsInput,
     ?   averageRating?: Decimal | DecimalFieldUpdateOperationsInput,
     ?   reviewCount?: Int | IntFieldUpdateOperationsInput,
     ?   ingredients?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   howToUse?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   benefits?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   size?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   videoUrl?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   createdAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   updatedAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   category?: CategoryUpdateOneRequiredWithoutProductsNestedInput,
     ?   brand?: BrandUpdateOneRequiredWithoutProductsNestedInput,
     ?   images?: ProductImageUpdateManyWithoutProductNestedInput,
     ?   variants?: ProductVariantUpdateManyWithoutProductNestedInput,
     ?   cartItems?: CartItemUpdateManyWithoutProductNestedInput,
     ?   wishlistItems?: WishlistItemUpdateManyWithoutProductNestedInput,
     ?   orderItems?: OrderItemUpdateManyWithoutProductNestedInput,
     ?   reviews?: ReviewUpdateManyWithoutProductNestedInput,
     ?   inventoryMovements?: InventoryMovementUpdateManyWithoutProductNestedInput
       },
       include: {
         images: true,
         variants: true
       }
     })

Unknown argument `categoryId`. Did you mean `category`? Available options are marked with ?.
    at throwValidationException (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\core\errorRendering\throwValidationException.ts:45:9)
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:202:7)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async Proxy._transactionWithCallback (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:722:18)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:186)
[2026-09-01T16:20:40.701Z] ERROR PrismaClientValidationError: 
Invalid `tx.productImage.deleteMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:681

  28 adminRouter.post('/products', asyncHandler(async (req, res) => { const input = productInput.parse(req.body); const { images, variants, ...data } = input; const product = await prisma.product.create({ data: { ...data, images: { create: images }, variants:{create:variants} }, include: { images: true,variants:true } }); await audit(req.user!.id, 'product.created', 'Product', product.id); res.status(201).json({ success: true, data: product }) }))
  29 // @ts-ignore -- the field is narrowed to either the unique SKU or slug below.
  30 adminRouter.post('/products/:id/duplicate', asyncHandler(async (req, res) => { const source = await prisma.product.findUnique({ where: { id: String(req.params.id) }, include: { images: { orderBy: { sortOrder: 'asc' } }, variants: true } }); if (!source) throw new AppError(404, 'Product not found.'); const uniqueProductValue = async (base: string, field: 'sku'|'slug') => { for (let suffix = 1; ; suffix++) { const value = `${base}-copy-${suffix}`; if (!await prisma.product.findUnique({ where: { [field]: value } })) return value } }; const sku = await uniqueProductValue(source.sku, 'sku'); const slug = await uniqueProductValue(source.slug, 'slug'); const variants = []; for (const variant of source.variants) { let variantSku = `${variant.sku}-copy-1`; for (let suffix = 1; await prisma.productVariant.findUnique({ where: { sku: variantSku } }); suffix++) variantSku = `${variant.sku}-copy-${suffix + 1}`; variants.push({ name: variant.name, sku: variantSku, price: variant.price, stockQuantity: variant.stockQuantity, attributes: variant.attributes ?? {}, image: variant.image, isActive: variant.isActive }) }; const product = await prisma.product.create({ data: { name: `${source.name} (Copy)`, slug, sku, shortDescription: source.shortDescription, description: source.description, categoryId: source.categoryId, brandId: source.brandId, price: source.price, compareAtPrice: source.compareAtPrice, costPrice: source.costPrice, stockQuantity: source.stockQuantity, lowStockThreshold: source.lowStockThreshold, trackInventory: source.trackInventory, isFeatured: false, isNewArrival: false, isBestSeller: false, isActive: false, status: 'DRAFT', ingredients: source.ingredients, howToUse: source.howToUse, benefits: source.benefits, skinType: source.skinType, hairType: source.hairType, concerns: source.concerns, size: source.size, videoUrls: source.videoUrls, weight: source.weight, seoTitle: source.seoTitle, seoDescription: source.seoDescription, images: { create: source.images.map(image => ({ url: image.url, altText: image.altText, sortOrder: image.sortOrder })) }, variants: { create: variants } }, include: { images: true, variants: true } }); await audit(req.user!.id, 'product.duplicated', 'Product', product.id, { sourceProductId: source.id }); res.status(201).json({ success: true, data: product }) }))
→ 31 adminRouter.patch('/products/:id', asyncHandler(async (req, res) => { const input = productInput.partial().parse(req.body); const { images, variants, ...data } = input; const product = await prisma.$transaction(async tx => { if (images) { await tx.productImage.deleteMany({
       where: {
         id: "cmt94vgrd0039u60cb3d62s33"
       },
       data: {
         name: "QL001 Negative Ion Hair Straightening Comb",
         slug: "mini-hair-straightening-comb",
         sku: "SKU-004",
         description: "The **QL001 Negative Ion Hair Straightening Comb** is a powerful cordless styling tool designed to straighten, smooth, and manage hair with greater convenience. Featuring advanced heating technology and up to **200 million negative ions**, it helps reduce frizz and static while leaving hair looking smoother and more polished.\n\nWith a maximum heating temperature of approximately **220°C ±5°C** and **12 adjustable temperature levels**, the comb allows you to select the heat level that best suits your hair type and styling needs. Temperature settings increase in approximately 10°C increments across a range of about **120°C to 230°C**.\n\nThe QL001 features **3 rows of comb teeth with 37 heating teeth**, allowing heat to distribute through the hair as you comb. It reaches approximately **115°C in about 1 minute** and around **210°C in approximately 3 minutes**, helping reduce preparation time before styling.\n\nPowered by a large **9600mAh rechargeable battery**, the comb provides more than **65 minutes of continuous use at maximum temperature**. A full recharge takes approximately **3.8 to 4.5 hours**, making it suitable for both home use and travel.\n\nIts body is constructed using durable **PC + ABS materials**, while the comb teeth are made from heat-resistant **PA46**. A PET heat-insulating backboard further helps improve handling during use.\n\n**Key Features**\n\n* Up to 200 million negative ions\n* Helps reduce frizz and static electricity\n* Cordless rechargeable design\n* 35W rated power\n* 9600mAh high-capacity battery\n* More than 65 minutes of continuous use\n* 12 adjustable temperature levels\n* Temperature range of approximately 120°C–230°C\n* Maximum temperature approximately 220°C ±5°C\n* Fast heating in approximately 1–3 minutes\n* 3-row comb design\n* 37 heating teeth\n* Heat-resistant construction\n* Suitable for everyday straightening and smoothing\n* Includes styling and storage accessories\n\n**Specifications**\n\n* Model: QL001\n* Product Type: Negative Ion Hair Straightening Comb\n* Power: 35W\n* Battery Capacity: 9600mAh\n* Heating Time to 115°C: Approx. 1 minute\n* Heating Time to 210°C: Approx. 3 minutes\n* Charging Time: Approx. 3.8–4.5 hours\n* Battery Life: Over 65 minutes at maximum temperature\n* Comb Rows: 3\n* Heating Teeth: 37\n* Negative Ion Count: Approx. 200 million\n* Maximum Temperature: 220°C ±5°C\n* Temperature Settings: 12 levels\n* Temperature Range: Approx. 120°C–230°C\n* Product Dimensions: 196 × 47.8 × 35 mm\n* Packaging Dimensions: 230 × 80 × 67 mm\n* Packaged Weight: Approx. 550g\n\n**Materials**\n\n* Housing, buttons and decorative parts: PC + ABS\n* Comb Teeth: PA46\n* Heat-Insulating Backboard: PET\n\n**Package Includes**\n\n* 1 × QL001 Hair Straightening Comb\n* 1 × Charging Cable\n* 2 × Hair Clips\n* 1 × Storage Bag\n* 1 × Blister Box with Lid\n* 1 × 16-Page Folded User Manual",
         shortDescription: "The **QL001 Negative Ion Hair Straightening Comb** combines fast heating, 12 adjustable temperature levels, and up to 200 million negative ions to help smooth, straighten, and reduce frizz. Its cordless rechargeable design provides over 65 minutes of use for convenient styling at home or on the go.",
         categoryId: "cmt0it6qb0004ccg8ai9xw8ou",
         ~~~~~~~~~~
         brandId: "cmt930lfn0002u60cau0qmi3z",
         price: 3500,
         compareAtPrice: 4500,
         costPrice: 2500,
         stockQuantity: 15,
         lowStockThreshold: 5,
         status: "ACTIVE",
         isActive: true,
         isFeatured: true,
         isNewArrival: false,
         isBestSeller: false,
         skinType: [],
         hairType: [],
         concerns: [],
         videoUrls: [
           "http://localhost:5000/uploads/videos/9f16bac5-50dc-4cd7-9662-8d8d6d8b2648.mp4"
         ],
         weight: 10,
         seoTitle: "QL001 Negative Ion Hair Straightening Comb – Cordless 12-Level",
         seoDescription: "Shop the QL001 cordless hair straightening comb with 200 million negative ions, 12 heat levels, fast heating, 9600mAh battery, and over 65 minutes of use.",
     ?   id?: String | StringFieldUpdateOperationsInput,
     ?   trackInventory?: Boolean | BoolFieldUpdateOperationsInput,
     ?   averageRating?: Decimal | DecimalFieldUpdateOperationsInput,
     ?   reviewCount?: Int | IntFieldUpdateOperationsInput,
     ?   ingredients?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   howToUse?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   benefits?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   size?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   videoUrl?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   createdAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   updatedAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   category?: CategoryUpdateOneRequiredWithoutProductsNestedInput,
     ?   brand?: BrandUpdateOneRequiredWithoutProductsNestedInput,
     ?   images?: ProductImageUpdateManyWithoutProductNestedInput,
     ?   variants?: ProductVariantUpdateManyWithoutProductNestedInput,
     ?   cartItems?: CartItemUpdateManyWithoutProductNestedInput,
     ?   wishlistItems?: WishlistItemUpdateManyWithoutProductNestedInput,
     ?   orderItems?: OrderItemUpdateManyWithoutProductNestedInput,
     ?   reviews?: ReviewUpdateManyWithoutProductNestedInput,
     ?   inventoryMovements?: InventoryMovementUpdateManyWithoutProductNestedInput
       },
       include: {
         images: true,
         variants: true
       }
     })

Unknown argument `categoryId`. Did you mean `category`? Available options are marked with ?.
PrismaClientValidationError: 
Invalid `tx.productImage.deleteMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:681

  28 adminRouter.post('/products', asyncHandler(async (req, res) => { const input = productInput.parse(req.body); const { images, variants, ...data } = input; const product = await prisma.product.create({ data: { ...data, images: { create: images }, variants:{create:variants} }, include: { images: true,variants:true } }); await audit(req.user!.id, 'product.created', 'Product', product.id); res.status(201).json({ success: true, data: product }) }))
  29 // @ts-ignore -- the field is narrowed to either the unique SKU or slug below.
  30 adminRouter.post('/products/:id/duplicate', asyncHandler(async (req, res) => { const source = await prisma.product.findUnique({ where: { id: String(req.params.id) }, include: { images: { orderBy: { sortOrder: 'asc' } }, variants: true } }); if (!source) throw new AppError(404, 'Product not found.'); const uniqueProductValue = async (base: string, field: 'sku'|'slug') => { for (let suffix = 1; ; suffix++) { const value = `${base}-copy-${suffix}`; if (!await prisma.product.findUnique({ where: { [field]: value } })) return value } }; const sku = await uniqueProductValue(source.sku, 'sku'); const slug = await uniqueProductValue(source.slug, 'slug'); const variants = []; for (const variant of source.variants) { let variantSku = `${variant.sku}-copy-1`; for (let suffix = 1; await prisma.productVariant.findUnique({ where: { sku: variantSku } }); suffix++) variantSku = `${variant.sku}-copy-${suffix + 1}`; variants.push({ name: variant.name, sku: variantSku, price: variant.price, stockQuantity: variant.stockQuantity, attributes: variant.attributes ?? {}, image: variant.image, isActive: variant.isActive }) }; const product = await prisma.product.create({ data: { name: `${source.name} (Copy)`, slug, sku, shortDescription: source.shortDescription, description: source.description, categoryId: source.categoryId, brandId: source.brandId, price: source.price, compareAtPrice: source.compareAtPrice, costPrice: source.costPrice, stockQuantity: source.stockQuantity, lowStockThreshold: source.lowStockThreshold, trackInventory: source.trackInventory, isFeatured: false, isNewArrival: false, isBestSeller: false, isActive: false, status: 'DRAFT', ingredients: source.ingredients, howToUse: source.howToUse, benefits: source.benefits, skinType: source.skinType, hairType: source.hairType, concerns: source.concerns, size: source.size, videoUrls: source.videoUrls, weight: source.weight, seoTitle: source.seoTitle, seoDescription: source.seoDescription, images: { create: source.images.map(image => ({ url: image.url, altText: image.altText, sortOrder: image.sortOrder })) }, variants: { create: variants } }, include: { images: true, variants: true } }); await audit(req.user!.id, 'product.duplicated', 'Product', product.id, { sourceProductId: source.id }); res.status(201).json({ success: true, data: product }) }))
→ 31 adminRouter.patch('/products/:id', asyncHandler(async (req, res) => { const input = productInput.partial().parse(req.body); const { images, variants, ...data } = input; const product = await prisma.$transaction(async tx => { if (images) { await tx.productImage.deleteMany({
       where: {
         id: "cmt94vgrd0039u60cb3d62s33"
       },
       data: {
         name: "QL001 Negative Ion Hair Straightening Comb",
         slug: "mini-hair-straightening-comb",
         sku: "SKU-004",
         description: "The **QL001 Negative Ion Hair Straightening Comb** is a powerful cordless styling tool designed to straighten, smooth, and manage hair with greater convenience. Featuring advanced heating technology and up to **200 million negative ions**, it helps reduce frizz and static while leaving hair looking smoother and more polished.\n\nWith a maximum heating temperature of approximately **220°C ±5°C** and **12 adjustable temperature levels**, the comb allows you to select the heat level that best suits your hair type and styling needs. Temperature settings increase in approximately 10°C increments across a range of about **120°C to 230°C**.\n\nThe QL001 features **3 rows of comb teeth with 37 heating teeth**, allowing heat to distribute through the hair as you comb. It reaches approximately **115°C in about 1 minute** and around **210°C in approximately 3 minutes**, helping reduce preparation time before styling.\n\nPowered by a large **9600mAh rechargeable battery**, the comb provides more than **65 minutes of continuous use at maximum temperature**. A full recharge takes approximately **3.8 to 4.5 hours**, making it suitable for both home use and travel.\n\nIts body is constructed using durable **PC + ABS materials**, while the comb teeth are made from heat-resistant **PA46**. A PET heat-insulating backboard further helps improve handling during use.\n\n**Key Features**\n\n* Up to 200 million negative ions\n* Helps reduce frizz and static electricity\n* Cordless rechargeable design\n* 35W rated power\n* 9600mAh high-capacity battery\n* More than 65 minutes of continuous use\n* 12 adjustable temperature levels\n* Temperature range of approximately 120°C–230°C\n* Maximum temperature approximately 220°C ±5°C\n* Fast heating in approximately 1–3 minutes\n* 3-row comb design\n* 37 heating teeth\n* Heat-resistant construction\n* Suitable for everyday straightening and smoothing\n* Includes styling and storage accessories\n\n**Specifications**\n\n* Model: QL001\n* Product Type: Negative Ion Hair Straightening Comb\n* Power: 35W\n* Battery Capacity: 9600mAh\n* Heating Time to 115°C: Approx. 1 minute\n* Heating Time to 210°C: Approx. 3 minutes\n* Charging Time: Approx. 3.8–4.5 hours\n* Battery Life: Over 65 minutes at maximum temperature\n* Comb Rows: 3\n* Heating Teeth: 37\n* Negative Ion Count: Approx. 200 million\n* Maximum Temperature: 220°C ±5°C\n* Temperature Settings: 12 levels\n* Temperature Range: Approx. 120°C–230°C\n* Product Dimensions: 196 × 47.8 × 35 mm\n* Packaging Dimensions: 230 × 80 × 67 mm\n* Packaged Weight: Approx. 550g\n\n**Materials**\n\n* Housing, buttons and decorative parts: PC + ABS\n* Comb Teeth: PA46\n* Heat-Insulating Backboard: PET\n\n**Package Includes**\n\n* 1 × QL001 Hair Straightening Comb\n* 1 × Charging Cable\n* 2 × Hair Clips\n* 1 × Storage Bag\n* 1 × Blister Box with Lid\n* 1 × 16-Page Folded User Manual",
         shortDescription: "The **QL001 Negative Ion Hair Straightening Comb** combines fast heating, 12 adjustable temperature levels, and up to 200 million negative ions to help smooth, straighten, and reduce frizz. Its cordless rechargeable design provides over 65 minutes of use for convenient styling at home or on the go.",
         categoryId: "cmt0it6qb0004ccg8ai9xw8ou",
         ~~~~~~~~~~
         brandId: "cmt930lfn0002u60cau0qmi3z",
         price: 3500,
         compareAtPrice: 4500,
         costPrice: 2500,
         stockQuantity: 15,
         lowStockThreshold: 5,
         status: "ACTIVE",
         isActive: true,
         isFeatured: true,
         isNewArrival: false,
         isBestSeller: false,
         skinType: [],
         hairType: [],
         concerns: [],
         videoUrls: [
           "http://localhost:5000/uploads/videos/9f16bac5-50dc-4cd7-9662-8d8d6d8b2648.mp4"
         ],
         weight: 10,
         seoTitle: "QL001 Negative Ion Hair Straightening Comb – Cordless 12-Level",
         seoDescription: "Shop the QL001 cordless hair straightening comb with 200 million negative ions, 12 heat levels, fast heating, 9600mAh battery, and over 65 minutes of use.",
     ?   id?: String | StringFieldUpdateOperationsInput,
     ?   trackInventory?: Boolean | BoolFieldUpdateOperationsInput,
     ?   averageRating?: Decimal | DecimalFieldUpdateOperationsInput,
     ?   reviewCount?: Int | IntFieldUpdateOperationsInput,
     ?   ingredients?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   howToUse?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   benefits?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   size?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   videoUrl?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   createdAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   updatedAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   category?: CategoryUpdateOneRequiredWithoutProductsNestedInput,
     ?   brand?: BrandUpdateOneRequiredWithoutProductsNestedInput,
     ?   images?: ProductImageUpdateManyWithoutProductNestedInput,
     ?   variants?: ProductVariantUpdateManyWithoutProductNestedInput,
     ?   cartItems?: CartItemUpdateManyWithoutProductNestedInput,
     ?   wishlistItems?: WishlistItemUpdateManyWithoutProductNestedInput,
     ?   orderItems?: OrderItemUpdateManyWithoutProductNestedInput,
     ?   reviews?: ReviewUpdateManyWithoutProductNestedInput,
     ?   inventoryMovements?: InventoryMovementUpdateManyWithoutProductNestedInput
       },
       include: {
         images: true,
         variants: true
       }
     })

Unknown argument `categoryId`. Did you mean `category`? Available options are marked with ?.
    at throwValidationException (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\core\errorRendering\throwValidationException.ts:45:9)
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:202:7)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async Proxy._transactionWithCallback (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:722:18)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:186)
[2026-09-01T16:21:53.410Z] ERROR PrismaClientValidationError: 
Invalid `tx.productImage.deleteMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:681

  28 adminRouter.post('/products', asyncHandler(async (req, res) => { const input = productInput.parse(req.body); const { images, variants, ...data } = input; const product = await prisma.product.create({ data: { ...data, images: { create: images }, variants:{create:variants} }, include: { images: true,variants:true } }); await audit(req.user!.id, 'product.created', 'Product', product.id); res.status(201).json({ success: true, data: product }) }))
  29 // @ts-ignore -- the field is narrowed to either the unique SKU or slug below.
  30 adminRouter.post('/products/:id/duplicate', asyncHandler(async (req, res) => { const source = await prisma.product.findUnique({ where: { id: String(req.params.id) }, include: { images: { orderBy: { sortOrder: 'asc' } }, variants: true } }); if (!source) throw new AppError(404, 'Product not found.'); const uniqueProductValue = async (base: string, field: 'sku'|'slug') => { for (let suffix = 1; ; suffix++) { const value = `${base}-copy-${suffix}`; if (!await prisma.product.findUnique({ where: { [field]: value } })) return value } }; const sku = await uniqueProductValue(source.sku, 'sku'); const slug = await uniqueProductValue(source.slug, 'slug'); const variants = []; for (const variant of source.variants) { let variantSku = `${variant.sku}-copy-1`; for (let suffix = 1; await prisma.productVariant.findUnique({ where: { sku: variantSku } }); suffix++) variantSku = `${variant.sku}-copy-${suffix + 1}`; variants.push({ name: variant.name, sku: variantSku, price: variant.price, stockQuantity: variant.stockQuantity, attributes: variant.attributes ?? {}, image: variant.image, isActive: variant.isActive }) }; const product = await prisma.product.create({ data: { name: `${source.name} (Copy)`, slug, sku, shortDescription: source.shortDescription, description: source.description, categoryId: source.categoryId, brandId: source.brandId, price: source.price, compareAtPrice: source.compareAtPrice, costPrice: source.costPrice, stockQuantity: source.stockQuantity, lowStockThreshold: source.lowStockThreshold, trackInventory: source.trackInventory, isFeatured: false, isNewArrival: false, isBestSeller: false, isActive: false, status: 'DRAFT', ingredients: source.ingredients, howToUse: source.howToUse, benefits: source.benefits, skinType: source.skinType, hairType: source.hairType, concerns: source.concerns, size: source.size, videoUrls: source.videoUrls, weight: source.weight, seoTitle: source.seoTitle, seoDescription: source.seoDescription, images: { create: source.images.map(image => ({ url: image.url, altText: image.altText, sortOrder: image.sortOrder })) }, variants: { create: variants } }, include: { images: true, variants: true } }); await audit(req.user!.id, 'product.duplicated', 'Product', product.id, { sourceProductId: source.id }); res.status(201).json({ success: true, data: product }) }))
→ 31 adminRouter.patch('/products/:id', asyncHandler(async (req, res) => { const input = productInput.partial().parse(req.body); const { images, variants, ...data } = input; const product = await prisma.$transaction(async tx => { if (images) { await tx.productImage.deleteMany({
       where: {
         id: "cmt94vgrd0039u60cb3d62s33"
       },
       data: {
         name: "QL001 Negative Ion Hair Straightening Comb",
         slug: "mini-hair-straightening-comb",
         sku: "SKU-004",
         description: "The **QL001 Negative Ion Hair Straightening Comb** is a powerful cordless styling tool designed to straighten, smooth, and manage hair with greater convenience. Featuring advanced heating technology and up to **200 million negative ions**, it helps reduce frizz and static while leaving hair looking smoother and more polished.\n\nWith a maximum heating temperature of approximately **220°C ±5°C** and **12 adjustable temperature levels**, the comb allows you to select the heat level that best suits your hair type and styling needs. Temperature settings increase in approximately 10°C increments across a range of about **120°C to 230°C**.\n\nThe QL001 features **3 rows of comb teeth with 37 heating teeth**, allowing heat to distribute through the hair as you comb. It reaches approximately **115°C in about 1 minute** and around **210°C in approximately 3 minutes**, helping reduce preparation time before styling.\n\nPowered by a large **9600mAh rechargeable battery**, the comb provides more than **65 minutes of continuous use at maximum temperature**. A full recharge takes approximately **3.8 to 4.5 hours**, making it suitable for both home use and travel.\n\nIts body is constructed using durable **PC + ABS materials**, while the comb teeth are made from heat-resistant **PA46**. A PET heat-insulating backboard further helps improve handling during use.\n\n**Key Features**\n\n* Up to 200 million negative ions\n* Helps reduce frizz and static electricity\n* Cordless rechargeable design\n* 35W rated power\n* 9600mAh high-capacity battery\n* More than 65 minutes of continuous use\n* 12 adjustable temperature levels\n* Temperature range of approximately 120°C–230°C\n* Maximum temperature approximately 220°C ±5°C\n* Fast heating in approximately 1–3 minutes\n* 3-row comb design\n* 37 heating teeth\n* Heat-resistant construction\n* Suitable for everyday straightening and smoothing\n* Includes styling and storage accessories\n\n**Specifications**\n\n* Model: QL001\n* Product Type: Negative Ion Hair Straightening Comb\n* Power: 35W\n* Battery Capacity: 9600mAh\n* Heating Time to 115°C: Approx. 1 minute\n* Heating Time to 210°C: Approx. 3 minutes\n* Charging Time: Approx. 3.8–4.5 hours\n* Battery Life: Over 65 minutes at maximum temperature\n* Comb Rows: 3\n* Heating Teeth: 37\n* Negative Ion Count: Approx. 200 million\n* Maximum Temperature: 220°C ±5°C\n* Temperature Settings: 12 levels\n* Temperature Range: Approx. 120°C–230°C\n* Product Dimensions: 196 × 47.8 × 35 mm\n* Packaging Dimensions: 230 × 80 × 67 mm\n* Packaged Weight: Approx. 550g\n\n**Materials**\n\n* Housing, buttons and decorative parts: PC + ABS\n* Comb Teeth: PA46\n* Heat-Insulating Backboard: PET\n\n**Package Includes**\n\n* 1 × QL001 Hair Straightening Comb\n* 1 × Charging Cable\n* 2 × Hair Clips\n* 1 × Storage Bag\n* 1 × Blister Box with Lid\n* 1 × 16-Page Folded User Manual",
         shortDescription: "The **QL001 Negative Ion Hair Straightening Comb** combines fast heating, 12 adjustable temperature levels, and up to 200 million negative ions to help smooth, straighten, and reduce frizz. Its cordless rechargeable design provides over 65 minutes of use for convenient styling at home or on the go.",
         categoryId: "cmt0it6qb0004ccg8ai9xw8ou",
         ~~~~~~~~~~
         brandId: "cmt930lfn0002u60cau0qmi3z",
         price: 3500,
         compareAtPrice: 4500,
         costPrice: 2500,
         stockQuantity: 15,
         lowStockThreshold: 5,
         status: "ACTIVE",
         isActive: true,
         isFeatured: true,
         isNewArrival: false,
         isBestSeller: false,
         skinType: [],
         hairType: [],
         concerns: [],
         videoUrls: [
           "http://localhost:5000/uploads/videos/9f16bac5-50dc-4cd7-9662-8d8d6d8b2648.mp4"
         ],
         weight: 10,
         seoTitle: "QL001 Negative Ion Hair Straightening Comb – Cordless 12-Level",
         seoDescription: "Shop the QL001 cordless hair straightening comb with 200 million negative ions, 12 heat levels, fast heating, 9600mAh battery, and over 65 minutes of use.",
     ?   id?: String | StringFieldUpdateOperationsInput,
     ?   trackInventory?: Boolean | BoolFieldUpdateOperationsInput,
     ?   averageRating?: Decimal | DecimalFieldUpdateOperationsInput,
     ?   reviewCount?: Int | IntFieldUpdateOperationsInput,
     ?   ingredients?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   howToUse?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   benefits?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   size?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   videoUrl?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   createdAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   updatedAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   category?: CategoryUpdateOneRequiredWithoutProductsNestedInput,
     ?   brand?: BrandUpdateOneRequiredWithoutProductsNestedInput,
     ?   images?: ProductImageUpdateManyWithoutProductNestedInput,
     ?   variants?: ProductVariantUpdateManyWithoutProductNestedInput,
     ?   cartItems?: CartItemUpdateManyWithoutProductNestedInput,
     ?   wishlistItems?: WishlistItemUpdateManyWithoutProductNestedInput,
     ?   orderItems?: OrderItemUpdateManyWithoutProductNestedInput,
     ?   reviews?: ReviewUpdateManyWithoutProductNestedInput,
     ?   inventoryMovements?: InventoryMovementUpdateManyWithoutProductNestedInput
       },
       include: {
         images: true,
         variants: true
       }
     })

Unknown argument `categoryId`. Did you mean `category`? Available options are marked with ?.
PrismaClientValidationError: 
Invalid `tx.productImage.deleteMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:681

  28 adminRouter.post('/products', asyncHandler(async (req, res) => { const input = productInput.parse(req.body); const { images, variants, ...data } = input; const product = await prisma.product.create({ data: { ...data, images: { create: images }, variants:{create:variants} }, include: { images: true,variants:true } }); await audit(req.user!.id, 'product.created', 'Product', product.id); res.status(201).json({ success: true, data: product }) }))
  29 // @ts-ignore -- the field is narrowed to either the unique SKU or slug below.
  30 adminRouter.post('/products/:id/duplicate', asyncHandler(async (req, res) => { const source = await prisma.product.findUnique({ where: { id: String(req.params.id) }, include: { images: { orderBy: { sortOrder: 'asc' } }, variants: true } }); if (!source) throw new AppError(404, 'Product not found.'); const uniqueProductValue = async (base: string, field: 'sku'|'slug') => { for (let suffix = 1; ; suffix++) { const value = `${base}-copy-${suffix}`; if (!await prisma.product.findUnique({ where: { [field]: value } })) return value } }; const sku = await uniqueProductValue(source.sku, 'sku'); const slug = await uniqueProductValue(source.slug, 'slug'); const variants = []; for (const variant of source.variants) { let variantSku = `${variant.sku}-copy-1`; for (let suffix = 1; await prisma.productVariant.findUnique({ where: { sku: variantSku } }); suffix++) variantSku = `${variant.sku}-copy-${suffix + 1}`; variants.push({ name: variant.name, sku: variantSku, price: variant.price, stockQuantity: variant.stockQuantity, attributes: variant.attributes ?? {}, image: variant.image, isActive: variant.isActive }) }; const product = await prisma.product.create({ data: { name: `${source.name} (Copy)`, slug, sku, shortDescription: source.shortDescription, description: source.description, categoryId: source.categoryId, brandId: source.brandId, price: source.price, compareAtPrice: source.compareAtPrice, costPrice: source.costPrice, stockQuantity: source.stockQuantity, lowStockThreshold: source.lowStockThreshold, trackInventory: source.trackInventory, isFeatured: false, isNewArrival: false, isBestSeller: false, isActive: false, status: 'DRAFT', ingredients: source.ingredients, howToUse: source.howToUse, benefits: source.benefits, skinType: source.skinType, hairType: source.hairType, concerns: source.concerns, size: source.size, videoUrls: source.videoUrls, weight: source.weight, seoTitle: source.seoTitle, seoDescription: source.seoDescription, images: { create: source.images.map(image => ({ url: image.url, altText: image.altText, sortOrder: image.sortOrder })) }, variants: { create: variants } }, include: { images: true, variants: true } }); await audit(req.user!.id, 'product.duplicated', 'Product', product.id, { sourceProductId: source.id }); res.status(201).json({ success: true, data: product }) }))
→ 31 adminRouter.patch('/products/:id', asyncHandler(async (req, res) => { const input = productInput.partial().parse(req.body); const { images, variants, ...data } = input; const product = await prisma.$transaction(async tx => { if (images) { await tx.productImage.deleteMany({
       where: {
         id: "cmt94vgrd0039u60cb3d62s33"
       },
       data: {
         name: "QL001 Negative Ion Hair Straightening Comb",
         slug: "mini-hair-straightening-comb",
         sku: "SKU-004",
         description: "The **QL001 Negative Ion Hair Straightening Comb** is a powerful cordless styling tool designed to straighten, smooth, and manage hair with greater convenience. Featuring advanced heating technology and up to **200 million negative ions**, it helps reduce frizz and static while leaving hair looking smoother and more polished.\n\nWith a maximum heating temperature of approximately **220°C ±5°C** and **12 adjustable temperature levels**, the comb allows you to select the heat level that best suits your hair type and styling needs. Temperature settings increase in approximately 10°C increments across a range of about **120°C to 230°C**.\n\nThe QL001 features **3 rows of comb teeth with 37 heating teeth**, allowing heat to distribute through the hair as you comb. It reaches approximately **115°C in about 1 minute** and around **210°C in approximately 3 minutes**, helping reduce preparation time before styling.\n\nPowered by a large **9600mAh rechargeable battery**, the comb provides more than **65 minutes of continuous use at maximum temperature**. A full recharge takes approximately **3.8 to 4.5 hours**, making it suitable for both home use and travel.\n\nIts body is constructed using durable **PC + ABS materials**, while the comb teeth are made from heat-resistant **PA46**. A PET heat-insulating backboard further helps improve handling during use.\n\n**Key Features**\n\n* Up to 200 million negative ions\n* Helps reduce frizz and static electricity\n* Cordless rechargeable design\n* 35W rated power\n* 9600mAh high-capacity battery\n* More than 65 minutes of continuous use\n* 12 adjustable temperature levels\n* Temperature range of approximately 120°C–230°C\n* Maximum temperature approximately 220°C ±5°C\n* Fast heating in approximately 1–3 minutes\n* 3-row comb design\n* 37 heating teeth\n* Heat-resistant construction\n* Suitable for everyday straightening and smoothing\n* Includes styling and storage accessories\n\n**Specifications**\n\n* Model: QL001\n* Product Type: Negative Ion Hair Straightening Comb\n* Power: 35W\n* Battery Capacity: 9600mAh\n* Heating Time to 115°C: Approx. 1 minute\n* Heating Time to 210°C: Approx. 3 minutes\n* Charging Time: Approx. 3.8–4.5 hours\n* Battery Life: Over 65 minutes at maximum temperature\n* Comb Rows: 3\n* Heating Teeth: 37\n* Negative Ion Count: Approx. 200 million\n* Maximum Temperature: 220°C ±5°C\n* Temperature Settings: 12 levels\n* Temperature Range: Approx. 120°C–230°C\n* Product Dimensions: 196 × 47.8 × 35 mm\n* Packaging Dimensions: 230 × 80 × 67 mm\n* Packaged Weight: Approx. 550g\n\n**Materials**\n\n* Housing, buttons and decorative parts: PC + ABS\n* Comb Teeth: PA46\n* Heat-Insulating Backboard: PET\n\n**Package Includes**\n\n* 1 × QL001 Hair Straightening Comb\n* 1 × Charging Cable\n* 2 × Hair Clips\n* 1 × Storage Bag\n* 1 × Blister Box with Lid\n* 1 × 16-Page Folded User Manual",
         shortDescription: "The **QL001 Negative Ion Hair Straightening Comb** combines fast heating, 12 adjustable temperature levels, and up to 200 million negative ions to help smooth, straighten, and reduce frizz. Its cordless rechargeable design provides over 65 minutes of use for convenient styling at home or on the go.",
         categoryId: "cmt0it6qb0004ccg8ai9xw8ou",
         ~~~~~~~~~~
         brandId: "cmt930lfn0002u60cau0qmi3z",
         price: 3500,
         compareAtPrice: 4500,
         costPrice: 2500,
         stockQuantity: 15,
         lowStockThreshold: 5,
         status: "ACTIVE",
         isActive: true,
         isFeatured: true,
         isNewArrival: false,
         isBestSeller: false,
         skinType: [],
         hairType: [],
         concerns: [],
         videoUrls: [
           "http://localhost:5000/uploads/videos/9f16bac5-50dc-4cd7-9662-8d8d6d8b2648.mp4"
         ],
         weight: 10,
         seoTitle: "QL001 Negative Ion Hair Straightening Comb – Cordless 12-Level",
         seoDescription: "Shop the QL001 cordless hair straightening comb with 200 million negative ions, 12 heat levels, fast heating, 9600mAh battery, and over 65 minutes of use.",
     ?   id?: String | StringFieldUpdateOperationsInput,
     ?   trackInventory?: Boolean | BoolFieldUpdateOperationsInput,
     ?   averageRating?: Decimal | DecimalFieldUpdateOperationsInput,
     ?   reviewCount?: Int | IntFieldUpdateOperationsInput,
     ?   ingredients?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   howToUse?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   benefits?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   size?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   videoUrl?: String | NullableStringFieldUpdateOperationsInput | Null,
     ?   createdAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   updatedAt?: DateTime | DateTimeFieldUpdateOperationsInput,
     ?   category?: CategoryUpdateOneRequiredWithoutProductsNestedInput,
     ?   brand?: BrandUpdateOneRequiredWithoutProductsNestedInput,
     ?   images?: ProductImageUpdateManyWithoutProductNestedInput,
     ?   variants?: ProductVariantUpdateManyWithoutProductNestedInput,
     ?   cartItems?: CartItemUpdateManyWithoutProductNestedInput,
     ?   wishlistItems?: WishlistItemUpdateManyWithoutProductNestedInput,
     ?   orderItems?: OrderItemUpdateManyWithoutProductNestedInput,
     ?   reviews?: ReviewUpdateManyWithoutProductNestedInput,
     ?   inventoryMovements?: InventoryMovementUpdateManyWithoutProductNestedInput
       },
       include: {
         images: true,
         variants: true
       }
     })

Unknown argument `categoryId`. Did you mean `category`? Available options are marked with ?.
    at throwValidationException (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\core\errorRendering\throwValidationException.ts:45:9)
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:202:7)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async Proxy._transactionWithCallback (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:722:18)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:186)
[2026-09-01T16:22:21.300Z] INFO Error logger initialised
[2026-09-01T16:22:30.995Z] ERROR PrismaClientKnownRequestError: 
Invalid `tx.productImage.deleteMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:681

  28 adminRouter.post('/products', asyncHandler(async (req, res) => { const input = productInput.parse(req.body); const { images, variants, ...data } = input; const product = await prisma.product.create({ data: { ...data, images: { create: images }, variants:{create:variants} }, include: { images: true,variants:true } }); await audit(req.user!.id, 'product.created', 'Product', product.id); res.status(201).json({ success: true, data: product }) }))
  29 // @ts-ignore -- the field is narrowed to either the unique SKU or slug below.
  30 adminRouter.post('/products/:id/duplicate', asyncHandler(async (req, res) => { const source = await prisma.product.findUnique({ where: { id: String(req.params.id) }, include: { images: { orderBy: { sortOrder: 'asc' } }, variants: true } }); if (!source) throw new AppError(404, 'Product not found.'); const uniqueProductValue = async (base: string, field: 'sku'|'slug') => { for (let suffix = 1; ; suffix++) { const value = `${base}-copy-${suffix}`; if (!await prisma.product.findUnique({ where: { [field]: value } })) return value } }; const sku = await uniqueProductValue(source.sku, 'sku'); const slug = await uniqueProductValue(source.slug, 'slug'); const variants = []; for (const variant of source.variants) { let variantSku = `${variant.sku}-copy-1`; for (let suffix = 1; await prisma.productVariant.findUnique({ where: { sku: variantSku } }); suffix++) variantSku = `${variant.sku}-copy-${suffix + 1}`; variants.push({ name: variant.name, sku: variantSku, price: variant.price, stockQuantity: variant.stockQuantity, attributes: variant.attributes ?? {}, image: variant.image, isActive: variant.isActive }) }; const product = await prisma.product.create({ data: { name: `${source.name} (Copy)`, slug, sku, shortDescription: source.shortDescription, description: source.description, categoryId: source.categoryId, brandId: source.brandId, price: source.price, compareAtPrice: source.compareAtPrice, costPrice: source.costPrice, stockQuantity: source.stockQuantity, lowStockThreshold: source.lowStockThreshold, trackInventory: source.trackInventory, isFeatured: false, isNewArrival: false, isBestSeller: false, isActive: false, status: 'DRAFT', ingredients: source.ingredients, howToUse: source.howToUse, benefits: source.benefits, skinType: source.skinType, hairType: source.hairType, concerns: source.concerns, size: source.size, videoUrls: source.videoUrls, weight: source.weight, seoTitle: source.seoTitle, seoDescription: source.seoDescription, images: { create: source.images.map(image => ({ url: image.url, altText: image.altText, sortOrder: image.sortOrder })) }, variants: { create: variants } }, include: { images: true, variants: true } }); await audit(req.user!.id, 'product.duplicated', 'Product', product.id, { sourceProductId: source.id }); res.status(201).json({ success: true, data: product }) }))
→ 31 adminRouter.patch('/products/:id', asyncHandler(async (req, res) => { const input = productInput.partial().parse(req.body); const { images, variants, ...data } = input; const product = await prisma.$transaction(async tx => { if (images) { await tx.productImage.deleteMany(
The column `Product.videoUrls` does not exist in the current database.
PrismaClientKnownRequestError: 
Invalid `tx.productImage.deleteMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:681

  28 adminRouter.post('/products', asyncHandler(async (req, res) => { const input = productInput.parse(req.body); const { images, variants, ...data } = input; const product = await prisma.product.create({ data: { ...data, images: { create: images }, variants:{create:variants} }, include: { images: true,variants:true } }); await audit(req.user!.id, 'product.created', 'Product', product.id); res.status(201).json({ success: true, data: product }) }))
  29 // @ts-ignore -- the field is narrowed to either the unique SKU or slug below.
  30 adminRouter.post('/products/:id/duplicate', asyncHandler(async (req, res) => { const source = await prisma.product.findUnique({ where: { id: String(req.params.id) }, include: { images: { orderBy: { sortOrder: 'asc' } }, variants: true } }); if (!source) throw new AppError(404, 'Product not found.'); const uniqueProductValue = async (base: string, field: 'sku'|'slug') => { for (let suffix = 1; ; suffix++) { const value = `${base}-copy-${suffix}`; if (!await prisma.product.findUnique({ where: { [field]: value } })) return value } }; const sku = await uniqueProductValue(source.sku, 'sku'); const slug = await uniqueProductValue(source.slug, 'slug'); const variants = []; for (const variant of source.variants) { let variantSku = `${variant.sku}-copy-1`; for (let suffix = 1; await prisma.productVariant.findUnique({ where: { sku: variantSku } }); suffix++) variantSku = `${variant.sku}-copy-${suffix + 1}`; variants.push({ name: variant.name, sku: variantSku, price: variant.price, stockQuantity: variant.stockQuantity, attributes: variant.attributes ?? {}, image: variant.image, isActive: variant.isActive }) }; const product = await prisma.product.create({ data: { name: `${source.name} (Copy)`, slug, sku, shortDescription: source.shortDescription, description: source.description, categoryId: source.categoryId, brandId: source.brandId, price: source.price, compareAtPrice: source.compareAtPrice, costPrice: source.costPrice, stockQuantity: source.stockQuantity, lowStockThreshold: source.lowStockThreshold, trackInventory: source.trackInventory, isFeatured: false, isNewArrival: false, isBestSeller: false, isActive: false, status: 'DRAFT', ingredients: source.ingredients, howToUse: source.howToUse, benefits: source.benefits, skinType: source.skinType, hairType: source.hairType, concerns: source.concerns, size: source.size, videoUrls: source.videoUrls, weight: source.weight, seoTitle: source.seoTitle, seoDescription: source.seoDescription, images: { create: source.images.map(image => ({ url: image.url, altText: image.altText, sortOrder: image.sortOrder })) }, variants: { create: variants } }, include: { images: true, variants: true } }); await audit(req.user!.id, 'product.duplicated', 'Product', product.id, { sourceProductId: source.id }); res.status(201).json({ success: true, data: product }) }))
→ 31 adminRouter.patch('/products/:id', asyncHandler(async (req, res) => { const input = productInput.partial().parse(req.body); const { images, variants, ...data } = input; const product = await prisma.$transaction(async tx => { if (images) { await tx.productImage.deleteMany(
The column `Product.videoUrls` does not exist in the current database.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:228:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async Proxy._transactionWithCallback (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:722:18)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\admin.ts:31:186)
[2026-09-01T16:33:42.189Z] INFO Error logger initialised
[2026-09-01T17:35:53.195Z] INFO Error logger initialised
[2026-09-01T17:36:19.465Z] INFO Error logger initialised
[2026-09-01T17:42:28.312Z] INFO Error logger initialised
[2026-09-01T17:42:51.952Z] INFO Error logger initialised
[2026-09-01T17:43:12.189Z] INFO Error logger initialised
[2026-09-01T17:43:57.262Z] INFO Error logger initialised
[2026-09-01T19:24:16.472Z] INFO Error logger initialised
[2026-09-01T19:24:17.154Z] ERROR Error: listen EADDRINUSE: address already in use :::5000
Error: listen EADDRINUSE: address already in use :::5000
    at Server.setupListenHandle [as _listen2] (node:net:1908:16)
    at listenInCluster (node:net:1965:12)
    at Server.listen (node:net:2067:7)
    at Function.listen (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\express\lib\application.js:605:24)
    at <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\server.ts:13:20)
    at Object.<anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\server.ts:39:51)
    at Module._compile (node:internal/modules/cjs/loader:1521:14)
    at Object.transformer (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\tsx\dist\register-OY9cqBEN.cjs:9:3619)
    at Module.load (node:internal/modules/cjs/loader:1266:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12)
[2026-09-01T19:50:09.454Z] INFO Error logger initialised
[2026-09-01T19:52:23.198Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:100)
[2026-09-01T19:52:23.239Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:100)
[2026-09-01T19:52:23.286Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async getCart (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:175)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:13:86)
[2026-09-01T19:52:23.297Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async getCart (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:175)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:13:86)
[2026-09-01T19:52:23.358Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-09-01T19:52:23.373Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-09-01T19:52:23.384Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:91)
[2026-09-01T19:52:23.390Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
[2026-09-01T19:52:23.394Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-09-01T19:52:23.398Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-09-01T19:52:23.406Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:91)
[2026-09-01T19:52:23.422Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
[2026-09-01T19:52:23.434Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.banner.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:143

  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
  17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany({ where: { isActive: true }, orderBy: { sortOrder: 'asc' } }) })))
  18 catalogRouter.get('/brands', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.brand.findMany({ where: { isActive: true }, orderBy: { name: 'asc' } }) })))
→ 19 catalogRouter.get('/banners', asyncHandler(async (_req, res) => { const now = new Date(); res.json({ success: true, data: await prisma.banner.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.banner.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:143

  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
  17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany({ where: { isActive: true }, orderBy: { sortOrder: 'asc' } }) })))
  18 catalogRouter.get('/brands', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.brand.findMany({ where: { isActive: true }, orderBy: { name: 'asc' } }) })))
→ 19 catalogRouter.get('/banners', asyncHandler(async (_req, res) => { const now = new Date(); res.json({ success: true, data: await prisma.banner.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:123)
[2026-09-01T20:05:57.832Z] ERROR PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:228:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:3)
[2026-09-01T20:11:54.411Z] ERROR PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:228:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:3)
[2026-09-01T20:18:12.887Z] ERROR PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:228:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:3)
[2026-09-01T20:18:34.608Z] ERROR PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:228:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:3)
[2026-09-01T21:29:08.340Z] INFO Error logger initialised
[2026-09-01T21:30:06.933Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:100)
[2026-09-01T21:30:06.941Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:100)
[2026-09-01T21:30:06.948Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async getCart (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:175)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:13:86)
[2026-09-01T21:30:06.954Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async getCart (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:175)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:13:86)
[2026-09-01T21:30:06.959Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:91)
[2026-09-01T21:30:06.968Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
[2026-09-01T21:30:06.974Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:91)
[2026-09-01T21:30:06.991Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
[2026-09-01T21:30:07.003Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.banner.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:143

  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
  17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany({ where: { isActive: true }, orderBy: { sortOrder: 'asc' } }) })))
  18 catalogRouter.get('/brands', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.brand.findMany({ where: { isActive: true }, orderBy: { name: 'asc' } }) })))
→ 19 catalogRouter.get('/banners', asyncHandler(async (_req, res) => { const now = new Date(); res.json({ success: true, data: await prisma.banner.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.banner.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:143

  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
  17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany({ where: { isActive: true }, orderBy: { sortOrder: 'asc' } }) })))
  18 catalogRouter.get('/brands', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.brand.findMany({ where: { isActive: true }, orderBy: { name: 'asc' } }) })))
→ 19 catalogRouter.get('/banners', asyncHandler(async (_req, res) => { const now = new Date(); res.json({ success: true, data: await prisma.banner.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:123)
[2026-09-01T21:30:07.011Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.banner.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:143

  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
  17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany({ where: { isActive: true }, orderBy: { sortOrder: 'asc' } }) })))
  18 catalogRouter.get('/brands', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.brand.findMany({ where: { isActive: true }, orderBy: { name: 'asc' } }) })))
→ 19 catalogRouter.get('/banners', asyncHandler(async (_req, res) => { const now = new Date(); res.json({ success: true, data: await prisma.banner.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.banner.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:143

  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
  17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany({ where: { isActive: true }, orderBy: { sortOrder: 'asc' } }) })))
  18 catalogRouter.get('/brands', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.brand.findMany({ where: { isActive: true }, orderBy: { name: 'asc' } }) })))
→ 19 catalogRouter.get('/banners', asyncHandler(async (_req, res) => { const now = new Date(); res.json({ success: true, data: await prisma.banner.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:123)
[2026-09-02T20:03:38.498Z] INFO Error logger initialised
[2026-09-02T20:29:45.986Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:100)
[2026-09-02T20:29:46.073Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async getCart (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:175)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:13:86)
[2026-09-02T20:29:46.098Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-09-02T20:29:46.124Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.refreshToken.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:44

  45   res.clearCookie('refreshToken', { path: '/api/auth' })
  46   throw new AppError(401, 'Your session has expired. Please sign in again.')
  47 }
→ 48 const stored = await prisma.refreshToken.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:48:18)
[2026-09-02T20:29:46.169Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:91)
[2026-09-02T20:29:46.175Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.$transaction([prisma.product.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:13:68

  10 const q = z.object({ search: z.string().optional(), category: z.string().optional(), brand: z.string().optional(), minPrice: z.coerce.number().nonnegative().optional(), maxPrice: z.coerce.number().positive().optional(), sort: z.enum(['newest','price-asc','price-desc','rating','recommended']).default('recommended'), page: z.coerce.number().int().positive().default(1), limit: z.coerce.number().int().min(1).max(48).default(12) }).parse(req.query)
  11 const where: Prisma.ProductWhereInput = { isActive: true, status: 'ACTIVE', category: q.category ? { slug: q.category } : undefined, brand: q.brand ? { slug: q.brand } : undefined, price: { gte: q.minPrice, lte: q.maxPrice }, OR: q.search ? [{ name: { contains: q.search, mode: 'insensitive' } }, { sku: { contains: q.search, mode: 'insensitive' } }, { brand: { name: { contains: q.search, mode: 'insensitive' } } }] : undefined }
  12 const orderBy: Prisma.ProductOrderByWithRelationInput = q.sort === 'price-asc' ? { price: 'asc' } : q.sort === 'price-desc' ? { price: 'desc' } : q.sort === 'rating' ? { averageRating: 'desc' } : q.sort === 'newest' ? { createdAt: 'desc' } : { isFeatured: 'desc' }
→ 13 const [items, total] = await prisma.$transaction([prisma.product.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
[2026-09-02T20:29:51.348Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.category.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:122

  14   res.json({ success: true, data: items, meta: { page: q.page, limit: q.limit, total, pages: Math.ceil(total / q.limit) } })
  15 }))
  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
→ 17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:17:100)
[2026-09-02T20:29:51.357Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.cart.findFirst()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:193

   9 export const cartRouter = Router()
  10 const cartInclude = { items: { include: { product: { include: { images: { take: 1, orderBy: { sortOrder: 'asc' as const } }, brand: true } }, variant: true }, orderBy: { createdAt: 'asc' as const } } }
  11 const identity = (req: Express.Request) => req.user ? { userId: req.user.id } : req.sessionId ? { sessionId: req.sessionId } : null
→ 12 const getCart = async (req: Express.Request, create = false) => { const owner = identity(req); if (!owner) throw new AppError(400, 'A session ID is required.'); const cart = await prisma.cart.findFirst(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async getCart (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:12:175)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\cart.ts:13:86)
[2026-09-02T20:29:51.363Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.storeSetting.findUnique()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:117

  10 contentRouter.post('/contact', asyncHandler(async (req, res) => { const data = z.object({ name: z.string().min(2), email: z.string().email(), phone: z.string().optional(), subject: z.string().min(3), message: z.string().min(10).max(3000) }).parse(req.body); const message = await prisma.contactMessage.create({ data }); res.status(201).json({ success: true, data: { id: message.id } }) }))
  11 contentRouter.post('/reviews', authenticate, asyncHandler(async (req, res) => { const data = z.object({ productId: z.string(), rating: z.number().int().min(1).max(5), title: z.string().min(2), comment: z.string().min(10).max(2000) }).parse(req.body); const purchased = await prisma.orderItem.findFirst({ where: { productId: data.productId, order: { userId: req.user!.id, status: 'DELIVERED' } } }); if (!purchased) throw new AppError(403, 'Reviews are available after a verified purchase.'); const review = await prisma.review.upsert({ where: { productId_userId: { productId: data.productId, userId: req.user!.id } }, create: { ...data, userId: req.user!.id, isVerifiedPurchase: true }, update: { rating: data.rating, title: data.title, comment: data.comment, status: 'PENDING' } }); res.status(201).json({ success: true, data: review }) }))
  12 contentRouter.post('/coupons/validate', asyncHandler(async (req, res) => { const { code, subtotal } = z.object({ code: z.string(), subtotal: z.number().nonnegative() }).parse(req.body); const now = new Date(); const coupon = await prisma.coupon.findUnique({ where: { code: code.toUpperCase() } }); if (!coupon) throw new AppError(400, 'Invalid coupon.'); if (!coupon.isActive || (coupon.startsAt && coupon.startsAt > now) || (coupon.expiresAt && coupon.expiresAt < now) || (coupon.usageLimit != null && coupon.usageCount >= coupon.usageLimit)) throw new AppError(400, 'Expired coupon.'); if (coupon.minimumSpend && subtotal < Number(coupon.minimumSpend)) throw new AppError(400, 'Your bag does not meet the minimum spend for this coupon.'); let discount = coupon.type === 'PERCENTAGE' ? subtotal * Number(coupon.value) / 100 : Number(coupon.value); if (coupon.maximumDiscount) discount = Math.min(discount, Number(coupon.maximumDiscount)); res.json({ success: true, data: { code: coupon.code, discount: Math.min(discount, subtotal) } }) }))
→ 13 contentRouter.get('/store-settings', asyncHandler(async (_req, res) => { const settings = await prisma.storeSetting.findUnique(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\content.ts:13:91)
[2026-09-02T20:29:51.378Z] ERROR PrismaClientInitializationError: 
Invalid `prisma.banner.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:143

  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
  17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany({ where: { isActive: true }, orderBy: { sortOrder: 'asc' } }) })))
  18 catalogRouter.get('/brands', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.brand.findMany({ where: { isActive: true }, orderBy: { name: 'asc' } }) })))
→ 19 catalogRouter.get('/banners', asyncHandler(async (_req, res) => { const now = new Date(); res.json({ success: true, data: await prisma.banner.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
PrismaClientInitializationError: 
Invalid `prisma.banner.findMany()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:143

  16 catalogRouter.get('/products/:slug', asyncHandler(async (req, res) => { const item = await prisma.product.findFirst({ where: { slug: String(req.params.slug), isActive: true }, include: { brand: true, category: true, images: { orderBy: { sortOrder: 'asc' } }, variants: { where: { isActive: true } }, reviews: { where: { status: 'APPROVED' }, include: { user: { select: { firstName: true, lastName: true } } } } } }); if (!item) throw new AppError(404, 'Product not found.'); res.json({ success: true, data: item }) }))
  17 catalogRouter.get('/categories', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.category.findMany({ where: { isActive: true }, orderBy: { sortOrder: 'asc' } }) })))
  18 catalogRouter.get('/brands', asyncHandler(async (_req, res) => res.json({ success: true, data: await prisma.brand.findMany({ where: { isActive: true }, orderBy: { name: 'asc' } }) })))
→ 19 catalogRouter.get('/banners', asyncHandler(async (_req, res) => { const now = new Date(); res.json({ success: true, data: await prisma.banner.findMany(
Can't reach database server at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`

Please make sure your database server is running at `ep-round-dream-aymm52nx-pooler.c-5.us-east-2.aws.neon.tech:5432`.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:242:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\catalog.ts:19:123)
[2026-09-02T20:32:43.031Z] ERROR PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:228:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:3)
[2026-09-02T20:34:37.573Z] ERROR PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:228:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:3)
[2026-09-02T20:49:42.285Z] INFO Error logger initialised
[2026-09-02T20:53:51.912Z] INFO Error logger initialised
[2026-09-02T20:55:37.142Z] INFO Error logger initialised
[2026-09-02T21:01:37.183Z] ERROR PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
PrismaClientKnownRequestError: 
Invalid `prisma.refreshToken.delete()` invocation in
C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:29

  48 const stored = await prisma.refreshToken.findUnique({ where: { tokenHash: hashToken(token) }, include: { user: true } })
  49 if (!stored || stored.expiresAt < new Date() || stored.user.status !== 'ACTIVE' || stored.userId !== payload.sub) { res.clearCookie('refreshToken', { path: '/api/auth' }); throw new AppError(401, 'Your session has expired. Please sign in again.') }
  50 // Rotate the refresh credential on every use so a copied/old token cannot be replayed.
→ 51 await prisma.refreshToken.delete(
An operation failed because it depends on one or more records that were required but not found. No record was found for a delete.
    at ei.handleRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:228:13)
    at ei.handleAndLogRequestError (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:174:12)
    at ei.request (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\RequestHandler.ts:143:12)
    at async a (C:\Users\USER\Desktop\pr\Myokin-beauty\server\node_modules\@prisma\client\src\runtime\getPrismaClient.ts:833:24)
    at async <anonymous> (C:\Users\USER\Desktop\pr\Myokin-beauty\server\src\routes\auth.ts:51:3)
[2026-09-02T21:03:01.955Z] INFO Error logger initialised
[2026-09-03T18:07:35.182Z] INFO Error logger initialised
[2026-09-03T19:10:13.768Z] INFO Error logger initialised
[2026-09-03T19:11:17.581Z] INFO Error logger initialised
[2026-09-03T19:26:39.842Z] INFO Error logger initialised
[2026-09-03T19:39:30.104Z] INFO Error logger initialised
[2026-09-03T19:58:17.605Z] INFO Error logger initialised
[2026-09-03T20:30:07.916Z] INFO Error logger initialised
[2026-09-03T20:40:34.091Z] INFO Error logger initialised
[2026-09-03T21:19:29.707Z] INFO Error logger initialised
[2026-09-03T21:30:41.136Z] INFO Error logger initialised
[2026-09-03T21:43:47.820Z] INFO Error logger initialised
[2026-09-03T23:13:29.592Z] INFO Error logger initialised
[2026-09-03T23:20:22.319Z] INFO Error logger initialised
[2026-09-03T23:30:48.831Z] INFO Error logger initialised
[2026-09-04T00:53:47.472Z] INFO Error logger initialised
[2026-09-04T00:53:48.887Z] INFO Error logger initialised
[2026-09-04T01:08:44.958Z] INFO Error logger initialised
[2026-09-04T01:13:38.957Z] INFO Error logger initialised
[2026-09-04T02:42:38.854Z] INFO Error logger initialised
[2026-09-04T02:53:12.819Z] INFO Error logger initialised
[2026-09-04T03:20:30.331Z] INFO Error logger initialised
[2026-09-04T04:24:25.043Z] INFO Error logger initialised
[2026-09-04T05:32:32.469Z] INFO Error logger initialised
[2026-09-04T06:16:29.332Z] INFO Error logger initialised
[2026-09-04T08:34:36.315Z] INFO Error logger initialised
[2026-09-04T08:40:14.565Z] INFO Error logger initialised
[2026-09-04T09:14:17.871Z] INFO Error logger initialised
[2026-09-04T13:42:17.617Z] INFO Error logger initialised
[2026-09-04T15:09:34.207Z] INFO Error logger initialised
[2026-09-04T15:09:35.975Z] INFO Error logger initialised
[2026-09-04T17:14:35.252Z] INFO Error logger initialised
[2026-09-04T17:35:08.460Z] INFO Error logger initialised
[2026-09-04T17:35:25.444Z] INFO Error logger initialised
[2026-09-04T17:40:06.906Z] INFO Error logger initialised
[2026-09-04T18:52:02.046Z] INFO Error logger initialised
[2026-09-04T19:00:09.000Z] INFO Error logger initialised
[2026-09-04T19:18:13.858Z] INFO Error logger initialised
[2026-09-04T19:24:06.402Z] INFO Error logger initialised
[2026-09-04T19:30:42.296Z] INFO Error logger initialised
[2026-09-04T19:43:03.224Z] INFO Error logger initialised
[2026-09-04T19:50:05.882Z] INFO Error logger initialised
[2026-09-04T20:05:07.527Z] INFO Error logger initialised
[2026-09-04T20:17:41.750Z] INFO Error logger initialised
[2026-09-04T20:20:05.394Z] INFO Error logger initialised
[2026-09-04T20:39:33.248Z] INFO Error logger initialised
[2026-09-04T20:40:13.416Z] INFO Error logger initialised
[2026-09-04T20:40:15.755Z] INFO Error logger initialised
[2026-09-04T20:54:14.179Z] INFO Error logger initialised
[2026-09-04T21:05:10.738Z] INFO Error logger initialised
[2026-09-04T21:11:32.548Z] INFO Error logger initialised
[2026-09-04T21:21:03.619Z] INFO Error logger initialised
[2026-09-04T21:30:10.166Z] INFO Error logger initialised
[2026-09-04T21:42:58.000Z] INFO Error logger initialised
[2026-09-04T21:50:08.532Z] INFO Error logger initialised
[2026-09-04T22:38:49.701Z] INFO Error logger initialised
[2026-09-04T23:05:40.245Z] INFO Error logger initialised
[2026-09-04T23:56:52.817Z] INFO Error logger initialised
[2026-09-05T00:46:34.946Z] INFO Error logger initialised
[2026-09-05T04:26:19.725Z] INFO Error logger initialised
[2026-09-05T04:54:44.133Z] INFO Error logger initialised
[2026-09-05T05:03:35.333Z] INFO Error logger initialised
[2026-09-05T05:20:26.631Z] INFO Error logger initialised
[2026-09-05T05:58:05.178Z] INFO Error logger initialised
[2026-09-05T06:50:18.453Z] INFO Error logger initialised
[2026-09-05T07:13:28.783Z] INFO Error logger initialised
[2026-09-05T07:13:28.788Z] INFO Error logger initialised
[2026-09-05T07:20:37.383Z] INFO Error logger initialised
[2026-09-05T07:30:55.766Z] INFO Error logger initialised
[2026-09-05T07:40:41.126Z] INFO Error logger initialised
[2026-09-05T07:44:24.174Z] INFO Error logger initialised
[2026-09-05T08:02:23.481Z] INFO Error logger initialised
[2026-09-05T08:11:31.836Z] INFO Error logger initialised
[2026-09-05T08:36:14.339Z] INFO Error logger initialised
[2026-09-05T08:53:34.783Z] INFO Error logger initialised
[2026-09-05T09:08:25.607Z] INFO Error logger initialised
[2026-09-05T09:25:04.282Z] INFO Error logger initialised
[2026-09-05T09:39:53.483Z] INFO Error logger initialised
[2026-09-05T09:40:23.410Z] INFO Error logger initialised
[2026-09-05T10:08:25.306Z] INFO Error logger initialised
[2026-09-05T10:31:16.654Z] INFO Error logger initialised
[2026-09-05T10:44:44.763Z] INFO Error logger initialised
[2026-09-05T12:30:07.694Z] INFO Error logger initialised
[2026-09-05T13:04:55.124Z] INFO Error logger initialised
[2026-09-05T13:43:02.356Z] INFO Error logger initialised
[2026-09-05T16:11:13.228Z] INFO Error logger initialised
[2026-09-05T17:27:57.247Z] INFO Error logger initialised
[2026-09-05T17:47:00.898Z] INFO Error logger initialised
[2026-09-05T18:19:55.111Z] INFO Error logger initialised
[2026-09-05T18:20:08.462Z] INFO Error logger initialised
[2026-09-05T20:45:37.146Z] INFO Error logger initialised
[2026-09-05T21:43:19.401Z] INFO Error logger initialised
[2026-09-06T00:12:23.026Z] INFO Error logger initialised
[2026-09-06T00:12:24.534Z] INFO Error logger initialised
[2026-09-06T02:08:56.702Z] INFO Error logger initialised
[2026-09-06T02:23:55.236Z] INFO Error logger initialised
[2026-09-06T02:56:57.193Z] INFO Error logger initialised
[2026-09-06T02:56:58.852Z] INFO Error logger initialised
[2026-09-06T03:03:36.888Z] INFO Error logger initialised
[2026-09-06T04:11:51.233Z] INFO Error logger initialised
[2026-09-06T04:11:52.969Z] INFO Error logger initialised
[2026-09-06T04:49:10.908Z] INFO Error logger initialised
[2026-09-06T07:48:56.134Z] INFO Error logger initialised
[2026-09-06T07:51:08.813Z] INFO Error logger initialised
[2026-09-06T08:48:43.938Z] INFO Error logger initialised
[2026-09-06T10:53:29.725Z] INFO Error logger initialised
[2026-09-06T10:53:38.918Z] INFO Error logger initialised
[2026-09-06T11:25:19.269Z] INFO Error logger initialised
[2026-09-06T15:43:13.809Z] INFO Error logger initialised
[2026-09-06T16:11:26.739Z] INFO Error logger initialised
[2026-09-06T16:30:08.080Z] INFO Error logger initialised
[2026-09-06T20:48:36.998Z] INFO Error logger initialised
[2026-09-06T20:55:49.394Z] INFO Error logger initialised
[2026-09-06T21:47:46.916Z] INFO Error logger initialised
[2026-09-06T23:40:42.125Z] INFO Error logger initialised
[2026-09-07T01:44:35.431Z] INFO Error logger initialised
[2026-09-07T02:33:23.790Z] INFO Error logger initialised
[2026-09-07T02:33:35.528Z] INFO Error logger initialised
[2026-09-07T03:01:40.095Z] INFO Error logger initialised
[2026-09-07T03:52:25.829Z] INFO Error logger initialised
[2026-09-07T05:32:50.811Z] INFO Error logger initialised
[2026-09-07T06:04:14.886Z] INFO Error logger initialised
[2026-09-07T06:32:03.966Z] INFO Error logger initialised
[2026-09-07T07:01:18.727Z] INFO Error logger initialised
[2026-09-07T07:10:19.582Z] INFO Error logger initialised
[2026-09-07T07:20:35.979Z] INFO Error logger initialised
[2026-09-07T07:37:22.850Z] INFO Error logger initialised
[2026-09-07T07:43:34.875Z] INFO Error logger initialised
[2026-09-07T07:50:57.746Z] INFO Error logger initialised
[2026-09-07T08:42:53.948Z] INFO Error logger initialised
[2026-09-07T08:51:04.697Z] INFO Error logger initialised
[2026-09-07T09:24:43.338Z] INFO Error logger initialised
[2026-09-07T09:49:41.367Z] INFO Error logger initialised
[2026-09-07T10:18:51.526Z] INFO Error logger initialised
[2026-09-07T10:53:34.299Z] INFO Error logger initialised
[2026-09-07T11:03:47.502Z] INFO Error logger initialised
[2026-09-07T11:53:44.477Z] INFO Error logger initialised
[2026-09-07T12:01:38.537Z] INFO Error logger initialised
[2026-09-07T12:52:47.015Z] INFO Error logger initialised
[2026-09-07T13:33:29.145Z] INFO Error logger initialised
[2026-09-07T14:14:26.301Z] INFO Error logger initialised
[2026-09-07T15:23:04.883Z] INFO Error logger initialised
[2026-09-07T15:32:28.204Z] INFO Error logger initialised
[2026-09-07T15:50:57.728Z] INFO Error logger initialised
[2026-09-07T16:10:48.427Z] INFO Error logger initialised
[2026-09-07T17:41:18.298Z] INFO Error logger initialised
[2026-09-07T18:49:59.178Z] INFO Error logger initialised
[2026-09-07T19:00:27.241Z] INFO Error logger initialised
[2026-09-07T20:00:22.690Z] INFO Error logger initialised
[2026-09-07T20:11:15.060Z] INFO Error logger initialised
[2026-09-07T22:10:56.677Z] INFO Error logger initialised
[2026-09-07T22:48:02.211Z] INFO Error logger initialised
[2026-09-07T22:59:59.386Z] INFO Error logger initialised
[2026-09-07T23:00:05.783Z] INFO Error logger initialised
[2026-09-07T23:13:46.318Z] INFO Error logger initialised
[2026-09-07T23:33:53.907Z] INFO Error logger initialised
[2026-09-08T00:24:20.384Z] INFO Error logger initialised
[2026-09-08T00:47:22.333Z] INFO Error logger initialised
[2026-09-08T01:11:42.739Z] INFO Error logger initialised
[2026-09-08T01:50:44.387Z] INFO Error logger initialised
[2026-09-08T01:50:49.516Z] INFO Error logger initialised
[2026-09-08T05:36:34.958Z] INFO Error logger initialised
[2026-09-08T05:48:27.450Z] INFO Error logger initialised
[2026-09-08T05:48:28.982Z] INFO Error logger initialised
[2026-09-08T05:51:54.601Z] INFO Error logger initialised
[2026-09-08T06:12:05.995Z] INFO Error logger initialised
[2026-09-08T06:42:01.797Z] INFO Error logger initialised
[2026-09-08T06:42:01.969Z] INFO Error logger initialised
[2026-09-08T09:17:22.869Z] INFO Error logger initialised
[2026-09-08T09:39:25.501Z] INFO Error logger initialised
[2026-09-08T10:16:00.256Z] INFO Error logger initialised
[2026-09-08T11:41:42.528Z] INFO Error logger initialised
[2026-09-08T13:06:10.329Z] INFO Error logger initialised
[2026-09-08T13:58:57.589Z] INFO Error logger initialised
[2026-09-08T17:16:27.574Z] INFO Error logger initialised
[2026-09-08T17:46:56.426Z] INFO Error logger initialised
[2026-09-08T18:18:34.869Z] INFO Error logger initialised
[2026-09-08T18:22:43.885Z] INFO Error logger initialised
[2026-09-08T18:30:11.882Z] INFO Error logger initialised
[2026-09-08T18:42:54.392Z] INFO Error logger initialised
[2026-09-08T18:50:09.355Z] INFO Error logger initialised
[2026-09-08T19:00:05.613Z] INFO Error logger initialised
[2026-09-08T19:12:16.839Z] INFO Error logger initialised
[2026-09-08T19:22:37.690Z] INFO Error logger initialised
[2026-09-08T19:30:24.032Z] INFO Error logger initialised
[2026-09-08T21:05:53.733Z] INFO Error logger initialised
[2026-09-08T21:41:42.308Z] INFO Error logger initialised
[2026-09-08T22:19:47.146Z] INFO Error logger initialised
[2026-09-08T22:20:09.965Z] INFO Error logger initialised
[2026-09-08T22:31:23.294Z] INFO Error logger initialised
[2026-09-08T22:31:58.111Z] INFO Error logger initialised
[2026-09-08T23:25:54.909Z] INFO Error logger initialised
[2026-09-09T01:31:08.642Z] INFO Error logger initialised
[2026-09-09T02:43:36.178Z] INFO Error logger initialised
[2026-09-09T02:43:38.657Z] INFO Error logger initialised
[2026-09-09T02:51:38.697Z] INFO Error logger initialised
[2026-09-09T04:14:22.025Z] INFO Error logger initialised
[2026-09-09T04:23:32.332Z] INFO Error logger initialised
[2026-09-09T04:43:57.751Z] INFO Error logger initialised
[2026-09-09T05:15:57.044Z] INFO Error logger initialised
[2026-09-09T07:22:16.075Z] INFO Error logger initialised
[2026-09-09T08:14:41.793Z] INFO Error logger initialised
[2026-09-09T08:52:33.578Z] INFO Error logger initialised
[2026-09-09T09:40:29.724Z] INFO Error logger initialised
[2026-09-09T09:50:46.713Z] INFO Error logger initialised
[2026-09-09T10:07:52.085Z] INFO Error logger initialised
[2026-09-09T10:10:13.343Z] INFO Error logger initialised
[2026-09-09T10:30:17.259Z] INFO Error logger initialised
[2026-09-09T10:43:20.111Z] INFO Error logger initialised
[2026-09-09T10:50:17.329Z] INFO Error logger initialised
[2026-09-09T11:07:52.510Z] INFO Error logger initialised
[2026-09-09T11:11:44.878Z] INFO Error logger initialised
[2026-09-09T11:24:07.392Z] INFO Error logger initialised
[2026-09-09T11:30:15.162Z] INFO Error logger initialised
[2026-09-09T11:40:39.951Z] INFO Error logger initialised
[2026-09-09T12:11:14.115Z] INFO Error logger initialised
[2026-09-09T12:22:16.603Z] INFO Error logger initialised
[2026-09-09T12:30:26.444Z] INFO Error logger initialised
[2026-09-09T13:42:04.041Z] INFO Error logger initialised
[2026-09-09T13:42:17.091Z] INFO Error logger initialised
[2026-09-09T13:59:21.086Z] INFO Error logger initialised
[2026-09-09T14:00:21.512Z] INFO Error logger initialised
[2026-09-09T14:01:15.735Z] INFO Error logger initialised
[2026-09-09T14:28:04.731Z] INFO Error logger initialised
[2026-09-09T14:30:14.117Z] INFO Error logger initialised
[2026-09-09T15:08:30.179Z] INFO Error logger initialised
[2026-09-09T15:08:31.843Z] INFO Error logger initialised
[2026-09-09T16:04:38.951Z] INFO Error logger initialised
[2026-09-09T16:04:48.709Z] INFO Error logger initialised
[2026-09-09T16:10:47.139Z] INFO Error logger initialised
[2026-09-09T16:28:12.176Z] INFO Error logger initialised
[2026-09-09T16:30:26.110Z] INFO Error logger initialised
[2026-09-09T16:32:59.355Z] INFO Error logger initialised
[2026-09-09T18:45:54.150Z] INFO Error logger initialised
[2026-09-09T19:51:38.139Z] INFO Error logger initialised
[2026-09-09T21:56:16.203Z] INFO Error logger initialised
[2026-09-09T23:46:35.610Z] INFO Error logger initialised
[2026-09-09T23:55:44.442Z] INFO Error logger initialised
[2026-09-10T01:17:47.507Z] INFO Error logger initialised
[2026-09-10T03:20:21.938Z] INFO Error logger initialised
[2026-09-10T05:39:26.989Z] INFO Error logger initialised
[2026-09-10T05:57:54.651Z] INFO Error logger initialised
[2026-09-10T06:41:32.426Z] INFO Error logger initialised
[2026-09-10T09:06:03.919Z] INFO Error logger initialised
[2026-09-10T09:12:00.845Z] INFO Error logger initialised
[2026-09-10T09:35:09.791Z] INFO Error logger initialised
[2026-09-10T10:11:16.300Z] INFO Error logger initialised
[2026-09-10T11:44:08.999Z] INFO Error logger initialised
[2026-09-10T14:48:56.437Z] INFO Error logger initialised
[2026-09-10T15:57:41.147Z] INFO Error logger initialised
[2026-09-10T17:10:25.237Z] INFO Error logger initialised
[2026-09-10T19:14:48.496Z] INFO Error logger initialised
[2026-09-10T22:28:14.167Z] INFO Error logger initialised
[2026-09-10T23:07:28.439Z] INFO Error logger initialised
[2026-09-11T00:42:43.479Z] INFO Error logger initialised
[2026-09-11T01:12:21.757Z] INFO Error logger initialised
[2026-09-11T04:15:52.793Z] INFO Error logger initialised
[2026-09-11T05:08:23.732Z] INFO Error logger initialised
[2026-09-11T05:20:40.281Z] INFO Error logger initialised
[2026-09-11T06:10:17.167Z] INFO Error logger initialised
[2026-09-11T06:10:17.176Z] INFO Error logger initialised
[2026-09-11T07:03:09.566Z] INFO Error logger initialised
[2026-09-11T10:31:04.698Z] INFO Error logger initialised
[2026-09-11T11:07:33.353Z] INFO Error logger initialised
[2026-09-11T12:19:53.208Z] INFO Error logger initialised
[2026-09-11T15:12:50.513Z] INFO Error logger initialised
[2026-09-11T15:25:11.013Z] INFO Error logger initialised
[2026-09-11T17:46:21.082Z] INFO Error logger initialised
[2026-09-11T18:10:25.829Z] INFO Error logger initialised
[2026-09-11T18:44:35.971Z] INFO Error logger initialised
[2026-09-11T20:33:48.136Z] INFO Error logger initialised
[2026-09-11T21:09:12.990Z] INFO Error logger initialised
[2026-09-11T21:13:41.582Z] INFO Error logger initialised
[2026-09-11T21:23:40.185Z] INFO Error logger initialised
[2026-09-11T21:46:59.334Z] INFO Error logger initialised
[2026-09-11T22:45:30.661Z] INFO Error logger initialised
[2026-09-11T22:54:50.098Z] INFO Error logger initialised
[2026-09-11T23:00:10.776Z] INFO Error logger initialised
[2026-09-11T23:32:09.977Z] INFO Error logger initialised
[2026-09-11T23:58:57.829Z] INFO Error logger initialised
[2026-09-12T00:13:46.152Z] INFO Error logger initialised
[2026-09-12T00:36:52.484Z] INFO Error logger initialised
[2026-09-12T00:41:30.370Z] INFO Error logger initialised
[2026-09-12T00:52:08.079Z] INFO Error logger initialised
[2026-09-12T00:59:52.069Z] INFO Error logger initialised
[2026-09-12T01:00:31.701Z] INFO Error logger initialised
[2026-09-12T01:27:20.754Z] INFO Error logger initialised
[2026-09-12T02:54:36.052Z] INFO Error logger initialised
[2026-09-12T04:39:13.685Z] INFO Error logger initialised
[2026-09-12T05:24:58.797Z] INFO Error logger initialised
[2026-09-12T07:52:30.237Z] INFO Error logger initialised
[2026-09-12T09:29:09.842Z] INFO Error logger initialised
[2026-09-12T10:47:04.893Z] INFO Error logger initialised
[2026-09-12T10:54:19.945Z] INFO Error logger initialised
[2026-09-12T11:39:39.624Z] INFO Error logger initialised
[2026-09-12T12:16:42.663Z] INFO Error logger initialised
[2026-09-12T12:16:42.787Z] INFO Error logger initialised
[2026-09-12T12:20:10.142Z] INFO Error logger initialised
[2026-09-12T12:20:12.010Z] INFO Error logger initialised
[2026-09-12T12:55:34.159Z] INFO Error logger initialised
[2026-09-12T14:20:23.954Z] INFO Error logger initialised
[2026-09-12T16:26:14.992Z] INFO Error logger initialised
[2026-09-12T18:09:06.363Z] INFO Error logger initialised
[2026-09-12T18:22:57.921Z] INFO Error logger initialised
[2026-09-12T19:37:18.192Z] INFO Error logger initialised
[2026-09-13T00:51:09.254Z] INFO Error logger initialised
[2026-09-13T01:52:08.805Z] INFO Error logger initialised
[2026-09-13T02:32:11.455Z] INFO Error logger initialised
[2026-09-13T03:17:50.107Z] INFO Error logger initialised
[2026-09-13T03:35:37.550Z] INFO Error logger initialised
[2026-09-13T03:35:37.782Z] INFO Error logger initialised
[2026-09-13T04:46:24.489Z] INFO Error logger initialised
[2026-09-13T04:55:10.466Z] INFO Error logger initialised
[2026-09-13T05:19:53.706Z] INFO Error logger initialised
[2026-09-13T09:09:53.244Z] INFO Error logger initialised
[2026-09-13T09:19:43.465Z] INFO Error logger initialised
[2026-09-13T09:40:12.917Z] INFO Error logger initialised
[2026-09-13T10:15:50.495Z] INFO Error logger initialised
[2026-09-13T11:11:50.256Z] INFO Error logger initialised
[2026-09-13T12:16:09.220Z] INFO Error logger initialised
[2026-09-13T14:00:21.951Z] INFO Error logger initialised
[2026-09-13T14:34:36.356Z] INFO Error logger initialised
[2026-09-13T15:16:41.969Z] INFO Error logger initialised
[2026-09-13T15:16:42.285Z] INFO Error logger initialised
[2026-09-13T16:39:17.472Z] INFO Error logger initialised
[2026-09-13T16:42:44.278Z] INFO Error logger initialised
[2026-09-13T17:25:52.538Z] INFO Error logger initialised
[2026-09-13T18:06:26.948Z] INFO Error logger initialised
[2026-09-13T18:11:45.592Z] INFO Error logger initialised
[2026-09-13T19:00:43.633Z] INFO Error logger initialised
[2026-09-14T00:43:39.209Z] INFO Error logger initialised
[2026-09-14T00:58:23.204Z] INFO Error logger initialised
[2026-09-14T01:01:13.786Z] INFO Error logger initialised
[2026-09-14T01:01:15.389Z] INFO Error logger initialised
[2026-09-14T02:25:35.312Z] INFO Error logger initialised
[2026-09-14T02:57:20.139Z] INFO Error logger initialised
[2026-09-14T03:58:07.031Z] INFO Error logger initialised
[2026-09-14T04:10:25.737Z] INFO Error logger initialised
[2026-09-14T05:35:15.168Z] INFO Error logger initialised
[2026-09-14T05:35:15.294Z] INFO Error logger initialised
[2026-09-14T07:23:10.997Z] INFO Error logger initialised
[2026-09-14T07:49:20.521Z] INFO Error logger initialised
[2026-09-14T07:59:02.416Z] INFO Error logger initialised
[2026-09-14T08:11:52.380Z] INFO Error logger initialised
[2026-09-14T08:36:41.956Z] INFO Error logger initialised
[2026-09-14T10:05:14.022Z] INFO Error logger initialised
[2026-09-14T10:12:12.568Z] INFO Error logger initialised
[2026-09-14T10:26:26.521Z] INFO Error logger initialised
[2026-09-14T10:30:36.168Z] INFO Error logger initialised
[2026-09-14T10:45:52.752Z] INFO Error logger initialised
[2026-09-14T10:51:19.875Z] INFO Error logger initialised
[2026-09-14T11:14:33.824Z] INFO Error logger initialised
[2026-09-14T11:22:42.931Z] INFO Error logger initialised
[2026-09-14T11:30:58.327Z] INFO Error logger initialised
[2026-09-14T11:50:39.803Z] INFO Error logger initialised
[2026-09-14T11:51:27.058Z] INFO Error logger initialised
[2026-09-14T12:43:34.976Z] INFO Error logger initialised
[2026-09-14T13:11:50.368Z] INFO Error logger initialised
[2026-09-14T14:07:30.900Z] INFO Error logger initialised
[2026-09-14T14:10:12.549Z] INFO Error logger initialised
[2026-09-14T14:44:42.396Z] INFO Error logger initialised
[2026-09-14T14:50:38.702Z] INFO Error logger initialised
[2026-09-14T14:55:01.803Z] INFO Error logger initialised
[2026-09-14T15:18:30.133Z] INFO Error logger initialised
[2026-09-14T15:45:26.719Z] INFO Error logger initialised
[2026-09-14T15:50:08.323Z] INFO Error logger initialised
[2026-09-14T16:00:15.267Z] INFO Error logger initialised
[2026-09-14T16:13:59.458Z] INFO Error logger initialised
[2026-09-14T16:24:16.917Z] INFO Error logger initialised
[2026-09-14T16:27:31.196Z] INFO Error logger initialised
[2026-09-14T16:30:11.046Z] INFO Error logger initialised
[2026-09-14T16:50:00.988Z] INFO Error logger initialised
[2026-09-14T16:50:10.896Z] INFO Error logger initialised
[2026-09-14T17:00:19.808Z] INFO Error logger initialised
[2026-09-14T17:15:45.954Z] INFO Error logger initialised
[2026-09-14T17:22:34.598Z] INFO Error logger initialised
[2026-09-14T19:19:14.124Z] INFO Error logger initialised
[2026-09-14T19:37:31.967Z] INFO Error logger initialised
[2026-09-14T20:54:00.133Z] INFO Error logger initialised
[2026-09-14T22:38:15.289Z] INFO Error logger initialised
[2026-09-14T23:16:35.480Z] INFO Error logger initialised
[2026-09-15T00:57:34.293Z] INFO Error logger initialised
[2026-09-15T01:04:49.803Z] INFO Error logger initialised
[2026-09-15T07:42:41.955Z] INFO Error logger initialised
[2026-09-15T08:03:18.292Z] INFO Error logger initialised
[2026-09-15T11:35:42.934Z] INFO Error logger initialised
[2026-09-15T11:40:15.237Z] INFO Error logger initialised
[2026-09-15T11:59:40.600Z] INFO Error logger initialised
[2026-09-15T15:05:25.134Z] INFO Error logger initialised
[2026-09-15T15:13:30.552Z] INFO Error logger initialised
[2026-09-15T17:46:10.317Z] INFO Error logger initialised
[2026-09-15T18:50:02.908Z] INFO Error logger initialised
[2026-09-15T20:42:19.418Z] INFO Error logger initialised
[2026-09-15T21:01:53.007Z] INFO Error logger initialised
[2026-09-15T22:23:59.872Z] INFO Error logger initialised
[2026-09-15T22:36:19.413Z] INFO Error logger initialised
[2026-09-15T22:55:53.096Z] INFO Error logger initialised
[2026-09-15T23:05:08.411Z] INFO Error logger initialised
[2026-09-15T23:41:24.272Z] INFO Error logger initialised
[2026-09-16T01:32:12.513Z] INFO Error logger initialised
[2026-09-16T01:32:13.920Z] INFO Error logger initialised
[2026-09-16T03:11:47.036Z] INFO Error logger initialised
[2026-09-16T04:56:25.603Z] INFO Error logger initialised
[2026-09-16T05:06:54.844Z] INFO Error logger initialised
[2026-09-16T06:07:48.371Z] INFO Error logger initialised
[2026-09-16T06:22:52.581Z] INFO Error logger initialised
[2026-09-16T06:44:43.878Z] INFO Error logger initialised
[2026-09-16T08:36:33.222Z] INFO Error logger initialised
[2026-09-16T10:27:52.407Z] INFO Error logger initialised
[2026-09-16T13:00:55.799Z] INFO Error logger initialised
[2026-09-16T14:08:34.824Z] INFO Error logger initialised
[2026-09-16T14:14:41.404Z] INFO Error logger initialised
[2026-09-16T14:16:02.313Z] INFO Error logger initialised
[2026-09-16T16:59:45.597Z] INFO Error logger initialised
[2026-09-16T17:02:10.503Z] INFO Error logger initialised
[2026-09-16T20:11:35.467Z] INFO Error logger initialised
[2026-09-16T23:14:06.255Z] INFO Error logger initialised
[2026-09-17T06:13:47.877Z] INFO Error logger initialised
[2026-09-17T06:13:47.882Z] INFO Error logger initialised
[2026-09-17T07:44:01.442Z] INFO Error logger initialised
[2026-09-17T08:51:02.294Z] INFO Error logger initialised
[2026-09-17T10:08:41.493Z] INFO Error logger initialised
[2026-09-17T10:42:07.891Z] INFO Error logger initialised
[2026-09-17T11:35:46.074Z] INFO Error logger initialised
[2026-09-17T17:11:12.964Z] INFO Error logger initialised
[2026-09-17T17:52:21.552Z] INFO Error logger initialised
[2026-09-17T20:57:43.021Z] INFO Error logger initialised
[2026-09-18T00:20:42.984Z] INFO Error logger initialised
[2026-09-18T01:39:48.996Z] INFO Error logger initialised
[2026-09-18T02:01:18.998Z] INFO Error logger initialised
[2026-09-18T02:26:17.815Z] INFO Error logger initialised
[2026-09-18T02:55:43.086Z] INFO Error logger initialised
[2026-09-18T03:49:25.746Z] INFO Error logger initialised
[2026-09-18T05:01:46.293Z] INFO Error logger initialised
[2026-09-18T07:28:05.339Z] INFO Error logger initialised
[2026-09-18T07:30:33.379Z] INFO Error logger initialised
[2026-09-18T08:29:07.620Z] INFO Error logger initialised
[2026-09-18T09:18:49.711Z] INFO Error logger initialised
[2026-09-18T10:02:53.981Z] INFO Error logger initialised
[2026-09-18T10:21:57.227Z] INFO Error logger initialised
[2026-09-18T10:37:11.296Z] INFO Error logger initialised
[2026-09-18T10:40:38.186Z] INFO Error logger initialised
[2026-09-18T12:48:27.127Z] INFO Error logger initialised
[2026-09-18T12:48:28.629Z] INFO Error logger initialised
[2026-09-18T13:13:45.405Z] INFO Error logger initialised
[2026-09-18T14:59:26.291Z] INFO Error logger initialised
[2026-09-18T15:00:07.005Z] INFO Error logger initialised
[2026-09-18T16:55:51.997Z] INFO Error logger initialised
[2026-09-18T18:02:37.420Z] INFO Error logger initialised
[2026-09-18T19:26:41.644Z] INFO Error logger initialised
[2026-09-18T19:47:42.653Z] INFO Error logger initialised
[2026-09-18T19:55:05.747Z] INFO Error logger initialised
[2026-09-18T19:59:44.865Z] INFO Error logger initialised
[2026-09-18T20:00:12.215Z] INFO Error logger initialised
[2026-09-18T20:00:25.492Z] INFO Error logger initialised
[2026-09-18T20:22:03.776Z] INFO Error logger initialised
