mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 10:11:13 -05:00
Fix review lifecycle tracking
This commit is contained in:
@@ -514,10 +514,10 @@ export const SystemActivityLog = forwardRef<SystemActivityLogRef, SystemActivity
|
|||||||
</>
|
</>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{isExpanded && details.review_text && (
|
{isExpanded && details.content && (
|
||||||
<div className="p-3 bg-muted rounded text-sm">
|
<div className="p-3 bg-muted rounded text-sm">
|
||||||
<p className="text-muted-foreground line-clamp-3">
|
<p className="text-muted-foreground line-clamp-3">
|
||||||
"{details.review_text}"
|
"{details.content}"
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
@@ -546,10 +546,10 @@ export const SystemActivityLog = forwardRef<SystemActivityLogRef, SystemActivity
|
|||||||
<span className="text-muted-foreground">from {details.entity_name}</span>
|
<span className="text-muted-foreground">from {details.entity_name}</span>
|
||||||
)}
|
)}
|
||||||
</div>
|
</div>
|
||||||
{isExpanded && details.review_text && (
|
{isExpanded && details.content && (
|
||||||
<div className="p-3 bg-muted rounded text-sm">
|
<div className="p-3 bg-muted rounded text-sm">
|
||||||
<p className="text-muted-foreground line-clamp-3 opacity-60">
|
<p className="text-muted-foreground line-clamp-3 opacity-60">
|
||||||
"{details.review_text}"
|
"{details.content}"
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
|
|||||||
@@ -1900,6 +1900,7 @@ export type Database = {
|
|||||||
}
|
}
|
||||||
review_deletions: {
|
review_deletions: {
|
||||||
Row: {
|
Row: {
|
||||||
|
content: string | null
|
||||||
created_at: string
|
created_at: string
|
||||||
deleted_at: string | null
|
deleted_at: string | null
|
||||||
deleted_by: string | null
|
deleted_by: string | null
|
||||||
@@ -1908,12 +1909,12 @@ export type Database = {
|
|||||||
park_id: string | null
|
park_id: string | null
|
||||||
rating: number
|
rating: number
|
||||||
review_id: string
|
review_id: string
|
||||||
review_text: string | null
|
|
||||||
ride_id: string | null
|
ride_id: string | null
|
||||||
user_id: string
|
user_id: string
|
||||||
was_moderated: boolean | null
|
was_moderated: boolean | null
|
||||||
}
|
}
|
||||||
Insert: {
|
Insert: {
|
||||||
|
content?: string | null
|
||||||
created_at: string
|
created_at: string
|
||||||
deleted_at?: string | null
|
deleted_at?: string | null
|
||||||
deleted_by?: string | null
|
deleted_by?: string | null
|
||||||
@@ -1922,12 +1923,12 @@ export type Database = {
|
|||||||
park_id?: string | null
|
park_id?: string | null
|
||||||
rating: number
|
rating: number
|
||||||
review_id: string
|
review_id: string
|
||||||
review_text?: string | null
|
|
||||||
ride_id?: string | null
|
ride_id?: string | null
|
||||||
user_id: string
|
user_id: string
|
||||||
was_moderated?: boolean | null
|
was_moderated?: boolean | null
|
||||||
}
|
}
|
||||||
Update: {
|
Update: {
|
||||||
|
content?: string | null
|
||||||
created_at?: string
|
created_at?: string
|
||||||
deleted_at?: string | null
|
deleted_at?: string | null
|
||||||
deleted_by?: string | null
|
deleted_by?: string | null
|
||||||
@@ -1936,7 +1937,6 @@ export type Database = {
|
|||||||
park_id?: string | null
|
park_id?: string | null
|
||||||
rating?: number
|
rating?: number
|
||||||
review_id?: string
|
review_id?: string
|
||||||
review_text?: string | null
|
|
||||||
ride_id?: string | null
|
ride_id?: string | null
|
||||||
user_id?: string
|
user_id?: string
|
||||||
was_moderated?: boolean | null
|
was_moderated?: boolean | null
|
||||||
|
|||||||
@@ -94,7 +94,7 @@ export interface ReviewLifecycleDetails {
|
|||||||
entity_id: string;
|
entity_id: string;
|
||||||
entity_name?: string;
|
entity_name?: string;
|
||||||
rating?: number;
|
rating?: number;
|
||||||
review_text?: string;
|
content?: string;
|
||||||
deletion_reason?: string;
|
deletion_reason?: string;
|
||||||
was_moderated?: boolean;
|
was_moderated?: boolean;
|
||||||
}
|
}
|
||||||
@@ -590,14 +590,14 @@ export async function fetchSystemActivities(
|
|||||||
|
|
||||||
// Fetch review lifecycle events
|
// Fetch review lifecycle events
|
||||||
// 1. Review creations (recent 7 days)
|
// 1. Review creations (recent 7 days)
|
||||||
const { data: newReviews, error: reviewsError } = await supabase
|
const { data: newReviews, error: newReviewsError } = await supabase
|
||||||
.from('reviews')
|
.from('reviews')
|
||||||
.select('id, user_id, park_id, ride_id, rating, review_text, created_at')
|
.select('id, user_id, park_id, ride_id, rating, content, created_at')
|
||||||
.gte('created_at', sevenDaysAgo.toISOString())
|
.gte('created_at', sevenDaysAgo.toISOString())
|
||||||
.order('created_at', { ascending: false })
|
.order('created_at', { ascending: false })
|
||||||
.limit(Math.ceil(limit / 2));
|
.limit(Math.ceil(limit / 2));
|
||||||
|
|
||||||
if (!reviewsError && newReviews) {
|
if (!newReviewsError && newReviews) {
|
||||||
for (const review of newReviews) {
|
for (const review of newReviews) {
|
||||||
const entityType = review.park_id ? 'park' : 'ride';
|
const entityType = review.park_id ? 'park' : 'ride';
|
||||||
const entityId = review.park_id || review.ride_id;
|
const entityId = review.park_id || review.ride_id;
|
||||||
@@ -614,20 +614,20 @@ export async function fetchSystemActivities(
|
|||||||
entity_type: entityType as 'park' | 'ride',
|
entity_type: entityType as 'park' | 'ride',
|
||||||
entity_id: entityId!,
|
entity_id: entityId!,
|
||||||
rating: review.rating,
|
rating: review.rating,
|
||||||
review_text: review.review_text,
|
content: review.content,
|
||||||
} as ReviewLifecycleDetails,
|
} as ReviewLifecycleDetails,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. Review deletions
|
// 2. Review deletions
|
||||||
const { data: deletedReviews, error: deletionsError } = await supabase
|
const { data: deletedReviews, error: deletedReviewsError } = await supabase
|
||||||
.from('review_deletions')
|
.from('review_deletions')
|
||||||
.select('id, review_id, user_id, park_id, ride_id, rating, review_text, deleted_by, deleted_at, deletion_reason, was_moderated')
|
.select('id, review_id, user_id, park_id, ride_id, rating, content, deleted_by, deleted_at, deletion_reason, was_moderated')
|
||||||
.order('deleted_at', { ascending: false })
|
.order('deleted_at', { ascending: false })
|
||||||
.limit(limit);
|
.limit(limit);
|
||||||
|
|
||||||
if (!deletionsError && deletedReviews) {
|
if (!deletedReviewsError && deletedReviews) {
|
||||||
for (const deletion of deletedReviews) {
|
for (const deletion of deletedReviews) {
|
||||||
const entityType = deletion.park_id ? 'park' : 'ride';
|
const entityType = deletion.park_id ? 'park' : 'ride';
|
||||||
const entityId = deletion.park_id || deletion.ride_id;
|
const entityId = deletion.park_id || deletion.ride_id;
|
||||||
@@ -644,7 +644,7 @@ export async function fetchSystemActivities(
|
|||||||
entity_type: entityType as 'park' | 'ride',
|
entity_type: entityType as 'park' | 'ride',
|
||||||
entity_id: entityId!,
|
entity_id: entityId!,
|
||||||
rating: deletion.rating,
|
rating: deletion.rating,
|
||||||
review_text: deletion.review_text || undefined,
|
content: deletion.content || undefined,
|
||||||
deletion_reason: deletion.deletion_reason || undefined,
|
deletion_reason: deletion.deletion_reason || undefined,
|
||||||
was_moderated: deletion.was_moderated,
|
was_moderated: deletion.was_moderated,
|
||||||
} as ReviewLifecycleDetails,
|
} as ReviewLifecycleDetails,
|
||||||
|
|||||||
@@ -0,0 +1,43 @@
|
|||||||
|
-- Update review_deletions table to use correct column name
|
||||||
|
ALTER TABLE public.review_deletions
|
||||||
|
RENAME COLUMN review_text TO content;
|
||||||
|
|
||||||
|
-- Update the trigger function to use correct column name
|
||||||
|
CREATE OR REPLACE FUNCTION public.log_review_deletion()
|
||||||
|
RETURNS TRIGGER
|
||||||
|
LANGUAGE plpgsql
|
||||||
|
SECURITY DEFINER
|
||||||
|
SET search_path = public
|
||||||
|
AS $$
|
||||||
|
BEGIN
|
||||||
|
-- Insert into review_deletions table
|
||||||
|
INSERT INTO public.review_deletions (
|
||||||
|
review_id,
|
||||||
|
user_id,
|
||||||
|
park_id,
|
||||||
|
ride_id,
|
||||||
|
rating,
|
||||||
|
content,
|
||||||
|
deleted_by,
|
||||||
|
deletion_reason,
|
||||||
|
was_moderated,
|
||||||
|
created_at
|
||||||
|
) VALUES (
|
||||||
|
OLD.id,
|
||||||
|
OLD.user_id,
|
||||||
|
OLD.park_id,
|
||||||
|
OLD.ride_id,
|
||||||
|
OLD.rating,
|
||||||
|
OLD.content,
|
||||||
|
auth.uid(),
|
||||||
|
CASE
|
||||||
|
WHEN OLD.moderation_status = 'rejected' THEN 'Rejected by moderator'
|
||||||
|
ELSE 'Deleted by user or admin'
|
||||||
|
END,
|
||||||
|
OLD.moderation_status != 'approved',
|
||||||
|
OLD.created_at
|
||||||
|
);
|
||||||
|
|
||||||
|
RETURN OLD;
|
||||||
|
END;
|
||||||
|
$$;
|
||||||
Reference in New Issue
Block a user