088 instance_ls filtering and sorting fixed
This commit is contained in:
+1
-1
@@ -51,7 +51,7 @@
|
||||
|
||||
//variables.framework.docs={};
|
||||
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["Access-Control-Expose-Headers"] = "Location";
|
||||
|
||||
@@ -8,17 +8,19 @@
|
||||
<!---спецификация полей, пригодных для фильтрации (?и сортировки)--->
|
||||
<cfset this.fieldsSpec={
|
||||
"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_updated"={prefix="inr", type="date"},
|
||||
"display_name"={prefix="inr", type="string"},
|
||||
"service_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"},
|
||||
"contract_id"={prefix="inr", type="integer"},
|
||||
"svc"={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_uid"={prefix="inr", type="guid"},
|
||||
"submit_result"={prefix="inr", type="string"},
|
||||
@@ -31,11 +33,12 @@
|
||||
"instance_state_uid"={prefix="inr", type="guid"},
|
||||
"is_deleted"={prefix="inr", type="string"},<!--- not bool --->
|
||||
"suspended"={prefix="inr", type="string"},<!--- not bool --->
|
||||
"resourceRealm"={prefix="inr", type="string"},
|
||||
"resourceRealmId"={prefix="inr", type="integer"},
|
||||
"resource_realm"={prefix="inr", type="string"},
|
||||
"operation_is_in_progress"={prefix="inr", type="boolean"},
|
||||
"is_test"={prefix="inr", type="boolean"},
|
||||
"is_auxiliary"={prefix="inr", type="boolean"},
|
||||
"explained_status"={prefix="inr", type="string"},
|
||||
"dt_state"={prefix="inr", type="date"},
|
||||
"version"={prefix="inr", type="integer"}
|
||||
}
|
||||
/>
|
||||
@@ -59,17 +62,22 @@
|
||||
<cfset var filter=this.helper.parseFilterParams(this.fieldsSpec)/>
|
||||
<cfset var order=this.helper.parseOrderBy(this.fieldsSpec, arguments.orderBy)/>
|
||||
|
||||
<cfset local.fieldsToOutput=""/>
|
||||
<cfloop collection=#this.fieldsSpec# item="fld">
|
||||
<!--- <cfoutput>#this.helper.snake2camel(trim(fld))#</cfoutput> --->
|
||||
<!--- *** в данном случае мы некорректно ограничиваем состав выводимых полей
|
||||
полями, перечисленными в fieldSpec --->
|
||||
<cfif listFind(arguments.fields, this.helper.snake2camel(trim(fld)))
|
||||
OR structKeyExists(order,this.helper.snake2camel(trim(fld)))>
|
||||
<cfset local.fieldsToOutput=listAppend(local.fieldsToOutput,trim(fld))/>
|
||||
</cfif>
|
||||
</cfloop>
|
||||
<cfset local.fieldsToQueryFor=local.fieldsToOutput/>
|
||||
<cfset local.fieldsToOutput=""/>
|
||||
<!--- <cfif listLen(arguments.fields)> ---><!--- *** если идти от arguments.fields, будет лаконичнее --->
|
||||
<cfloop collection=#this.fieldsSpec# item="fld">
|
||||
<!--- <cfoutput>#this.helper.snake2camel(trim(fld))#</cfoutput> --->
|
||||
<!--- *** в данном случае мы некорректно ограничиваем состав выводимых полей
|
||||
полями, перечисленными в fieldSpec --->
|
||||
<cfif listFind(arguments.fields, this.helper.snake2camel(trim(fld)))
|
||||
OR len(arguments.fields) EQ 0
|
||||
/* OR structKeyExists(order,this.helper.snake2camel(trim(fld))) */>
|
||||
<cfset local.fieldsToOutput=listAppend(local.fieldsToOutput,trim(fld))/>
|
||||
</cfif>
|
||||
</cfloop>
|
||||
<!--- </cfif> --->
|
||||
<!--- <cfdump var=#local.fieldsToOutput#/><cfabort/> --->
|
||||
|
||||
<cfset local.fieldsToQueryFor = local.fieldsToOutput/>
|
||||
<cfset local.fieldsShortList=""/>
|
||||
|
||||
<!--- теперь добавим в перечень полей, которые нужно оставить, поля для фильтрации и сортировки --->
|
||||
@@ -112,6 +120,13 @@
|
||||
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
|
||||
|
||||
|
||||
<!--- *********** 2DO ShortList --->
|
||||
|
||||
|
||||
|
||||
<!---
|
||||
<cfdump var=#order#/>
|
||||
<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#>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>(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>
|
||||
(case
|
||||
@@ -287,8 +302,8 @@
|
||||
<!---<cfset "out.sql"=#local.result.sql#/>--->
|
||||
<cfreturn representationOf(out)/>
|
||||
|
||||
<cfcatch type="any">
|
||||
<cfreturn representationOf(cfcatch.message).withStatus(500)/>
|
||||
<cfcatch type="any"> <!--- {"message"=cfcatch.message, "detail"=cfcatch.detail} --->
|
||||
<cfreturn representationOf(cfcatch).withStatus(500)/>
|
||||
</cfcatch>
|
||||
</cftry>
|
||||
</cffunction>
|
||||
|
||||
Reference in New Issue
Block a user