mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-23 17:11:12 -05:00
Fix real-time stats and submission refresh
This commit is contained in:
@@ -108,36 +108,189 @@ export const useRealtimeModerationStats = (options: UseRealtimeModerationStatsOp
|
||||
.on(
|
||||
'postgres_changes',
|
||||
{
|
||||
event: '*',
|
||||
event: 'INSERT',
|
||||
schema: 'public',
|
||||
table: 'content_submissions',
|
||||
},
|
||||
() => {
|
||||
console.log('Content submissions changed');
|
||||
(payload) => {
|
||||
console.log('Content submission inserted');
|
||||
// Optimistic update: increment pending submissions
|
||||
if (payload.new.status === 'pending') {
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
pendingSubmissions: prev.pendingSubmissions + 1
|
||||
}));
|
||||
}
|
||||
// Debounced sync as backup
|
||||
debouncedFetchStats();
|
||||
}
|
||||
)
|
||||
.on(
|
||||
'postgres_changes',
|
||||
{
|
||||
event: '*',
|
||||
event: 'UPDATE',
|
||||
schema: 'public',
|
||||
table: 'content_submissions',
|
||||
},
|
||||
(payload) => {
|
||||
console.log('Content submission updated');
|
||||
// Optimistic update: adjust counter based on status change
|
||||
const oldStatus = payload.old.status;
|
||||
const newStatus = payload.new.status;
|
||||
|
||||
if (oldStatus === 'pending' && newStatus !== 'pending') {
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
pendingSubmissions: Math.max(0, prev.pendingSubmissions - 1)
|
||||
}));
|
||||
} else if (oldStatus !== 'pending' && newStatus === 'pending') {
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
pendingSubmissions: prev.pendingSubmissions + 1
|
||||
}));
|
||||
}
|
||||
|
||||
debouncedFetchStats();
|
||||
}
|
||||
)
|
||||
.on(
|
||||
'postgres_changes',
|
||||
{
|
||||
event: 'DELETE',
|
||||
schema: 'public',
|
||||
table: 'content_submissions',
|
||||
},
|
||||
(payload) => {
|
||||
console.log('Content submission deleted');
|
||||
// Optimistic update: decrement if was pending
|
||||
if (payload.old.status === 'pending') {
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
pendingSubmissions: Math.max(0, prev.pendingSubmissions - 1)
|
||||
}));
|
||||
}
|
||||
debouncedFetchStats();
|
||||
}
|
||||
)
|
||||
.on(
|
||||
'postgres_changes',
|
||||
{
|
||||
event: 'INSERT',
|
||||
schema: 'public',
|
||||
table: 'reports',
|
||||
},
|
||||
() => {
|
||||
console.log('Reports changed');
|
||||
console.log('Report inserted');
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
openReports: prev.openReports + 1
|
||||
}));
|
||||
debouncedFetchStats();
|
||||
}
|
||||
)
|
||||
.on(
|
||||
'postgres_changes',
|
||||
{
|
||||
event: '*',
|
||||
event: 'UPDATE',
|
||||
schema: 'public',
|
||||
table: 'reports',
|
||||
},
|
||||
(payload) => {
|
||||
console.log('Report updated');
|
||||
const oldStatus = payload.old.status;
|
||||
const newStatus = payload.new.status;
|
||||
|
||||
if (oldStatus === 'pending' && newStatus !== 'pending') {
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
openReports: Math.max(0, prev.openReports - 1)
|
||||
}));
|
||||
} else if (oldStatus !== 'pending' && newStatus === 'pending') {
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
openReports: prev.openReports + 1
|
||||
}));
|
||||
}
|
||||
|
||||
debouncedFetchStats();
|
||||
}
|
||||
)
|
||||
.on(
|
||||
'postgres_changes',
|
||||
{
|
||||
event: 'DELETE',
|
||||
schema: 'public',
|
||||
table: 'reports',
|
||||
},
|
||||
(payload) => {
|
||||
console.log('Report deleted');
|
||||
if (payload.old.status === 'pending') {
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
openReports: Math.max(0, prev.openReports - 1)
|
||||
}));
|
||||
}
|
||||
debouncedFetchStats();
|
||||
}
|
||||
)
|
||||
.on(
|
||||
'postgres_changes',
|
||||
{
|
||||
event: 'INSERT',
|
||||
schema: 'public',
|
||||
table: 'reviews',
|
||||
},
|
||||
() => {
|
||||
console.log('Reviews changed');
|
||||
console.log('Review inserted');
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
flaggedContent: prev.flaggedContent + 1
|
||||
}));
|
||||
debouncedFetchStats();
|
||||
}
|
||||
)
|
||||
.on(
|
||||
'postgres_changes',
|
||||
{
|
||||
event: 'UPDATE',
|
||||
schema: 'public',
|
||||
table: 'reviews',
|
||||
},
|
||||
(payload) => {
|
||||
console.log('Review updated');
|
||||
const oldStatus = payload.old.moderation_status;
|
||||
const newStatus = payload.new.moderation_status;
|
||||
|
||||
if (oldStatus === 'flagged' && newStatus !== 'flagged') {
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
flaggedContent: Math.max(0, prev.flaggedContent - 1)
|
||||
}));
|
||||
} else if (oldStatus !== 'flagged' && newStatus === 'flagged') {
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
flaggedContent: prev.flaggedContent + 1
|
||||
}));
|
||||
}
|
||||
|
||||
debouncedFetchStats();
|
||||
}
|
||||
)
|
||||
.on(
|
||||
'postgres_changes',
|
||||
{
|
||||
event: 'DELETE',
|
||||
schema: 'public',
|
||||
table: 'reviews',
|
||||
},
|
||||
(payload) => {
|
||||
console.log('Review deleted');
|
||||
if (payload.old.moderation_status === 'flagged') {
|
||||
setStats(prev => ({
|
||||
...prev,
|
||||
flaggedContent: Math.max(0, prev.flaggedContent - 1)
|
||||
}));
|
||||
}
|
||||
debouncedFetchStats();
|
||||
}
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user