mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-21 23:51:13 -05:00
Refactor composite submission logic
This commit is contained in:
@@ -305,13 +305,23 @@ async function submitCompositeCreation(
|
||||
delete primaryData.property_owner_id;
|
||||
}
|
||||
} else if (uploadedPrimary.type === 'ride') {
|
||||
if (uploadedPrimary.data.park_id?.startsWith('temp-')) {
|
||||
const parkIndex = tempIdMap.get(uploadedPrimary.data.park_id);
|
||||
if (parkIndex !== undefined) primaryData._temp_park_ref = parkIndex;
|
||||
delete primaryData.park_id;
|
||||
}
|
||||
if (uploadedPrimary.data.manufacturer_id?.startsWith('temp-')) {
|
||||
const mfgIndex = tempIdMap.get('temp-manufacturer');
|
||||
const mfgIndex = tempIdMap.get(uploadedPrimary.data.manufacturer_id);
|
||||
if (mfgIndex !== undefined) primaryData._temp_manufacturer_ref = mfgIndex;
|
||||
delete primaryData.manufacturer_id;
|
||||
}
|
||||
if (uploadedPrimary.data.designer_id?.startsWith('temp-')) {
|
||||
const designerIndex = tempIdMap.get(uploadedPrimary.data.designer_id);
|
||||
if (designerIndex !== undefined) primaryData._temp_designer_ref = designerIndex;
|
||||
delete primaryData.designer_id;
|
||||
}
|
||||
if (uploadedPrimary.data.ride_model_id?.startsWith('temp-')) {
|
||||
const modelIndex = tempIdMap.get('temp-ride-model');
|
||||
const modelIndex = tempIdMap.get(uploadedPrimary.data.ride_model_id);
|
||||
if (modelIndex !== undefined) primaryData._temp_ride_model_ref = modelIndex;
|
||||
delete primaryData.ride_model_id;
|
||||
}
|
||||
@@ -600,13 +610,54 @@ export async function submitParkUpdate(
|
||||
* @returns Object containing submitted boolean and submissionId
|
||||
*/
|
||||
export async function submitRideCreation(
|
||||
data: RideFormData & { _tempNewManufacturer?: any; _tempNewRideModel?: any },
|
||||
data: RideFormData & {
|
||||
_tempNewPark?: any;
|
||||
_tempNewManufacturer?: any;
|
||||
_tempNewDesigner?: any;
|
||||
_tempNewRideModel?: any;
|
||||
},
|
||||
userId: string
|
||||
): Promise<{ submitted: boolean; submissionId: string }> {
|
||||
// Check for composite submission with dependencies
|
||||
if (data._tempNewManufacturer || data._tempNewRideModel) {
|
||||
if (data._tempNewPark || data._tempNewManufacturer || data._tempNewDesigner || data._tempNewRideModel) {
|
||||
const dependencies: CompositeSubmissionDependency[] = [];
|
||||
|
||||
// Handle new park operator (from nested park)
|
||||
if (data._tempNewPark?._tempNewOperator) {
|
||||
dependencies.push({
|
||||
type: 'company',
|
||||
data: { ...data._tempNewPark._tempNewOperator, company_type: 'operator' },
|
||||
tempId: 'temp-park-operator',
|
||||
companyType: 'operator'
|
||||
});
|
||||
}
|
||||
|
||||
// Handle new park property owner (from nested park)
|
||||
if (data._tempNewPark?._tempNewPropertyOwner) {
|
||||
dependencies.push({
|
||||
type: 'company',
|
||||
data: { ...data._tempNewPark._tempNewPropertyOwner, company_type: 'property_owner' },
|
||||
tempId: 'temp-park-owner',
|
||||
companyType: 'property_owner'
|
||||
});
|
||||
}
|
||||
|
||||
// Handle new park (depends on operator/owner)
|
||||
if (data._tempNewPark) {
|
||||
dependencies.push({
|
||||
type: 'park',
|
||||
data: {
|
||||
...data._tempNewPark,
|
||||
operator_id: data._tempNewPark._tempNewOperator ? 'temp-park-operator' : data._tempNewPark.operator_id,
|
||||
property_owner_id: data._tempNewPark._tempNewPropertyOwner ? 'temp-park-owner' : data._tempNewPark.property_owner_id,
|
||||
_tempNewOperator: undefined,
|
||||
_tempNewPropertyOwner: undefined
|
||||
},
|
||||
tempId: 'temp-park'
|
||||
});
|
||||
}
|
||||
|
||||
// Handle new manufacturer
|
||||
if (data._tempNewManufacturer) {
|
||||
dependencies.push({
|
||||
type: 'company',
|
||||
@@ -616,18 +667,45 @@ export async function submitRideCreation(
|
||||
});
|
||||
}
|
||||
|
||||
// Handle new designer
|
||||
if (data._tempNewDesigner) {
|
||||
dependencies.push({
|
||||
type: 'company',
|
||||
data: { ...data._tempNewDesigner, company_type: 'designer' },
|
||||
tempId: 'temp-designer',
|
||||
companyType: 'designer'
|
||||
});
|
||||
}
|
||||
|
||||
// Handle new ride model (depends on manufacturer)
|
||||
if (data._tempNewRideModel) {
|
||||
dependencies.push({
|
||||
type: 'ride_model',
|
||||
data: data._tempNewRideModel,
|
||||
data: {
|
||||
...data._tempNewRideModel,
|
||||
manufacturer_id: data._tempNewManufacturer ? 'temp-manufacturer' : data._tempNewRideModel.manufacturer_id
|
||||
},
|
||||
tempId: 'temp-ride-model',
|
||||
parentTempId: data._tempNewManufacturer ? 'temp-manufacturer' : undefined
|
||||
});
|
||||
}
|
||||
|
||||
if (dependencies.length > 0) {
|
||||
// Prepare ride data with temp references
|
||||
const rideData = {
|
||||
...data,
|
||||
park_id: data._tempNewPark ? 'temp-park' : data.park_id,
|
||||
manufacturer_id: data._tempNewManufacturer ? 'temp-manufacturer' : data.manufacturer_id,
|
||||
designer_id: data._tempNewDesigner ? 'temp-designer' : data.designer_id,
|
||||
ride_model_id: data._tempNewRideModel ? 'temp-ride-model' : data.ride_model_id,
|
||||
_tempNewPark: undefined,
|
||||
_tempNewManufacturer: undefined,
|
||||
_tempNewDesigner: undefined,
|
||||
_tempNewRideModel: undefined
|
||||
};
|
||||
|
||||
return submitCompositeCreation(
|
||||
{ type: 'ride', data },
|
||||
{ type: 'ride', data: rideData },
|
||||
dependencies,
|
||||
userId
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user