Fix category-crawler-jobs store lookup query
- Fix column name from s.dutchie_plus_url to s.dutchie_url - Add availability tracking and product freshness APIs - Add crawl script for sequential dispensary processing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
52
backend/migrations/024_product_availability_tracking.sql
Normal file
52
backend/migrations/024_product_availability_tracking.sql
Normal file
@@ -0,0 +1,52 @@
|
||||
-- Migration 024: Product Availability Tracking
|
||||
-- Adds normalized availability status and transition tracking
|
||||
|
||||
-- Add availability columns to products table
|
||||
ALTER TABLE products ADD COLUMN IF NOT EXISTS availability_status VARCHAR(20) DEFAULT 'unknown';
|
||||
ALTER TABLE products ADD COLUMN IF NOT EXISTS availability_raw JSONB;
|
||||
ALTER TABLE products ADD COLUMN IF NOT EXISTS last_seen_in_stock_at TIMESTAMPTZ;
|
||||
ALTER TABLE products ADD COLUMN IF NOT EXISTS last_seen_out_of_stock_at TIMESTAMPTZ;
|
||||
|
||||
-- Add comment for clarity
|
||||
COMMENT ON COLUMN products.availability_status IS 'Normalized status: in_stock, out_of_stock, limited, unknown';
|
||||
COMMENT ON COLUMN products.availability_raw IS 'Raw availability payload from provider for debugging';
|
||||
COMMENT ON COLUMN products.last_seen_in_stock_at IS 'Last time product was seen in stock';
|
||||
COMMENT ON COLUMN products.last_seen_out_of_stock_at IS 'Last time product was seen out of stock';
|
||||
|
||||
-- Create indexes for availability queries
|
||||
CREATE INDEX IF NOT EXISTS idx_products_availability_status ON products(availability_status);
|
||||
CREATE INDEX IF NOT EXISTS idx_products_availability_by_store ON products(store_id, availability_status) WHERE store_id IS NOT NULL;
|
||||
CREATE INDEX IF NOT EXISTS idx_products_availability_by_dispensary ON products(dispensary_id, availability_status) WHERE dispensary_id IS NOT NULL;
|
||||
|
||||
-- Backfill availability_status from existing in_stock column
|
||||
UPDATE products
|
||||
SET availability_status = CASE
|
||||
WHEN in_stock = true THEN 'in_stock'
|
||||
WHEN in_stock = false THEN 'out_of_stock'
|
||||
ELSE 'unknown'
|
||||
END
|
||||
WHERE availability_status = 'unknown' OR availability_status IS NULL;
|
||||
|
||||
-- Set last_seen_in_stock_at for currently in-stock products
|
||||
UPDATE products
|
||||
SET last_seen_in_stock_at = COALESCE(last_seen_at, updated_at, NOW())
|
||||
WHERE in_stock = true AND last_seen_in_stock_at IS NULL;
|
||||
|
||||
-- Set last_seen_out_of_stock_at for currently out-of-stock products
|
||||
UPDATE products
|
||||
SET last_seen_out_of_stock_at = COALESCE(last_seen_at, updated_at, NOW())
|
||||
WHERE in_stock = false AND last_seen_out_of_stock_at IS NULL;
|
||||
|
||||
-- Add availability tracking to dispensary_crawl_jobs
|
||||
ALTER TABLE dispensary_crawl_jobs ADD COLUMN IF NOT EXISTS in_stock_count INTEGER;
|
||||
ALTER TABLE dispensary_crawl_jobs ADD COLUMN IF NOT EXISTS out_of_stock_count INTEGER;
|
||||
ALTER TABLE dispensary_crawl_jobs ADD COLUMN IF NOT EXISTS limited_count INTEGER;
|
||||
ALTER TABLE dispensary_crawl_jobs ADD COLUMN IF NOT EXISTS unknown_count INTEGER;
|
||||
ALTER TABLE dispensary_crawl_jobs ADD COLUMN IF NOT EXISTS availability_changed_count INTEGER;
|
||||
|
||||
-- Add availability tracking to crawl_jobs (store-based)
|
||||
ALTER TABLE crawl_jobs ADD COLUMN IF NOT EXISTS in_stock_count INTEGER;
|
||||
ALTER TABLE crawl_jobs ADD COLUMN IF NOT EXISTS out_of_stock_count INTEGER;
|
||||
ALTER TABLE crawl_jobs ADD COLUMN IF NOT EXISTS limited_count INTEGER;
|
||||
ALTER TABLE crawl_jobs ADD COLUMN IF NOT EXISTS unknown_count INTEGER;
|
||||
ALTER TABLE crawl_jobs ADD COLUMN IF NOT EXISTS availability_changed_count INTEGER;
|
||||
Reference in New Issue
Block a user