Add full monorepo: virtual-banker, backend, frontend, docs, scripts, deployment
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
72
backend/database/migrations/0008_add_iso_timestamps.up.sql
Normal file
72
backend/database/migrations/0008_add_iso_timestamps.up.sql
Normal file
@@ -0,0 +1,72 @@
|
||||
-- Add ISO 8601 compliant timestamp columns to blocks and transactions
|
||||
-- This migration adds timestamp_iso columns that store ISO 8601 formatted timestamps
|
||||
|
||||
-- Add timestamp_iso column to blocks table
|
||||
ALTER TABLE blocks ADD COLUMN IF NOT EXISTS timestamp_iso VARCHAR(30);
|
||||
|
||||
-- Create index for timestamp_iso on blocks
|
||||
CREATE INDEX IF NOT EXISTS idx_blocks_chain_timestamp_iso ON blocks(chain_id, timestamp_iso);
|
||||
|
||||
-- Add timestamp_iso column to transactions table
|
||||
-- This will be populated from the block timestamp via trigger
|
||||
ALTER TABLE transactions ADD COLUMN IF NOT EXISTS timestamp_iso VARCHAR(30);
|
||||
|
||||
-- Create index for timestamp_iso on transactions
|
||||
CREATE INDEX IF NOT EXISTS idx_transactions_chain_timestamp_iso ON transactions(chain_id, timestamp_iso);
|
||||
|
||||
-- Function to update timestamp_iso from timestamp
|
||||
CREATE OR REPLACE FUNCTION update_timestamp_iso()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.timestamp_iso := to_char(NEW.timestamp, 'YYYY-MM-DD"T"HH24:MI:SS"Z"');
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Trigger to automatically update timestamp_iso when timestamp changes in blocks
|
||||
DROP TRIGGER IF EXISTS trigger_blocks_timestamp_iso ON blocks;
|
||||
CREATE TRIGGER trigger_blocks_timestamp_iso
|
||||
BEFORE INSERT OR UPDATE OF timestamp ON blocks
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_timestamp_iso();
|
||||
|
||||
-- Function to update transaction timestamp_iso from block timestamp
|
||||
CREATE OR REPLACE FUNCTION update_transaction_timestamp_iso()
|
||||
RETURNS TRIGGER AS $$
|
||||
DECLARE
|
||||
block_timestamp TIMESTAMP;
|
||||
BEGIN
|
||||
-- Get the block timestamp
|
||||
SELECT b.timestamp INTO block_timestamp
|
||||
FROM blocks b
|
||||
WHERE b.chain_id = NEW.chain_id AND b.number = NEW.block_number;
|
||||
|
||||
-- If block timestamp exists, format it as ISO 8601
|
||||
IF block_timestamp IS NOT NULL THEN
|
||||
NEW.timestamp_iso := to_char(block_timestamp, 'YYYY-MM-DD"T"HH24:MI:SS"Z"');
|
||||
END IF;
|
||||
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;
|
||||
|
||||
-- Trigger to automatically update timestamp_iso when transaction is inserted/updated
|
||||
DROP TRIGGER IF EXISTS trigger_transactions_timestamp_iso ON transactions;
|
||||
CREATE TRIGGER trigger_transactions_timestamp_iso
|
||||
BEFORE INSERT OR UPDATE OF block_number ON transactions
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_transaction_timestamp_iso();
|
||||
|
||||
-- Backfill existing blocks with ISO timestamps
|
||||
UPDATE blocks
|
||||
SET timestamp_iso = to_char(timestamp, 'YYYY-MM-DD"T"HH24:MI:SS"Z"')
|
||||
WHERE timestamp_iso IS NULL;
|
||||
|
||||
-- Backfill existing transactions with ISO timestamps from blocks
|
||||
UPDATE transactions t
|
||||
SET timestamp_iso = to_char(b.timestamp, 'YYYY-MM-DD"T"HH24:MI:SS"Z"')
|
||||
FROM blocks b
|
||||
WHERE t.chain_id = b.chain_id
|
||||
AND t.block_number = b.number
|
||||
AND t.timestamp_iso IS NULL;
|
||||
|
||||
Reference in New Issue
Block a user