Files
svc-api-x/v1/resources/bk/timeseries.cfc.bak
T
2025-09-10 20:19:02 +03:00

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, '<,>,"', '&lt;,&gt;,&quot;');
}
//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>