diff --git a/epoch/flow_operations.go b/epoch/flow_operations.go index 9a40e3a..6711918 100644 --- a/epoch/flow_operations.go +++ b/epoch/flow_operations.go @@ -124,8 +124,8 @@ func (op *RequestRemoveField) Inverse() RequestToNextVersionOperation { // RequestRenameField renames a field when request migrates from client to HEAD // Use case: HEAD version renamed "name" to "full_name" type RequestRenameField struct { - From string // Old field name (client uses this) - To string // New field name (HEAD uses this) + OlderVersionName string // Field name in older/client version + NewerVersionName string // Field name in newer/HEAD version } func (op *RequestRenameField) ApplyToRequest(node *ast.Node) error { @@ -134,37 +134,37 @@ func (op *RequestRenameField) ApplyToRequest(node *ast.Node) error { } // Check if old field exists - if !node.Get(op.From).Exists() { + if !node.Get(op.OlderVersionName).Exists() { return nil } // Get the value of the old field - value := node.Get(op.From) + value := node.Get(op.OlderVersionName) if value == nil { return nil } // Set new field with the value - if err := SetNodeField(node, op.To, value); err != nil { - return fmt.Errorf("failed to set field %s: %w", op.To, err) + if err := SetNodeField(node, op.NewerVersionName, value); err != nil { + return fmt.Errorf("failed to set field %s: %w", op.NewerVersionName, err) } // Delete old field - return DeleteNodeField(node, op.From) + return DeleteNodeField(node, op.OlderVersionName) } func (op *RequestRenameField) GetFieldMapping() map[string]string { // When transforming error messages, map new field name back to old - return map[string]string{op.To: op.From} + return map[string]string{op.NewerVersionName: op.OlderVersionName} } // Inverse returns the opposite operation for schema generation -// RenameField (Client→HEAD: from→to) becomes RenameField (HEAD→Client: to→from) +// RenameField (Client→HEAD: older→newer) becomes RenameField (HEAD→Client: newer→older) // This is a perfect inversion - completely reversible func (op *RequestRenameField) Inverse() RequestToNextVersionOperation { return &RequestRenameField{ - From: op.To, // Swap directions - To: op.From, + OlderVersionName: op.NewerVersionName, // Swap directions + NewerVersionName: op.OlderVersionName, } } @@ -275,8 +275,8 @@ func (op *ResponseRemoveFieldIfDefault) GetFieldMapping() map[string]string { // ResponseRenameField renames a field when response migrates from HEAD to client // Use case: HEAD renamed "name" to "full_name", rename back for old clients type ResponseRenameField struct { - From string // New field name (HEAD uses this) - To string // Old field name (client expects this) + NewerVersionName string // Field name in newer/HEAD version + OlderVersionName string // Field name in older/client version } func (op *ResponseRenameField) ApplyToResponse(node *ast.Node) error { @@ -285,28 +285,28 @@ func (op *ResponseRenameField) ApplyToResponse(node *ast.Node) error { } // Check if new field exists - if !node.Get(op.From).Exists() { + if !node.Get(op.NewerVersionName).Exists() { return nil } // Get the value of the new field - value := node.Get(op.From) + value := node.Get(op.NewerVersionName) if value == nil { return nil } // Set old field with the value - if err := SetNodeField(node, op.To, value); err != nil { - return fmt.Errorf("failed to set field %s: %w", op.To, err) + if err := SetNodeField(node, op.OlderVersionName, value); err != nil { + return fmt.Errorf("failed to set field %s: %w", op.OlderVersionName, err) } // Delete new field - return DeleteNodeField(node, op.From) + return DeleteNodeField(node, op.NewerVersionName) } func (op *ResponseRenameField) GetFieldMapping() map[string]string { // When transforming error messages, map new field name to old - return map[string]string{op.From: op.To} + return map[string]string{op.NewerVersionName: op.OlderVersionName} } // ResponseCustom applies a custom transformation function diff --git a/epoch/openapi/version_transformer.go b/epoch/openapi/version_transformer.go index 229ffc5..077f7f0 100644 --- a/epoch/openapi/version_transformer.go +++ b/epoch/openapi/version_transformer.go @@ -275,7 +275,7 @@ func (vt *VersionTransformer) applyOperationToSchema( case *epoch.ResponseRenameField: // Rename a field in the response schema - vt.RenameFieldInSchema(schema, operation.From, operation.To) + vt.RenameFieldInSchema(schema, operation.NewerVersionName, operation.OlderVersionName) case *epoch.RequestAddField: // Add a field to the request schema @@ -293,7 +293,7 @@ func (vt *VersionTransformer) applyOperationToSchema( case *epoch.RequestRenameField: // Rename a field in the request schema - vt.RenameFieldInSchema(schema, operation.From, operation.To) + vt.RenameFieldInSchema(schema, operation.OlderVersionName, operation.NewerVersionName) case *epoch.ResponseRemoveFieldIfDefault: // For schema generation, treat this as a regular remove diff --git a/epoch/version_change_builder.go b/epoch/version_change_builder.go index cd2e7fd..ad0fa76 100644 --- a/epoch/version_change_builder.go +++ b/epoch/version_change_builder.go @@ -279,11 +279,11 @@ func (b *requestToNextVersionBuilder) RemoveField(name string) *requestToNextVer } // RenameField renames a field when request migrates from client to HEAD -func (b *requestToNextVersionBuilder) RenameField(from, to string) *requestToNextVersionBuilder { +func (b *requestToNextVersionBuilder) RenameField(olderVersionName, newerVersionName string) *requestToNextVersionBuilder { b.parent.requestToNextVersionOps = append(b.parent.requestToNextVersionOps, &RequestRenameField{ - From: from, - To: to, + OlderVersionName: olderVersionName, + NewerVersionName: newerVersionName, }) return b } @@ -351,11 +351,11 @@ func (b *responseToPreviousVersionBuilder) RemoveFieldIfDefault(name string, def } // RenameField renames a field when response migrates from HEAD to client -func (b *responseToPreviousVersionBuilder) RenameField(from, to string) *responseToPreviousVersionBuilder { +func (b *responseToPreviousVersionBuilder) RenameField(newerVersionName, olderVersionName string) *responseToPreviousVersionBuilder { b.parent.responseToPreviousVersionOps = append(b.parent.responseToPreviousVersionOps, &ResponseRenameField{ - From: from, - To: to, + NewerVersionName: newerVersionName, + OlderVersionName: olderVersionName, }) return b }