mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-21 03:11:15 -05:00
Implement type safety and JSONB elimination
This commit is contained in:
@@ -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 = {
|
||||
|
||||
Reference in New Issue
Block a user