Refactor: Approve tool use

This commit is contained in:
gpt-engineer-app[bot]
2025-11-05 18:22:38 +00:00
parent d62b3c2412
commit b326252138
2 changed files with 117 additions and 0 deletions

View File

@@ -4718,6 +4718,38 @@ export type Database = {
} }
Relationships: [] Relationships: []
} }
submission_item_temp_refs: {
Row: {
created_at: string
id: string
ref_order_index: number
ref_type: string
submission_item_id: string
}
Insert: {
created_at?: string
id?: string
ref_order_index: number
ref_type: string
submission_item_id: string
}
Update: {
created_at?: string
id?: string
ref_order_index?: number
ref_type?: string
submission_item_id?: string
}
Relationships: [
{
foreignKeyName: "submission_item_temp_refs_submission_item_id_fkey"
columns: ["submission_item_id"]
isOneToOne: false
referencedRelation: "submission_items"
referencedColumns: ["id"]
},
]
}
submission_items: { submission_items: {
Row: { Row: {
action_type: string | null action_type: string | null

View File

@@ -0,0 +1,85 @@
-- =====================================================
-- Temporary Reference Storage for Composite Submissions
-- =====================================================
-- Stores _temp_*_ref fields extracted from submission items
-- These are used during approval to resolve dependencies
CREATE TABLE IF NOT EXISTS public.submission_item_temp_refs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
submission_item_id UUID NOT NULL REFERENCES public.submission_items(id) ON DELETE CASCADE,
ref_type TEXT NOT NULL CHECK (ref_type IN (
'operator', 'property_owner', 'manufacturer', 'designer',
'park', 'ride', 'ride_model', 'location'
)),
ref_order_index INTEGER NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- Indexes for performance
CREATE INDEX idx_submission_item_temp_refs_item_id
ON public.submission_item_temp_refs(submission_item_id);
CREATE INDEX idx_submission_item_temp_refs_type
ON public.submission_item_temp_refs(ref_type);
-- Composite index for fast lookups during approval
CREATE INDEX idx_submission_item_temp_refs_item_type
ON public.submission_item_temp_refs(submission_item_id, ref_type);
-- Enable RLS
ALTER TABLE public.submission_item_temp_refs ENABLE ROW LEVEL SECURITY;
-- RLS Policy: Moderators can view all temp refs
CREATE POLICY "Moderators can view all temp refs"
ON public.submission_item_temp_refs
FOR SELECT
USING (
is_moderator(auth.uid()) AND
((NOT has_mfa_enabled(auth.uid())) OR has_aal2())
);
-- RLS Policy: Users can view their own temp refs via submission ownership
CREATE POLICY "Users can view their own temp refs"
ON public.submission_item_temp_refs
FOR SELECT
USING (
EXISTS (
SELECT 1
FROM public.submission_items si
JOIN public.content_submissions cs ON cs.id = si.submission_id
WHERE si.id = submission_item_temp_refs.submission_item_id
AND cs.user_id = auth.uid()
)
);
-- RLS Policy: System can insert temp refs during submission creation
CREATE POLICY "System can insert temp refs"
ON public.submission_item_temp_refs
FOR INSERT
WITH CHECK (
EXISTS (
SELECT 1
FROM public.submission_items si
JOIN public.content_submissions cs ON cs.id = si.submission_id
WHERE si.id = submission_item_temp_refs.submission_item_id
AND cs.user_id = auth.uid()
)
);
-- RLS Policy: Moderators can delete temp refs (manual cleanup if needed)
CREATE POLICY "Moderators can delete temp refs"
ON public.submission_item_temp_refs
FOR DELETE
USING (
is_moderator(auth.uid()) AND
((NOT has_mfa_enabled(auth.uid())) OR has_aal2())
);
COMMENT ON TABLE public.submission_item_temp_refs IS
'Stores temporary reference fields (_temp_operator_ref, etc.) from submission items for composite submissions. Cleaned up automatically when items are approved.';
COMMENT ON COLUMN public.submission_item_temp_refs.ref_type IS
'The entity type being referenced (e.g., operator, park, manufacturer). Extracted from _temp_operator_ref -> operator.';
COMMENT ON COLUMN public.submission_item_temp_refs.ref_order_index IS
'The array index of the referenced item in the submission order. Matches the order_index of the target submission_item.';