Implement type safety and JSONB elimination

This commit is contained in:
gpt-engineer-app[bot]
2025-10-17 13:29:22 +00:00
parent efc33a7dda
commit d54b8a9ae4
10 changed files with 144 additions and 69 deletions

View File

@@ -1,6 +1,7 @@
import { supabase } from '@/integrations/supabase/client';
import { getErrorMessage } from '@/lib/errorHandler';
export type ActivityType =
export type ActivityType =
| 'entity_change'
| 'admin_action'
| 'submission_review'
@@ -94,6 +95,56 @@ export interface ActivityFilters {
dateTo?: string;
}
/**
* Type-safe interface for version data from relational version tables
*/
interface VersionData {
version_id: string;
version_number: number;
name: string;
created_by: string | null;
created_at: string;
change_type: string;
change_reason: string | null;
is_current: boolean;
}
interface ParkVersionData extends VersionData {
park_id: string;
}
interface RideVersionData extends VersionData {
ride_id: string;
}
interface CompanyVersionData extends VersionData {
company_id: string;
}
interface RideModelVersionData extends VersionData {
ride_model_id: string;
}
/**
* Type-safe interface for submission item data
*/
interface SubmissionItemData {
cloudflare_image_url?: string;
caption?: string;
title?: string;
entity_type?: string;
entity_id?: string;
reason?: string;
}
/**
* Type-safe interface for submission content
*/
interface SubmissionContent {
action?: string;
name?: string;
}
/**
* Fetch unified system activity log from multiple sources
*/
@@ -137,7 +188,7 @@ export async function fetchSystemActivities(
// Process park versions
if (!parkVersions.error && parkVersions.data) {
for (const version of parkVersions.data) {
const parkVersion = version as any; // Type assertion for relational version structure
const parkVersion = version as ParkVersionData;
activities.push({
id: parkVersion.version_id,
type: 'entity_change',
@@ -159,7 +210,7 @@ export async function fetchSystemActivities(
// Process ride versions
if (!rideVersions.error && rideVersions.data) {
for (const version of rideVersions.data) {
const rideVersion = version as any;
const rideVersion = version as RideVersionData;
activities.push({
id: rideVersion.version_id,
type: 'entity_change',
@@ -181,7 +232,7 @@ export async function fetchSystemActivities(
// Process company versions
if (!companyVersions.error && companyVersions.data) {
for (const version of companyVersions.data) {
const companyVersion = version as any;
const companyVersion = version as CompanyVersionData;
activities.push({
id: companyVersion.version_id,
type: 'entity_change',
@@ -203,7 +254,7 @@ export async function fetchSystemActivities(
// Process ride model versions
if (!modelVersions.error && modelVersions.data) {
for (const version of modelVersions.data) {
const modelVersion = version as any;
const modelVersion = version as RideModelVersionData;
activities.push({
id: modelVersion.version_id,
type: 'entity_change',
@@ -267,9 +318,9 @@ export async function fetchSystemActivities(
const itemsMap = new Map(submissionItems?.map(item => [item.submission_id, item]) || []);
for (const submission of submissions) {
const contentData = submission.content as any;
const contentData = submission.content as SubmissionContent;
const submissionItem = itemsMap.get(submission.id);
const itemData = submissionItem?.item_data as any;
const itemData = submissionItem?.item_data as SubmissionItemData;
// Build base details
const details: SubmissionReviewDetails = {