instance.availableOperations
This commit is contained in:
+15
-8
@@ -71,7 +71,7 @@
|
||||
|
||||
//variables.framework.docs={};
|
||||
variables.framework.docs.APIName="Deck API";
|
||||
variables.framework.docs.APIVersion="0.011";
|
||||
variables.framework.docs.APIVersion="0.013";
|
||||
|
||||
variables.framework.globalHeaders = structNew();
|
||||
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
|
||||
@@ -174,16 +174,23 @@
|
||||
return representationOf("Authorization header expected").withStatus(401);
|
||||
}
|
||||
|
||||
var httpService = new http(method = "GET", charset = "utf-8", url = #this.iamServiceUrl#, timeout="3");
|
||||
httpService.addParam(type = "HEADER", name = "Accept", value = "application/json");
|
||||
httpService.addParam(type = "HEADER", name = "Authorization", value = "#auth#"); //passthrough
|
||||
var resp = httpService.send();
|
||||
var result = resp.getPrefix().filecontent;
|
||||
try {
|
||||
var httpService = new http(method = "GET", charset = "utf-8", url = #this.iamServiceUrl#, timeout="3");
|
||||
httpService.addParam(type = "HEADER", name = "Accept", value = "application/json");
|
||||
httpService.addParam(type = "HEADER", name = "Authorization", value = "#auth#"); //passthrough
|
||||
var resp = httpService.send();
|
||||
var result = resp.getPrefix().filecontent;
|
||||
if (resp.responseheader.status_code NEQ 200) throw("IDP response not OK");
|
||||
|
||||
} catch (e) {
|
||||
if (false) { //true for local debug without IDP
|
||||
var result='{"accounts":[{"login":"","type":"telegram"}],"avatar":["d2d2b7ac-50af-432b-b7c4-f7d6561e288a"],"company":"ООО «НУБЕС»","companyId":"8ec70ac0-546d-42a7-8cff-339c8fb51a23","contactId":"983967a3-58c2-4cdd-84a5-8b427ccfac82","email":"smishchuk@nubes.ru","externalUser":false,"fio":{"fullName":"Мищук Сергей ","name":"Сергей","secondName":"","surname":"Мищук"},"groupIds":["94bf5be7-52f4-5c13-87c3-513786934685","ab12b6b8-0265-4683-a5c2-5e1a74a55216","aff008c3-7443-50f6-86e1-ecff3cd3b04d","d6000da0-c9aa-55eb-9882-f118b432730b","d89a33dc-3177-5854-9580-f7f860a5ab7c","ddfe2555-9ef4-42cb-9a2b-7f24e61e7747","df12926f-ecb8-5479-857f-6d291464baad","fda5c295-230a-5025-9797-b8b4e99e08aa","2be9b4b6-94d1-59f9-a649-cab228d82169","64fe6f5c-a91b-5fea-a7ca-d9823701ebd4"],"integration":{"serviceId":""},"login":"smishchuk@nubes.ru","mobilePhone":[],"position":"","userId":"d72530e1-66a4-412f-a046-38153c4e5405"}';}
|
||||
}
|
||||
|
||||
//writeDump(result); abort;
|
||||
try {
|
||||
var idpUserData=deserializeJson(result);
|
||||
|
||||
arguments.requestArguments.companyUid=idpUserData.companyId;
|
||||
arguments.requestArguments.companyUid=idpUserData.companyId;//GUID!
|
||||
arguments.requestArguments.usrUid=idpUserData.contactId;//userId; //GUID!
|
||||
} catch (e) {
|
||||
return representationOf( {"exception"=e, "idpResponse"=result} );
|
||||
|
||||
+55
-12
@@ -29,7 +29,7 @@
|
||||
<m:field>i.specification_id</m:field>
|
||||
<m:field>s.specification</m:field>
|
||||
<m:field>i.quantity</m:field>
|
||||
<m:field>i.price</m:field>
|
||||
<m:field>i.price</m:field><!--- *** не цена, а скидка (Считая ссылку на базовый тариф атрибутом сервиса) --->
|
||||
<m:field>v.svc</m:field>
|
||||
<m:field>(select operation from instance_state st join instance_operation io on (st.instance_operation_uid=io.instance_operation_uid) where st.instance_uid=e.instance_uid order by version desc limit 1) as operation</m:field>
|
||||
<m:field>(select st.instance_operation_uid::text from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as instance_operation_uid</m:field>
|
||||
@@ -38,10 +38,7 @@
|
||||
<m:field>(select io.submit_result from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as submit_result</m:field>
|
||||
<m:field>(select to_char(io.dt_start, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as operation_dt_start</m:field>
|
||||
<m:field>(select to_char(io.dt_finish, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as operation_dt_finish</m:field>
|
||||
<!--- <m:field>(select instance_data::text from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as instance_data</m:field> --->
|
||||
<!--- <m:field>(select st.instance_state_uid::text from instance_state st where st.instance_uid=e.instance_uid order by version desc limit 1) as instance_state_uid</m:field> --->
|
||||
<!--- <m:field>(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>(select max(version) from instance_state st where st.instance_uid=e.instance_uid) as version</m:field> --->
|
||||
|
||||
</m:field_set>
|
||||
from instance e
|
||||
left outer join specification_item i on (e.specification_item_id=i.specification_item_id)
|
||||
@@ -53,9 +50,9 @@
|
||||
AND s.specification_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.specificationId#/><!--- access protection --->
|
||||
</cfquery> <!--- *** правильнее при попытке доступа к чужому инстансу (НСД) выбрасывать 403, а тут будет 404 --->
|
||||
|
||||
<cfif local.qInstance.recordCount EQ 0>
|
||||
<!--- <cfif local.qInstance.recordCount EQ 0>
|
||||
<cfreturn representationOf(this.helper.formatMessage("Not Found")).withStatus(404)/>
|
||||
</cfif>
|
||||
</cfif> --->
|
||||
|
||||
<cfquery name="local.qCurrentState" result="local.result">
|
||||
select
|
||||
@@ -67,12 +64,20 @@
|
||||
<m:field title="is_test">st.is_test</m:field>
|
||||
<m:field title="instance_operation_uid">st.instance_operation_uid::text as instance_operation_uid</m:field>
|
||||
<m:field title="instance_data" formatter=#function(x){return (deserializeJson(x))}#>st.instance_data::text as instance_data</m:field>
|
||||
<m:field formatter=#function(x){return (x GT 0)}#>(st.instance_data->>'isDeleted')::boolean as is_deleted</m:field>
|
||||
</m:field_set>
|
||||
from instance_state st
|
||||
where st.instance_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceUid#" null=#!isValid('guid',arguments.instanceUid)#/>
|
||||
where st.instance_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#local.qInstance.instance_uid#" null=#!isValid('guid',local.qInstance.instance_uid)#/>
|
||||
order by st.version desc
|
||||
limit 1
|
||||
</cfquery>
|
||||
</cfquery><!--- берем local.qInstance.instance_uid ради изоляции (access protection) --->
|
||||
|
||||
|
||||
<cfset local.isCreated = (qCurrentState.recordCount GT 0)/>
|
||||
<cfset local.isDeleted = (qCurrentState.is_deleted GT 0)/>
|
||||
|
||||
<!--- <cfdump var=#local.qInstance#/><cfabort/> --->
|
||||
|
||||
|
||||
<!--- операция, создавшая текущее состояние --->
|
||||
<!--- *** странноватый селект --->
|
||||
@@ -96,8 +101,8 @@
|
||||
left outer join (select instance_operation_uid, max(version) as version from instance_state
|
||||
group by instance_operation_uid) sts on (o.instance_operation_uid=sts.instance_operation_uid)
|
||||
left outer join instance_state status on (sts.instance_operation_uid=status.instance_operation_uid AND sts.version=status.version)
|
||||
where o.instance_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceUid#" null=#!isValid('guid',arguments.instanceUid)#/>
|
||||
order by status.version
|
||||
where o.instance_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#local.qInstance.instance_uid#" null=#!isValid('guid',local.qInstance.instance_uid)#/>
|
||||
order by status.version desc
|
||||
</cfquery>
|
||||
<!--- *** А тут у нас не получится, что только операции с состояниями? Или в неправильном порядке? --->
|
||||
<!--- ?Добавить параметры к операции --->
|
||||
@@ -106,10 +111,43 @@
|
||||
<!--- <d:field title="Операция">(select operation from instance_state st join instance_operation io on (st.instance_operation_uid=io.instance_operation_uid) where st.instance_uid=e.instance_uid order by version desc limit 1) as operation</d:field>
|
||||
<!--- текущая операция. Она еще не создала стейта и не завершена --->
|
||||
<d:field title="Текущая операция">(select io.operation from instance_operation io where io.instance_uid=e.instance_uid order by dt_submit desc limit 1) as current_operation</d:field> --->
|
||||
|
||||
<!--- *** Отработать блокировку --->
|
||||
<cfquery name="local.qAvailableOperation" result="local.result">
|
||||
select
|
||||
<m:field_set titleMapOut="local.availableOperationTitleMap" lengthOut="local.fieldCount">
|
||||
<m:field>so.svc_operation_id</m:field>
|
||||
<m:field>so.operation</m:field>
|
||||
<m:field>
|
||||
(select instance_operation_uid::text
|
||||
from instance_operation io
|
||||
where io.instance_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#local.qInstance.instance_uid#" null=#!isValid('guid',local.qInstance.instance_uid)#/>
|
||||
AND io.operation=so.operation AND io.dt_submit IS NULL
|
||||
order by io.dt_created desc
|
||||
limit 1
|
||||
)as instance_operation_uid
|
||||
</m:field>
|
||||
</m:field_set>
|
||||
from svc_operation so
|
||||
where so.svc_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#local.qInstance.service_id#" null=#!isValid('integer',local.qInstance.service_id)#/>
|
||||
<cfif local.isCreated>
|
||||
AND NOT so.operation='create'
|
||||
<cfelse>
|
||||
AND so.operation='create'
|
||||
</cfif>
|
||||
<cfif local.isDeleted>
|
||||
AND 1=0
|
||||
</cfif>
|
||||
order by so.svc_operation_id
|
||||
</cfquery>
|
||||
|
||||
|
||||
<cfset var out=structNew("linked")/>
|
||||
|
||||
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
|
||||
|
||||
<cfset "out.isCreated"=local.isCreated/>
|
||||
<cfset "out.isDeleted"=qCurrentState.is_deleted GT 0/><!--- он все время пытается привести true к 1
|
||||
--->
|
||||
<!--- <cfset var rec={}/>
|
||||
<cfset this.helper.appendRecord(rec, "", local.titleMap, local.qInstance, this.helper.snake2camel)/>
|
||||
<cfset "out.instance"=rec/> --->
|
||||
@@ -123,6 +161,11 @@
|
||||
<cfset "out.instance.operations"=[]/>
|
||||
<cfloop query=#local.qOperation#>
|
||||
<cfset arrayAppend(out.instance.operations, this.helper.appendRecord(structNew("linked"), "", local.operationTitleMap, local.qOperation, this.helper.snake2camel))/>
|
||||
</cfloop>
|
||||
|
||||
<cfset "out.instance.availableOperations"=[]/>
|
||||
<cfloop query=#local.qAvailableOperation#>
|
||||
<cfset arrayAppend(out.instance.availableOperations, this.helper.appendRecord(structNew("linked"), "", local.availableOperationTitleMap, local.qAvailableOperation, this.helper.snake2camel))/>
|
||||
</cfloop>
|
||||
|
||||
<cfset "out.runDurationMs"=getTickCount() - request.startTickCount/>
|
||||
|
||||
Reference in New Issue
Block a user