mirror of
https://github.com/bitechdev/ResolveSpec.git
synced 2025-12-13 17:10:36 +00:00
Fixed filterExtendedOptions
This commit is contained in:
parent
efb9e5d9d5
commit
68dee78a34
@ -127,7 +127,7 @@ func (h *Handler) Handle(w common.ResponseWriter, r common.Request, params map[s
|
|||||||
|
|
||||||
// Validate and filter columns in options (log warnings for invalid columns)
|
// Validate and filter columns in options (log warnings for invalid columns)
|
||||||
validator := common.NewColumnValidator(model)
|
validator := common.NewColumnValidator(model)
|
||||||
options = filterExtendedOptions(validator, options)
|
options = h.filterExtendedOptions(validator, options, model)
|
||||||
|
|
||||||
// Add request-scoped data to context (including options)
|
// Add request-scoped data to context (including options)
|
||||||
ctx = WithRequestData(ctx, schema, entity, tableName, model, modelPtr, options)
|
ctx = WithRequestData(ctx, schema, entity, tableName, model, modelPtr, options)
|
||||||
@ -2241,7 +2241,7 @@ func (h *Handler) setRowNumbersOnRecords(records any, offset int) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// filterExtendedOptions filters all column references, removing invalid ones and logging warnings
|
// filterExtendedOptions filters all column references, removing invalid ones and logging warnings
|
||||||
func filterExtendedOptions(validator *common.ColumnValidator, options ExtendedRequestOptions) ExtendedRequestOptions {
|
func (h *Handler) filterExtendedOptions(validator *common.ColumnValidator, options ExtendedRequestOptions, model interface{}) ExtendedRequestOptions {
|
||||||
filtered := options
|
filtered := options
|
||||||
|
|
||||||
// Filter base RequestOptions
|
// Filter base RequestOptions
|
||||||
@ -2265,15 +2265,33 @@ func filterExtendedOptions(validator *common.ColumnValidator, options ExtendedRe
|
|||||||
// No filtering needed for ComputedQL keys
|
// No filtering needed for ComputedQL keys
|
||||||
filtered.ComputedQL = options.ComputedQL
|
filtered.ComputedQL = options.ComputedQL
|
||||||
|
|
||||||
// Filter Expand columns
|
// Filter Expand columns using the expand relation's model
|
||||||
// filteredExpands := make([]ExpandOption, 0, len(options.Expand))
|
filteredExpands := make([]ExpandOption, 0, len(options.Expand))
|
||||||
// for _, expand := range options.Expand {
|
modelType := reflect.TypeOf(model)
|
||||||
// filteredExpand := expand
|
if modelType.Kind() == reflect.Ptr {
|
||||||
// // Don't validate relation name, only columns
|
modelType = modelType.Elem()
|
||||||
// filteredExpand.Columns = validator.FilterValidColumns(expand.Columns)
|
}
|
||||||
// filteredExpands = append(filteredExpands, filteredExpand)
|
|
||||||
// }
|
for _, expand := range options.Expand {
|
||||||
// filtered.Expand = filteredExpands
|
filteredExpand := expand
|
||||||
|
|
||||||
|
// Get the relationship info for this expand relation
|
||||||
|
relInfo := h.getRelationshipInfo(modelType, expand.Relation)
|
||||||
|
if relInfo != nil && relInfo.relatedModel != nil {
|
||||||
|
// Create a validator for the related model
|
||||||
|
expandValidator := common.NewColumnValidator(relInfo.relatedModel)
|
||||||
|
// Filter columns using the related model's validator
|
||||||
|
filteredExpand.Columns = expandValidator.FilterValidColumns(expand.Columns)
|
||||||
|
} else {
|
||||||
|
// If we can't find the relationship, log a warning and skip column filtering
|
||||||
|
logger.Warn("Cannot validate columns for unknown relation: %s", expand.Relation)
|
||||||
|
// Keep the columns as-is if we can't validate them
|
||||||
|
filteredExpand.Columns = expand.Columns
|
||||||
|
}
|
||||||
|
|
||||||
|
filteredExpands = append(filteredExpands, filteredExpand)
|
||||||
|
}
|
||||||
|
filtered.Expand = filteredExpands
|
||||||
|
|
||||||
return filtered
|
return filtered
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user