Files
coop/backend/src/routes/wallet.ts
T

43 lines
2.5 KiB
TypeScript

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 };