import { Router } from "express"; import { type AuthenticatedRequest, authenticate, requireAdmin } from "../middleware/auth"; import { asyncHandler } from "../middleware/errorHandler"; import { prisma } from "../utils/prisma"; const router = Router(); router.get("/", authenticate, asyncHandler(async (req: AuthenticatedRequest, res) => { const user = await prisma.user.findUnique({ where: { id: req.user!.id }, select: { totalEarned: true, totalSpent: true } }); res.json({ hasWallet: false, balance: (user?.totalEarned || 0) - (user?.totalSpent || 0), totalEarned: user?.totalEarned || 0, totalSpent: user?.totalSpent || 0 }); })); router.post("/create", authenticate, asyncHandler(async (_req: AuthenticatedRequest, res) => { res.status(410).json({ error: "Wallets removed" }); })); router.post("/connect", authenticate, asyncHandler(async (_req: AuthenticatedRequest, res) => { res.status(410).json({ error: "Wallets removed" }); })); router.post("/backup", authenticate, asyncHandler(async (_req: AuthenticatedRequest, res) => { res.status(410).json({ error: "Wallets removed" }); })); router.get("/admin/:userId", authenticate, requireAdmin, asyncHandler(async (req: AuthenticatedRequest, res) => { const user = await prisma.user.findUnique({ where: { id: req.params.userId }, select: { id: true, plexUsername: true, email: true, isAdmin: true, isActive: true, totalEarned: true, totalSpent: true, watchTimeMinutes: true, createdAt: true } }); if (!user) return res.status(404).json({ error: "User not found" }); res.json({ ...user, balance: user.totalEarned - user.totalSpent }); })); router.post("/admin/:userId/adjust", authenticate, requireAdmin, asyncHandler(async (req: AuthenticatedRequest, res) => { const { amount, reason } = req.body; if (!amount || Number.isNaN(Number(amount)) || Number(amount) === 0) return res.status(400).json({ error: "Valid amount required" }); const user = await prisma.user.findUnique({ where: { id: req.params.userId } }); if (!user) return res.status(404).json({ error: "User not found" }); const delta = Number(amount); await prisma.transaction.create({ data: { userId: user.id, type: "ADJUSTMENT", amount: Math.abs(delta), description: reason || "Admin adjustment", contentTitle: reason || "Admin adjustment" } }); await prisma.user.update({ where: { id: user.id }, data: delta > 0 ? { totalEarned: { increment: delta } } : { totalSpent: { increment: Math.abs(delta) } } }); res.json({ success: true }); })); export { router as walletRouter };