088 instance_ls filtering and sorting fixed

This commit is contained in:
msyu
2025-04-09 16:47:15 +03:00
parent ce8a86f4f2
commit 70e4471893
2 changed files with 35 additions and 20 deletions
+1 -1
View File
@@ -51,7 +51,7 @@
//variables.framework.docs={}; //variables.framework.docs={};
variables.framework.docs.APIName="Deck API"; variables.framework.docs.APIName="Deck API";
variables.framework.docs.APIVersion="0.087"; variables.framework.docs.APIVersion="0.088";
variables.framework.globalHeaders = structNew(); variables.framework.globalHeaders = structNew();
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location"; variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
+33 -18
View File
@@ -8,17 +8,19 @@
<!---спецификация полей, пригодных для фильтрации (?и сортировки)---> <!---спецификация полей, пригодных для фильтрации (?и сортировки)--->
<cfset this.fieldsSpec={ <cfset this.fieldsSpec={
"instance_uid"={prefix="inr", type="guid"}, "instance_uid"={prefix="inr", type="guid"},
"dt_created"={prefix="inr", type="date"},
"dt_updated"={prefix="inr", type="date"},
"instance_config_dt_created"={prefix="inr", type="date"}, "instance_config_dt_created"={prefix="inr", type="date"},
"instance_config_dt_updated"={prefix="inr", type="date"}, "instance_config_dt_updated"={prefix="inr", type="date"},
"display_name"={prefix="inr", type="string"}, "display_name"={prefix="inr", type="string"},
"service_id"={prefix="inr", type="integer"}, "service_id"={prefix="inr", type="integer"},
"specification_item_id"={prefix="inr", type="integer"}, "specification_item_id"={prefix="inr", type="integer"},
"contract_id"={prefix="inr", type="integer"}, "specification"={prefix="inr", type="string"},
"specification_id"={prefix="inr", type="integer"}, "specification_id"={prefix="inr", type="integer"},
"contract_id"={prefix="inr", type="integer"},
"svc"={prefix="inr", type="string"}, "svc"={prefix="inr", type="string"},
"code"={prefix="inr", type="string"}, "code"={prefix="inr", type="string"},
"updater_id"={prefix="inr", type="integer"},
"updater_shortname"={prefix="inr", type="string"},
"updater_login"={prefix="inr", type="string"},
"last_operation"={prefix="inr", type="string"}, "last_operation"={prefix="inr", type="string"},
"last_operation_uid"={prefix="inr", type="guid"}, "last_operation_uid"={prefix="inr", type="guid"},
"submit_result"={prefix="inr", type="string"}, "submit_result"={prefix="inr", type="string"},
@@ -31,11 +33,12 @@
"instance_state_uid"={prefix="inr", type="guid"}, "instance_state_uid"={prefix="inr", type="guid"},
"is_deleted"={prefix="inr", type="string"},<!--- not bool ---> "is_deleted"={prefix="inr", type="string"},<!--- not bool --->
"suspended"={prefix="inr", type="string"},<!--- not bool ---> "suspended"={prefix="inr", type="string"},<!--- not bool --->
"resourceRealm"={prefix="inr", type="string"}, "resource_realm"={prefix="inr", type="string"},
"resourceRealmId"={prefix="inr", type="integer"}, "operation_is_in_progress"={prefix="inr", type="boolean"},
"is_test"={prefix="inr", type="boolean"}, "is_test"={prefix="inr", type="boolean"},
"is_auxiliary"={prefix="inr", type="boolean"}, "is_auxiliary"={prefix="inr", type="boolean"},
"explained_status"={prefix="inr", type="string"}, "explained_status"={prefix="inr", type="string"},
"dt_state"={prefix="inr", type="date"},
"version"={prefix="inr", type="integer"} "version"={prefix="inr", type="integer"}
} }
/> />
@@ -60,16 +63,21 @@
<cfset var order=this.helper.parseOrderBy(this.fieldsSpec, arguments.orderBy)/> <cfset var order=this.helper.parseOrderBy(this.fieldsSpec, arguments.orderBy)/>
<cfset local.fieldsToOutput=""/> <cfset local.fieldsToOutput=""/>
<cfloop collection=#this.fieldsSpec# item="fld"> <!--- <cfif listLen(arguments.fields)> ---><!--- *** если идти от arguments.fields, будет лаконичнее --->
<!--- <cfoutput>#this.helper.snake2camel(trim(fld))#</cfoutput> ---> <cfloop collection=#this.fieldsSpec# item="fld">
<!--- *** в данном случае мы некорректно ограничиваем состав выводимых полей <!--- <cfoutput>#this.helper.snake2camel(trim(fld))#</cfoutput> --->
полями, перечисленными в fieldSpec ---> <!--- *** в данном случае мы некорректно ограничиваем состав выводимых полей
<cfif listFind(arguments.fields, this.helper.snake2camel(trim(fld))) полями, перечисленными в fieldSpec --->
OR structKeyExists(order,this.helper.snake2camel(trim(fld)))> <cfif listFind(arguments.fields, this.helper.snake2camel(trim(fld)))
<cfset local.fieldsToOutput=listAppend(local.fieldsToOutput,trim(fld))/> OR len(arguments.fields) EQ 0
</cfif> /* OR structKeyExists(order,this.helper.snake2camel(trim(fld))) */>
</cfloop> <cfset local.fieldsToOutput=listAppend(local.fieldsToOutput,trim(fld))/>
<cfset local.fieldsToQueryFor=local.fieldsToOutput/> </cfif>
</cfloop>
<!--- </cfif> --->
<!--- <cfdump var=#local.fieldsToOutput#/><cfabort/> --->
<cfset local.fieldsToQueryFor = local.fieldsToOutput/>
<cfset local.fieldsShortList=""/> <cfset local.fieldsShortList=""/>
<!--- теперь добавим в перечень полей, которые нужно оставить, поля для фильтрации и сортировки ---> <!--- теперь добавим в перечень полей, которые нужно оставить, поля для фильтрации и сортировки --->
@@ -112,6 +120,13 @@
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/> <cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
</cfcatch> </cfcatch>
</cftry> </cftry>
<!--- *********** 2DO ShortList --->
<!--- <!---
<cfdump var=#order#/> <cfdump var=#order#/>
<cfdump var=#local.fieldsToQueryFor#/> <cfdump var=#local.fieldsToQueryFor#/>
@@ -167,7 +182,7 @@
<m:field formatter=#request.castToBool#>(select st.is_test from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as is_test</m:field> <m:field formatter=#request.castToBool#>(select st.is_test from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as is_test</m:field>
<m:field formatter=#request.castToBool#>coalesce((select st.instance_data->>'isDeleted' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1),'false') as is_deleted</m:field><!--- attention it is not bool in state ---> <m:field formatter=#request.castToBool#>coalesce((select st.instance_data->>'isDeleted' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1),'false') as is_deleted</m:field><!--- attention it is not bool in state --->
<m:field formatter=#request.castToBool#>(select st.instance_data->>'suspended' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as suspended</m:field> <m:field formatter=#request.castToBool#>(select st.instance_data->>'suspended' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as suspended</m:field>
<m:field>(select cast(st.instance_data->>'params' as json)->>'resourceRealm' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as resourceRealm</m:field> <m:field>(select cast(st.instance_data->>'params' as json)->>'resourceRealm' from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as resource_realm</m:field>
<m:field>(select to_char(st.dt_state, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as dt_state</m:field> <m:field>(select to_char(st.dt_state, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as dt_state</m:field>
<m:field> <m:field>
(case (case
@@ -287,8 +302,8 @@
<!---<cfset "out.sql"=#local.result.sql#/>---> <!---<cfset "out.sql"=#local.result.sql#/>--->
<cfreturn representationOf(out)/> <cfreturn representationOf(out)/>
<cfcatch type="any"> <cfcatch type="any"> <!--- {"message"=cfcatch.message, "detail"=cfcatch.detail} --->
<cfreturn representationOf(cfcatch.message).withStatus(500)/> <cfreturn representationOf(cfcatch).withStatus(500)/>
</cfcatch> </cfcatch>
</cftry> </cftry>
</cffunction> </cffunction>