Fix review lifecycle tracking

This commit is contained in:
gpt-engineer-app[bot]
2025-10-17 20:29:32 +00:00
parent f36ef04a54
commit 9f5e19922c
4 changed files with 59 additions and 16 deletions

View File

@@ -514,10 +514,10 @@ export const SystemActivityLog = forwardRef<SystemActivityLogRef, SystemActivity
</>
)}
</div>
{isExpanded && details.review_text && (
{isExpanded && details.content && (
<div className="p-3 bg-muted rounded text-sm">
<p className="text-muted-foreground line-clamp-3">
"{details.review_text}"
"{details.content}"
</p>
</div>
)}
@@ -546,10 +546,10 @@ export const SystemActivityLog = forwardRef<SystemActivityLogRef, SystemActivity
<span className="text-muted-foreground">from {details.entity_name}</span>
)}
</div>
{isExpanded && details.review_text && (
{isExpanded && details.content && (
<div className="p-3 bg-muted rounded text-sm">
<p className="text-muted-foreground line-clamp-3 opacity-60">
"{details.review_text}"
"{details.content}"
</p>
</div>
)}

View File

@@ -1900,6 +1900,7 @@ export type Database = {
}
review_deletions: {
Row: {
content: string | null
created_at: string
deleted_at: string | null
deleted_by: string | null
@@ -1908,12 +1909,12 @@ export type Database = {
park_id: string | null
rating: number
review_id: string
review_text: string | null
ride_id: string | null
user_id: string
was_moderated: boolean | null
}
Insert: {
content?: string | null
created_at: string
deleted_at?: string | null
deleted_by?: string | null
@@ -1922,12 +1923,12 @@ export type Database = {
park_id?: string | null
rating: number
review_id: string
review_text?: string | null
ride_id?: string | null
user_id: string
was_moderated?: boolean | null
}
Update: {
content?: string | null
created_at?: string
deleted_at?: string | null
deleted_by?: string | null
@@ -1936,7 +1937,6 @@ export type Database = {
park_id?: string | null
rating?: number
review_id?: string
review_text?: string | null
ride_id?: string | null
user_id?: string
was_moderated?: boolean | null

View File

@@ -94,7 +94,7 @@ export interface ReviewLifecycleDetails {
entity_id: string;
entity_name?: string;
rating?: number;
review_text?: string;
content?: string;
deletion_reason?: string;
was_moderated?: boolean;
}
@@ -590,14 +590,14 @@ export async function fetchSystemActivities(
// Fetch review lifecycle events
// 1. Review creations (recent 7 days)
const { data: newReviews, error: reviewsError } = await supabase
const { data: newReviews, error: newReviewsError } = await supabase
.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())
.order('created_at', { ascending: false })
.limit(Math.ceil(limit / 2));
if (!reviewsError && newReviews) {
if (!newReviewsError && newReviews) {
for (const review of newReviews) {
const entityType = review.park_id ? 'park' : 'ride';
const entityId = review.park_id || review.ride_id;
@@ -614,20 +614,20 @@ export async function fetchSystemActivities(
entity_type: entityType as 'park' | 'ride',
entity_id: entityId!,
rating: review.rating,
review_text: review.review_text,
content: review.content,
} as ReviewLifecycleDetails,
});
}
}
// 2. Review deletions
const { data: deletedReviews, error: deletionsError } = await supabase
const { data: deletedReviews, error: deletedReviewsError } = await supabase
.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 })
.limit(limit);
if (!deletionsError && deletedReviews) {
if (!deletedReviewsError && deletedReviews) {
for (const deletion of deletedReviews) {
const entityType = deletion.park_id ? 'park' : 'ride';
const entityId = deletion.park_id || deletion.ride_id;
@@ -644,7 +644,7 @@ export async function fetchSystemActivities(
entity_type: entityType as 'park' | 'ride',
entity_id: entityId!,
rating: deletion.rating,
review_text: deletion.review_text || undefined,
content: deletion.content || undefined,
deletion_reason: deletion.deletion_reason || undefined,
was_moderated: deletion.was_moderated,
} as ReviewLifecycleDetails,

View File

@@ -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;
$$;