fix: live update request status
This commit is contained in:
@@ -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) =>
|
||||||
|
|||||||
@@ -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]);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user