fix: live update request status

This commit is contained in:
2026-04-22 13:53:37 -04:00
parent de275976ed
commit f0b3338f08
3 changed files with 24 additions and 5 deletions
+8 -1
View File
@@ -79,7 +79,9 @@ router.post(
cost += (seasons.length - 1) * (settings?.tvPerSeasonCost || 250); cost += (seasons.length - 1) * (settings?.tvPerSeasonCost || 250);
const dbBalance = user.totalEarned - user.totalSpent; const dbBalance = user.totalEarned - user.totalSpent;
if (dbBalance < cost) if (dbBalance < cost)
return res.status(400).json({ return res
.status(400)
.json({
error: "Insufficient balance", error: "Insufficient balance",
required: cost, required: cost,
current: dbBalance, current: dbBalance,
@@ -162,6 +164,11 @@ router.post(
reason: `Refunded: ${request.title}`, reason: `Refunded: ${request.title}`,
}); });
} }
io.to(`user:${request.userId}`).emit("request_updated", {
id: request.id,
status: updatedRequest.status,
title: request.title,
});
res.json({ success: true, request: updatedRequest }); res.json({ success: true, request: updatedRequest });
}), }),
); );
@@ -6,11 +6,13 @@ import { Button } from "@/components/ui/button";
import { Card, CardContent } from "@/components/ui/card"; import { Card, CardContent } from "@/components/ui/card";
import { Input } from "@/components/ui/input"; import { Input } from "@/components/ui/input";
import { userApi } from "@/lib/api"; import { userApi } from "@/lib/api";
import { useSocket } from "@/lib/socket";
export function RequestHistory() { export function RequestHistory() {
const [requests, setRequests] = useState<any[]>([]); const [requests, setRequests] = useState<any[]>([]);
const [status, setStatus] = useState(""); const [status, setStatus] = useState("");
const [query, setQuery] = useState(""); const [query, setQuery] = useState("");
const socket = useSocket();
const load = async () => { const load = async () => {
const res = await userApi.getRequests(1, 50, status || undefined); const res = await userApi.getRequests(1, 50, status || undefined);
@@ -20,6 +22,14 @@ export function RequestHistory() {
useEffect(() => { useEffect(() => {
load(); load();
}, [status]); }, [status]);
useEffect(() => {
if (!socket) return;
const refresh = () => load();
socket.on("request_updated", refresh);
return () => {
socket.off("request_updated", refresh);
};
}, [socket, status]);
const filtered = requests.filter( const filtered = requests.filter(
(r) => (r) =>
+2
View File
@@ -51,10 +51,12 @@ export default function DashboardPage() {
socket.on("credits_earned", refresh); socket.on("credits_earned", refresh);
socket.on("bonus_received", refresh); socket.on("bonus_received", refresh);
socket.on("credits_spent", refresh); socket.on("credits_spent", refresh);
socket.on("request_updated", refresh);
return () => { return () => {
socket.off("credits_earned", refresh); socket.off("credits_earned", refresh);
socket.off("bonus_received", refresh); socket.off("bonus_received", refresh);
socket.off("credits_spent", refresh); socket.off("credits_spent", refresh);
socket.off("request_updated", refresh);
}; };
}, [socket]); }, [socket]);