svc_default
This commit is contained in:
+1
-1
@@ -71,7 +71,7 @@
|
|||||||
|
|
||||||
//variables.framework.docs={};
|
//variables.framework.docs={};
|
||||||
variables.framework.docs.APIName="Deck API";
|
variables.framework.docs.APIName="Deck API";
|
||||||
variables.framework.docs.APIVersion="0.020";
|
variables.framework.docs.APIVersion="0.021";
|
||||||
|
|
||||||
variables.framework.globalHeaders = structNew();
|
variables.framework.globalHeaders = structNew();
|
||||||
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
|
variables.framework.globalHeaders["Access-Control-Expose-Headers"] = "Location";
|
||||||
|
|||||||
@@ -182,17 +182,18 @@
|
|||||||
<cfargument name="descr" type="string" required=false default="" hint="type:varchar (no cleanup here!)"/>
|
<cfargument name="descr" type="string" required=false default="" hint="type:varchar (no cleanup here!)"/>
|
||||||
|
|
||||||
<!--- ****** проверка уникальности --->
|
<!--- ****** проверка уникальности --->
|
||||||
<cftry>
|
<cftry>
|
||||||
|
<cfset checkDisplayName(arguments.displayName, arguments.usrId, arguments.instanceUid)/><!--- как идея - офорить как обертку, возвращающую то же значение. Но будет соблазн еще оттримить иначе пофиксить, а это уже избыточная функция и должно усложнить название --->
|
||||||
<cfset this.helper.keyExistsAndValid(arguments, "instanceUid", "guid")/>
|
<cfset this.helper.keyExistsAndValid(arguments, "instanceUid", "guid")/>
|
||||||
<cfquery name="local.qSave">
|
<cfquery name="local.qSave">
|
||||||
update instance set
|
update instance set
|
||||||
dt_updated=<cfqueryparam cfsqltype="cf_sql_timestamp" value="#Now()#" />
|
dt_updated=<cfqueryparam cfsqltype="cf_sql_timestamp" value="#Now()#" />
|
||||||
,updater_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.usrId#" />
|
,updater_id=<cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.usrId#" />
|
||||||
<cfif structKeyExists(arguments,"displayName")>
|
<cfif structKeyExists(arguments,"displayName")>
|
||||||
,display_name=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.displayName#" />
|
,display_name=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.displayName#" />
|
||||||
</cfif>
|
</cfif>
|
||||||
<cfif structKeyExists(arguments,"descr")>
|
<cfif structKeyExists(arguments,"descr")>
|
||||||
,descr=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.descr#" />
|
,descr=<cfqueryparam cfsqltype="cf_sql_varchar" value="#arguments.descr#" />
|
||||||
</cfif>
|
</cfif>
|
||||||
where instance_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceUid#" />;
|
where instance_uid=<cfqueryparam cfsqltype="cf_sql_other" value="#arguments.instanceUid#" />;
|
||||||
--select @@rowcount as cnt;
|
--select @@rowcount as cnt;
|
||||||
@@ -209,5 +210,52 @@
|
|||||||
|
|
||||||
<cfreturn noData().withStatus(204, "No Content") />
|
<cfreturn noData().withStatus(204, "No Content") />
|
||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
|
<!--- <cffunction name="checkDisplayName" access="public" hint="возвращает пустую строку при успешной проверке, иначе описание ошибки">
|
||||||
|
<cfargument name="display_name"/>
|
||||||
|
<cfargument name="usr_id"/>
|
||||||
|
<cfargument name="instance_uid"/>
|
||||||
|
|
||||||
|
<cfif len(arguments.display_name) LT 3>
|
||||||
|
<cfthrow type="invalidParamValue" message="Имя должно быть не короче 3 символов"/>/>
|
||||||
|
<cfelseif len(arguments.display_name) GT 80>
|
||||||
|
<cfthrow type="invalidParamValue" message="Имя должно быть не длиннее 80 символов"/>/>
|
||||||
|
<cfelse>
|
||||||
|
<cfquery name="qUniqueDisplayName">
|
||||||
|
select count(*) as cnt from instance e
|
||||||
|
join specification_item i on (e.specification_item_id=i.specification_item_id)
|
||||||
|
join specification s on (i.specification_id=s.specification_id)
|
||||||
|
join contract d on (s.contract_id=d.contract_id)
|
||||||
|
join contragent k on (d.contragent_id=k.contragent_id)
|
||||||
|
join usr u on (k.contragent_id=u.contragent_id)
|
||||||
|
where u.usr_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.usr_id#/>
|
||||||
|
AND lower(e.display_name)=lower(<cfqueryparam cfsqltype="cf_sql_varchar" value=#arguments.display_name#/>)
|
||||||
|
AND e.instance_uid <> <cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instance_uid#/>
|
||||||
|
</cfquery>
|
||||||
|
<cfif qUniqueDisplayName.cnt GT 0>
|
||||||
|
<cfthrow type="invalidParamValue" message="Имя должно быть уникальным"/><!--- *** в пределах контракта/спецификации --->
|
||||||
|
</cfif>
|
||||||
|
</cfif>
|
||||||
|
</cffunction> ---><!--- *** оказывается, я независимо реализовал почти точно такую же функцию для POST, и забыл --->
|
||||||
|
|
||||||
|
<!--- неудобно бегать из одного компонента в соседний при том, что разделение ответственности между ними получается довольно странное
|
||||||
|
Решил, что логичнее повесить проверки уникальности и генерацию дефолтов на коллекцию, тем более и связей так меньше --->
|
||||||
|
|
||||||
|
<cffunction name="checkDisplayName">
|
||||||
|
<cfargument name="displayName" required=true/>
|
||||||
|
<cfargument name="usrId" type="numeric" required=true/>
|
||||||
|
<cfargument name="instanceUid" type="guid" required=true/>
|
||||||
|
|
||||||
|
<cfset CreateObject("component", "instance_ls").checkDisplayName(arguments.displayName, arguments.usrId, arguments.instanceUid)/>
|
||||||
|
</cffunction>
|
||||||
|
|
||||||
|
|
||||||
|
<!--- <cffunction name="generateDefaultName">
|
||||||
|
<cfargument name="service_id" type="numeric"/>
|
||||||
|
|
||||||
|
<cfreturn CreateObject("component", "instance_ls").generateDefaultName(arguments.service_id)/>
|
||||||
|
</cffunction> --->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</cfcomponent>
|
</cfcomponent>
|
||||||
@@ -155,14 +155,18 @@
|
|||||||
<cfargument name="displayName" type="string" required=true hint="type:string"/>
|
<cfargument name="displayName" type="string" required=true hint="type:string"/>
|
||||||
<cfargument name="serviceId" type="string" required=true hint="type:integer"/>
|
<cfargument name="serviceId" type="string" required=true hint="type:integer"/>
|
||||||
<cfargument name="descr" type="string" required=false default="" hint="type:varchar (no cleanup here!)"/>
|
<cfargument name="descr" type="string" required=false default="" hint="type:varchar (no cleanup here!)"/>
|
||||||
|
<!--- <cfargument name="instanceUid" type="string" required=false default="" hint="type:guid)"/> --->
|
||||||
|
|
||||||
<!--- <cfargument name="usrUid" type="string" required=true hint="type:guid"/>
|
<!--- <cfargument name="usrUid" type="string" required=true hint="type:guid"/>
|
||||||
<cfargument name="companyUid" type="string" required=true hint="type:guid"/> --->
|
<cfargument name="companyUid" type="string" required=true hint="type:guid"/> --->
|
||||||
<!--- оказывается, их можно и не декларировать --->
|
<!--- оказывается, их можно и не декларировать --->
|
||||||
|
|
||||||
<cfset local={}/>
|
<cfset local={}/>
|
||||||
<cfset local.instanceUid=#createGUID()#/>
|
<!--- <cfif structKeyExists(arguments,"instanceUid")>
|
||||||
<!--- <cfdump var=#arguments#/><cfabort/> --->
|
<cfset local.instanceUid=arguments.instanceUid/>
|
||||||
|
<cfelse> --->
|
||||||
|
<cfset local.instanceUid=#createGUID()#/>
|
||||||
|
<!--- </cfif> --->
|
||||||
|
|
||||||
<cftry>
|
<cftry>
|
||||||
<cfset this.helper.keyExistsAndValid(arguments, "serviceId", "integer")/>
|
<cfset this.helper.keyExistsAndValid(arguments, "serviceId", "integer")/>
|
||||||
@@ -214,19 +218,22 @@
|
|||||||
/>
|
/>
|
||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<cffunction name="checkDisplayName">
|
<cffunction name="checkDisplayName">
|
||||||
<cfargument name="displayName" required=true/>
|
<cfargument name="displayName" required=true/>
|
||||||
<cfargument name="usrId" type="numeric" required=true/>
|
<cfargument name="usrId" type="numeric" required=true/>
|
||||||
<cfargument name="instanceUid" type="guid" required=true/>
|
<cfargument name="instanceUid" type="guid" required=true/>
|
||||||
|
|
||||||
<cfset var display_name=trim(lcase(arguments.displayName))/>
|
<cfset var local={}/>
|
||||||
|
<cfset var display_name=trim(lcase(arguments.displayName))/>
|
||||||
|
|
||||||
<cfif len(display_name) LT 3>
|
<cfif len(display_name) LT 3>
|
||||||
<cfthrow type="InvalidParamValue" message="Instance Display Name too short" detail="Имя должно быть не короче 3 символов"/>
|
<cfthrow type="InvalidParamValue" message="Instance Display Name too short" detail="Имя должно быть не короче 3 символов"/>
|
||||||
<cfelseif len(display_name) GT 80>
|
<cfelseif len(display_name) GT 80>
|
||||||
<cfthrow type="InvalidParamValue" message="Instance Display Name too long" detail="Имя должно быть не длиннее 80 символов"/>
|
<cfthrow type="InvalidParamValue" message="Instance Display Name too long" detail="Имя должно быть не длиннее 80 символов"/>
|
||||||
<cfelse>
|
<cfelse>
|
||||||
<cfquery name="qUniqueDisplayName">
|
<cfquery name="local.qUniqueDisplayName">
|
||||||
select count(*) as cnt from instance e
|
select count(*) as cnt from instance e
|
||||||
join specification_item i on (e.specification_item_id=i.specification_item_id)
|
join specification_item i on (e.specification_item_id=i.specification_item_id)
|
||||||
join specification s on (i.specification_id=s.specification_id)
|
join specification s on (i.specification_id=s.specification_id)
|
||||||
@@ -237,10 +244,50 @@
|
|||||||
AND lower(e.display_name)=lower(<cfqueryparam cfsqltype="cf_sql_varchar" value=#arguments.displayName#/>)
|
AND lower(e.display_name)=lower(<cfqueryparam cfsqltype="cf_sql_varchar" value=#arguments.displayName#/>)
|
||||||
AND e.instance_uid <> <cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceUid#/>
|
AND e.instance_uid <> <cfqueryparam cfsqltype="cf_sql_other" value=#arguments.instanceUid#/>
|
||||||
</cfquery>
|
</cfquery>
|
||||||
<cfif qUniqueDisplayName.cnt GT 0>
|
<cfif local.qUniqueDisplayName.cnt GT 0>
|
||||||
<cfthrow type="InvalidParamValue" message="Instance Display Name not unique" detail="Имя экземпляра должно быть уникальным в рамках договора"/>
|
<cfthrow type="InvalidParamValue" message="Instance Display Name not unique" detail="Имя экземпляра должно быть уникальным в рамках договора"/>
|
||||||
</cfif>
|
</cfif>
|
||||||
</cfif>
|
</cfif>
|
||||||
</cffunction>
|
</cffunction>
|
||||||
|
|
||||||
|
<cffunction name="generateDefaultName" returnType="string">
|
||||||
|
<!--- *** Это некорректно, потому что имя может содержать пробелы и т.п. --->
|
||||||
|
<!--- *** Неуклюже и медленно --->
|
||||||
|
<!--- Эти валидации и генерации занимают удивительно много рабочего времени --->
|
||||||
|
<cfargument name="service_id" type="numeric"/>
|
||||||
|
<cfargument name="usr_id" type="numeric"/>
|
||||||
|
|
||||||
|
<cfset var local={}/>
|
||||||
|
|
||||||
|
<cfquery name="local.qSvc">
|
||||||
|
select svc from svc where svc_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.service_id#/>
|
||||||
|
</cfquery>
|
||||||
|
|
||||||
|
<cfquery name="local.qInst">
|
||||||
|
select display_name
|
||||||
|
from instance e
|
||||||
|
join specification_item i on (e.specification_item_id=i.specification_item_id)
|
||||||
|
join specification s on (i.specification_id=s.specification_id)
|
||||||
|
join contract d on (s.contract_id=d.contract_id)
|
||||||
|
join contragent k on (d.contragent_id=k.contragent_id)
|
||||||
|
join usr u on (k.contragent_id=u.contragent_id)
|
||||||
|
where u.usr_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.usr_id#/>
|
||||||
|
AND lower(e.display_name) like lower(<cfqueryparam cfsqltype="cf_sql_varchar" value="#local.qSvc.svc#%"/>)
|
||||||
|
AND service_id=<cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.service_id#/>
|
||||||
|
</cfquery>
|
||||||
|
|
||||||
|
<cfset var prefixLen=len(local.qSvc.svc)+1/>
|
||||||
|
<cfset var i=1/>
|
||||||
|
<cfloop query="local.qInst">
|
||||||
|
<cfif len(local.qInst.display_name) GT prefixLen>
|
||||||
|
<cfset var suffix=right(local.qInst.display_name, len(local.qInst.display_name)-prefixLen)/>
|
||||||
|
<cfif isValid("integer",suffix)>
|
||||||
|
<cfset i=(i GT int(suffix))?i:int(suffix)/>
|
||||||
|
</cfif>
|
||||||
|
</cfif>
|
||||||
|
</cfloop>
|
||||||
|
|
||||||
|
<cfreturn "#local.qSvc.svc#-#i+1#"/>
|
||||||
|
</cffunction>
|
||||||
|
|
||||||
</cfcomponent>
|
</cfcomponent>
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
<cfcomponent extends="taffy.core.resource" taffy:uri="/services/{svcId}/default" hint="template for default instance (экспериментальный)">
|
||||||
|
|
||||||
|
<cfsilent>
|
||||||
|
<cfimport prefix="m" taglib="../lib"/>
|
||||||
|
<cfset this.helper=CreateObject("component","lib.rest_api_helper")/>
|
||||||
|
</cfsilent>
|
||||||
|
|
||||||
|
<cffunction name="get" hint="Шаблон экземпляра"><!--- *** TODO проверка принадлежности тенанту --->
|
||||||
|
<cfargument name="svcId" type="string" required=true hint="type:integer"/>
|
||||||
|
<cfargument name="usrId" type="string" required=true hint="type:integer"/><!--- arguments.usrId неявно вбрасывается из Application.cfm --->
|
||||||
|
<cftry>
|
||||||
|
<cfset this.helper.validateField(arguments, "svcId", "integer")/>
|
||||||
|
<cfcatch type="invalidParamValue">
|
||||||
|
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
|
||||||
|
</cfcatch>
|
||||||
|
</cftry>
|
||||||
|
|
||||||
|
<cfset var out = {
|
||||||
|
"svcId":"#arguments.svcId#",
|
||||||
|
"displayName":"#generateDefaultName(arguments.svcId,arguments.usrId)#",
|
||||||
|
"descr":""
|
||||||
|
}/>
|
||||||
|
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
|
||||||
|
<cfset "out.runDurationMs"=getTickCount() - request.startTickCount/>
|
||||||
|
<cfreturn representationOf(out) />
|
||||||
|
</cffunction>
|
||||||
|
|
||||||
|
<!--- хотя такая зависимость очень не нравится своим направлением, как бы задом наперед--->
|
||||||
|
<cffunction name="generateDefaultName">
|
||||||
|
<cfargument name="service_id" type="numeric"/>
|
||||||
|
<cfargument name="usr_id" type="numeric"/>
|
||||||
|
|
||||||
|
<cfreturn CreateObject("component", "instance_ls").generateDefaultName(arguments.service_id,arguments.usr_id)/>
|
||||||
|
</cffunction>
|
||||||
|
|
||||||
|
</cfcomponent>
|
||||||
Reference in New Issue
Block a user