mirror of
https://github.com/FlipsideCrypto/flow-models.git
synced 2026-02-06 13:06:59 +00:00
204 lines
6.8 KiB
PL/PgSQL
204 lines
6.8 KiB
PL/PgSQL
{% macro get_allday_metadata() %}
|
|
{% set create_table %}
|
|
CREATE SCHEMA IF NOT EXISTS {{ target.database }}.bronze_api;
|
|
CREATE TABLE IF NOT EXISTS {{ target.database }}.bronze_api.allday_metadata(
|
|
requested_ids ARRAY,
|
|
res VARIANT,
|
|
_inserted_timestamp TIMESTAMP_NTZ,
|
|
contract STRING
|
|
);
|
|
{% endset %}
|
|
|
|
{% set event_table %}
|
|
|
|
CREATE OR REPLACE TABLE {{ target.database }}.bronze_api.log_messages (
|
|
timestamp TIMESTAMP_NTZ DEFAULT CURRENT_TIMESTAMP(),
|
|
log_level STRING,
|
|
message STRING
|
|
);
|
|
{% endset %}
|
|
|
|
{% do run_query(event_table) %}
|
|
{% do run_query(create_table) %}
|
|
|
|
{% set query %}
|
|
CREATE OR REPLACE PROCEDURE {{ target.database }}.bronze_api.allday_metadata()
|
|
RETURNS STRING
|
|
LANGUAGE JAVASCRIPT
|
|
EXECUTE AS CALLER
|
|
AS $$
|
|
|
|
const nfl_contract = 'A.e4cf4bdc1751c65d.AllDay'
|
|
|
|
var res = snowflake.execute({sqlText: `select * from {{ target.database }}.silver.allday_moments_metadata_needed_s ORDER BY MOMENT_ID ASC`})
|
|
query_id = res.getQueryId();
|
|
|
|
res = snowflake.execute({sqlText: `
|
|
SELECT count(*) FROM table(result_scan('${query_id}'))
|
|
`});
|
|
|
|
res.next()
|
|
row_count = res.getColumnValue(1);
|
|
|
|
batch_size = 40 // limit on their end - 40
|
|
|
|
let call_groups = Math.ceil(row_count / batch_size)
|
|
|
|
for (i = 0; i < call_groups; i++) {
|
|
|
|
var flows_ids = snowflake.execute({sqlText: `
|
|
WITH subset as (
|
|
SELECT *
|
|
FROM table(result_scan('${query_id}'))
|
|
limit ${batch_size } offset ${i * batch_size}
|
|
)
|
|
SELECT ARRAY_AGG(CAST(MOMENT_ID AS INTEGER))
|
|
FROM subset`});
|
|
|
|
flows_ids.next()
|
|
row_list = flows_ids.getColumnValue(1);
|
|
|
|
var create_temp_table_command = `
|
|
INSERT INTO {{ target.database }}.bronze_api.allday_metadata
|
|
WITH api_call AS (
|
|
`;
|
|
|
|
let query = `{
|
|
searchMomentNFTsV2(input: {filters: {byFlowIDs: [${row_list}]}}) {
|
|
edges {
|
|
cursor
|
|
node {
|
|
id
|
|
ownerAddress
|
|
serialNumber
|
|
flowID
|
|
distributionFlowID
|
|
packNFTFlowID
|
|
editionFlowID
|
|
owner {
|
|
id
|
|
dapperID
|
|
email
|
|
phoneNumber
|
|
username
|
|
flowAddress
|
|
profileImageUrl
|
|
isCurrentTOSSigned
|
|
}
|
|
edition {
|
|
id
|
|
flowID
|
|
playFlowID
|
|
seriesFlowID
|
|
setFlowID
|
|
maxMintSize
|
|
currentMintSize
|
|
tier
|
|
description
|
|
numMomentsOwned
|
|
numMomentsInPacks
|
|
numMomentsUnavailable
|
|
numMomentsBurned
|
|
series {
|
|
flowID
|
|
name
|
|
active
|
|
}
|
|
set {
|
|
flowID
|
|
name
|
|
}
|
|
play {
|
|
id
|
|
flowID
|
|
metadata {
|
|
state
|
|
description
|
|
league
|
|
playType
|
|
videos {
|
|
type
|
|
url
|
|
videoLength
|
|
}
|
|
images {
|
|
type
|
|
url
|
|
}
|
|
classification
|
|
week
|
|
season
|
|
playerID
|
|
playerFullName
|
|
playerFirstName
|
|
playerLastName
|
|
playerPosition
|
|
playerNumber
|
|
playerWeight
|
|
playerHeight
|
|
playerBirthdate
|
|
playerBirthplace
|
|
playerRookieYear
|
|
playerDraftTeam
|
|
playerDraftYear
|
|
playerDraftRound
|
|
playerDraftNumber
|
|
playerCollege
|
|
teamID
|
|
gameNflID
|
|
gameDate
|
|
homeTeamName
|
|
homeTeamID
|
|
homeTeamScore
|
|
awayTeamName
|
|
awayTeamID
|
|
awayTeamScore
|
|
gameTime
|
|
gameQuarter
|
|
gameDown
|
|
gameDistance
|
|
teamName
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}`;
|
|
|
|
create_temp_table_command += `
|
|
SELECT
|
|
{{ target.database }}.live.udf_api('GET', CONCAT('https://nflallday.com/consumer/graphql?query=','${query}' ), {'User-Agent': 'Flipside_Flow_metadata/0.1','Accept-Encoding': 'gzip', 'Content-Type': 'application/json', 'Accept': 'application/json','Connection': 'keep-alive'},{}) AS res
|
|
`;
|
|
|
|
|
|
create_temp_table_command+= `
|
|
)
|
|
SELECT
|
|
[${row_list}] AS requested_ids,
|
|
res,
|
|
SYSDATE() AS _inserted_timestamp,
|
|
'${nfl_contract}' AS contract
|
|
FROM api_call
|
|
`
|
|
|
|
snowflake.execute({sqlText: create_temp_table_command});
|
|
// Second command: Insert data into the target table from the temporary table
|
|
|
|
var log_message = `INSERT INTO {{ target.database }}.bronze_api.log_messages (log_level, message) VALUES ('INFO', ' Iteration ${i} of ${call_groups} complete.')`;
|
|
snowflake.execute({sqlText: log_message});
|
|
}
|
|
return 'Success';
|
|
|
|
$$;
|
|
{% endset %}
|
|
{% do run_query(query) %}
|
|
|
|
|
|
{% set sql %}
|
|
CALL {{ target.database }}.bronze_api.allday_metadata();
|
|
{% endset %}
|
|
|
|
{% do run_query(sql) %}
|
|
|
|
{% endmacro %} |