130 lines
5.0 KiB
Plaintext
130 lines
5.0 KiB
Plaintext
<cfcomponent extends="taffy.core.resource" taffy:uri="/rating/timeseries/{instanceUid}">
|
|
|
|
<cfsilent>
|
|
<cfimport prefix="m" taglib="../lib"/>
|
|
<cfset this.helper=CreateObject("component","lib.rest_api_helper")/><!---*** странно, почему мы его видим?---><!---вынести в апп?--->
|
|
</cfsilent>
|
|
|
|
<!---спецификация полей, пригодных для фильтрации (?и сортировки)--->
|
|
<cfset this.fieldsSpec={
|
|
<!--- rating_uid={prefix="b", type="guid"},
|
|
dt_created={prefix="b", type="date"},
|
|
dt_updated={prefix="b", type="date"},
|
|
contragent_id={prefix="b", type="integer"},
|
|
rating={prefix="b", type="string"},
|
|
url={prefix="b", type="string"},
|
|
icon_url={prefix="b", type="string"},
|
|
descr={prefix="b", type="integer"},
|
|
is_enabled={prefix="b", type="boolean"},
|
|
sort={prefix="b", type="integer"} --->
|
|
}
|
|
/>
|
|
|
|
<!--- предполагается показывать букмарки только "настоящим" клиентам, поэтому используем contragent_id как признак своих--->
|
|
<!--- Получаем временной ряд (возможно, векторов) и Получаем агрегат за период --->
|
|
|
|
<cffunction name="get" hint="Получаем список ">
|
|
<cfargument name="instanceUid" type="string" hint="type:guid" required/>
|
|
<cfargument name="dtFrom" type="string" hint="type:datetime" required/>
|
|
<cfargument name="dtTo" type="string" hint="type:datetime" required/><!--- default=Now() --->
|
|
<cfargument name="intervalSeconds" type="string" hint="type:integer" required/>
|
|
<!--- Как ограничить число точек? Или задавать начало, интервал и число точек? --->
|
|
|
|
<cfset var local={}/>
|
|
<cftry> <!--- отладка на время проблемы 404 --->
|
|
|
|
|
|
<!---parse and validate request parameters--->
|
|
<cftry>
|
|
<cfset this.helper.validateField(arguments, "dtFrom", "date")/>
|
|
<cfset this.helper.validateField(arguments, "dtTo", "date")/>
|
|
<cfset this.helper.validateField(arguments, "intervalSeconds", "integer")/>
|
|
|
|
<!---мы мирно игнорируем поля, отсутствующие в спецификации, что позволяет не делать исключения для orderBy и т.п.--->
|
|
|
|
<cfcatch type="invalidParamValue">
|
|
<cfreturn representationOf(this.helper.formatBadRequestError(cfcatch)).withStatus(400)/>
|
|
</cfcatch>
|
|
<cfcatch type="any">
|
|
<cfreturn representationOf(cfcatch)/>
|
|
</cfcatch>
|
|
</cftry>
|
|
|
|
<cfset var out={}/>
|
|
<!--- <cfset var maxrows=arguments.pageSize*arguments.page/>
|
|
<cfset var startrow=arguments.pageSize*(arguments.page-1)+1/> --->
|
|
|
|
<!--- проверить принадлежность метрики клиенту --->
|
|
|
|
<cfquery name="local.qRead" result="local.result">
|
|
select
|
|
<m:field_set titleMapOut="local.titleMap" lengthOut="local.fieldCount">
|
|
<m:field>to_char(o.dt_created, 'YYYY-MM-DD"T"HH24:MI:SS.FF3TZHTZM') as t</m:field>
|
|
<m:field>1.23 as v</m:field>
|
|
</m:field_set>
|
|
from instance_operation o
|
|
|
|
<!--- where
|
|
AND (b.contragent_id = <cfqueryparam cfsqltype="cf_sql_integer" value=#arguments.contragentId# null=#!isNumeric(arguments.contragentId)#/>
|
|
OR b.contragent_id=-1)
|
|
order by b.contragent_id desc, b.sort asc
|
|
limit #maxrows# --->
|
|
</cfquery>
|
|
|
|
<cfset "out.queryDurationMs"=getTickCount() - request.startTickCount/>
|
|
<!--- <cfset "out.total"=#local.qTotal.cnt#/> --->
|
|
|
|
<cfset "out.dtFrom"=#arguments.dtFrom#/>
|
|
<cfset "out.dtTo"=#arguments.dtTo#/>
|
|
<cfset "out.intervalSeconds"=#arguments.intervalSeconds#/>
|
|
|
|
<cfset var resultCollection=[]/>
|
|
<cfloop query=#local.qRead# startRow=#startrow# endRow=#(startrow+maxrows-1)#>
|
|
<cfset var rec={}/>
|
|
<cfset this.helper.appendRecord(rec, "", local.titleMap, local.qRead, this.helper.snake2camel)/>
|
|
<cfset arrayAppend(resultCollection, rec)/>
|
|
</cfloop>
|
|
|
|
<cfset "out.size"=#arrayLen(resultCollection)#/>
|
|
<cfset "out.results"=#resultCollection#/>
|
|
<cfset "out.runDurationMs"=getTickCount()-request.startTickCount/>
|
|
|
|
<cfreturn representationOf(out)/>
|
|
|
|
<cfcatch type="any">
|
|
<cfreturn representationOf(cfcatch)/>
|
|
</cfcatch>
|
|
</cftry>
|
|
|
|
</cffunction>
|
|
|
|
|
|
|
|
<cfscript>
|
|
function plain2htm(s) {
|
|
return replace(replace(s, chr(13),'',"ALL"),chr(10),'<br/>', "ALL");
|
|
}
|
|
//request.plain2htm = plain2htm;
|
|
|
|
function htm2plain(s) {
|
|
return replaceNoCase(s, '<br/>', '#chr(13)##chr(10)#', "ALL");
|
|
}
|
|
//request.htm2plain = htm2plain;
|
|
|
|
function cleanHtm(s) {
|
|
return replaceList(s, '<,>,"', '<,>,"');
|
|
}
|
|
//request.cleanHtm = cleanHtm;
|
|
</cfscript>
|
|
|
|
<cffunction name="plain2HtmClean">
|
|
<cfargument name="s" type="string"/>
|
|
<cfreturn plain2htm(cleanHtm(s))/>
|
|
</cffunction>
|
|
|
|
<cffunction name="cleanInput">
|
|
<cfargument name="s" type="string"/>
|
|
<cfreturn htmlEditFormat(s)/>
|
|
</cffunction>
|
|
|
|
</cfcomponent> |