Refactor: Implement Phase 3C cleanup

This commit is contained in:
gpt-engineer-app[bot]
2025-10-03 14:24:43 +00:00
parent b8f1efee97
commit b778fc95f6
6 changed files with 119 additions and 81 deletions

View File

@@ -1,4 +1,10 @@
import { Database } from '@/integrations/supabase/types';
import type {
ParkSubmissionData,
RideSubmissionData,
CompanySubmissionData,
RideModelSubmissionData,
} from '@/types/submission-data';
type ParkInsert = Database['public']['Tables']['parks']['Insert'];
type RideInsert = Database['public']['Tables']['rides']['Insert'];
@@ -7,8 +13,10 @@ type RideModelInsert = Database['public']['Tables']['ride_models']['Insert'];
/**
* Transform park submission data to database insert format
* @param submissionData - Validated park submission data
* @returns Database insert object for parks table
*/
export function transformParkData(submissionData: any): ParkInsert {
export function transformParkData(submissionData: ParkSubmissionData): ParkInsert {
return {
name: submissionData.name,
slug: submissionData.slug,
@@ -38,8 +46,10 @@ export function transformParkData(submissionData: any): ParkInsert {
* Transform ride submission data to database insert format
* Note: Relational data (technical_specs, coaster_stats, former_names) are now
* stored in separate tables and should not be included in the main ride insert.
* @param submissionData - Validated ride submission data
* @returns Database insert object for rides table
*/
export function transformRideData(submissionData: any): RideInsert {
export function transformRideData(submissionData: RideSubmissionData): RideInsert {
return {
name: submissionData.name,
slug: submissionData.slug,
@@ -78,9 +88,12 @@ export function transformRideData(submissionData: any): RideInsert {
/**
* Transform company submission data to database insert format
* @param submissionData - Validated company submission data
* @param companyType - Type of company (manufacturer, operator, property_owner, designer)
* @returns Database insert object for companies table
*/
export function transformCompanyData(
submissionData: any,
submissionData: CompanySubmissionData,
companyType: 'manufacturer' | 'operator' | 'property_owner' | 'designer'
): CompanyInsert {
return {
@@ -102,8 +115,10 @@ export function transformCompanyData(
* Transform ride model submission data to database insert format
* Note: Technical specifications are now stored in the ride_model_technical_specifications
* table and should not be included in the main ride model insert.
* @param submissionData - Validated ride model submission data
* @returns Database insert object for ride_models table
*/
export function transformRideModelData(submissionData: any): RideModelInsert {
export function transformRideModelData(submissionData: RideModelSubmissionData): RideModelInsert {
return {
name: submissionData.name,
slug: submissionData.slug,
@@ -150,8 +165,14 @@ export function extractImageId(url: string): string {
/**
* Validate and sanitize submission data before transformation
* @param data - Submission data to validate
* @param itemType - Type of entity being validated (for error messages)
* @throws Error if validation fails
*/
export function validateSubmissionData(data: any, itemType: string): void {
export function validateSubmissionData(
data: ParkSubmissionData | RideSubmissionData | CompanySubmissionData | RideModelSubmissionData,
itemType: string
): void {
if (!data.name || typeof data.name !== 'string' || data.name.trim() === '') {
throw new Error(`${itemType} name is required`);
}