mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-24 20:11:14 -05:00
Fix orphaned submission data
This commit is contained in:
106
src/lib/submissionValidation.ts
Normal file
106
src/lib/submissionValidation.ts
Normal file
@@ -0,0 +1,106 @@
|
||||
/**
|
||||
* Client-side validation for entity submissions
|
||||
* Prevents missing required fields before database calls
|
||||
*/
|
||||
|
||||
export interface ValidationResult {
|
||||
valid: boolean;
|
||||
missingFields: string[];
|
||||
errorMessage?: string;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates required fields for park creation
|
||||
*/
|
||||
export function validateParkCreateFields(data: any): ValidationResult {
|
||||
const missingFields: string[] = [];
|
||||
|
||||
if (!data.name?.trim()) missingFields.push('name');
|
||||
if (!data.slug?.trim()) missingFields.push('slug');
|
||||
if (!data.park_type) missingFields.push('park_type');
|
||||
if (!data.status) missingFields.push('status');
|
||||
|
||||
if (missingFields.length > 0) {
|
||||
return {
|
||||
valid: false,
|
||||
missingFields,
|
||||
errorMessage: `Missing required fields for park creation: ${missingFields.join(', ')}`
|
||||
};
|
||||
}
|
||||
|
||||
return { valid: true, missingFields: [] };
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates required fields for ride creation
|
||||
*/
|
||||
export function validateRideCreateFields(data: any): ValidationResult {
|
||||
const missingFields: string[] = [];
|
||||
|
||||
if (!data.name?.trim()) missingFields.push('name');
|
||||
if (!data.slug?.trim()) missingFields.push('slug');
|
||||
if (!data.category) missingFields.push('category');
|
||||
if (!data.status) missingFields.push('status');
|
||||
|
||||
if (missingFields.length > 0) {
|
||||
return {
|
||||
valid: false,
|
||||
missingFields,
|
||||
errorMessage: `Missing required fields for ride creation: ${missingFields.join(', ')}`
|
||||
};
|
||||
}
|
||||
|
||||
return { valid: true, missingFields: [] };
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates required fields for company creation
|
||||
*/
|
||||
export function validateCompanyCreateFields(data: any): ValidationResult {
|
||||
const missingFields: string[] = [];
|
||||
|
||||
if (!data.name?.trim()) missingFields.push('name');
|
||||
if (!data.slug?.trim()) missingFields.push('slug');
|
||||
if (!data.company_type) missingFields.push('company_type');
|
||||
|
||||
if (missingFields.length > 0) {
|
||||
return {
|
||||
valid: false,
|
||||
missingFields,
|
||||
errorMessage: `Missing required fields for company creation: ${missingFields.join(', ')}`
|
||||
};
|
||||
}
|
||||
|
||||
return { valid: true, missingFields: [] };
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates required fields for ride model creation
|
||||
*/
|
||||
export function validateRideModelCreateFields(data: any): ValidationResult {
|
||||
const missingFields: string[] = [];
|
||||
|
||||
if (!data.name?.trim()) missingFields.push('name');
|
||||
if (!data.slug?.trim()) missingFields.push('slug');
|
||||
if (!data.manufacturer_id) missingFields.push('manufacturer_id');
|
||||
if (!data.category) missingFields.push('category');
|
||||
|
||||
if (missingFields.length > 0) {
|
||||
return {
|
||||
valid: false,
|
||||
missingFields,
|
||||
errorMessage: `Missing required fields for ride model creation: ${missingFields.join(', ')}`
|
||||
};
|
||||
}
|
||||
|
||||
return { valid: true, missingFields: [] };
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to throw validation error if validation fails
|
||||
*/
|
||||
export function assertValid(result: ValidationResult): void {
|
||||
if (!result.valid) {
|
||||
throw new Error(result.errorMessage);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user