43 lines
2.5 KiB
TypeScript
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 };
|