136_usage_log_image_size_metadata.sql 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. -- Add generated-image billing size audit metadata.
  2. -- `image_size` remains the canonical billing tier used for cost calculation.
  3. ALTER TABLE usage_logs
  4. ADD COLUMN IF NOT EXISTS image_input_size VARCHAR(32);
  5. ALTER TABLE usage_logs
  6. ADD COLUMN IF NOT EXISTS image_output_size VARCHAR(32);
  7. ALTER TABLE usage_logs
  8. ADD COLUMN IF NOT EXISTS image_size_source VARCHAR(16);
  9. ALTER TABLE usage_logs
  10. ADD COLUMN IF NOT EXISTS image_size_breakdown JSONB;
  11. DO $$
  12. BEGIN
  13. IF NOT EXISTS (
  14. SELECT 1
  15. FROM pg_constraint
  16. WHERE conname = 'usage_logs_image_size_source_check'
  17. AND conrelid = 'usage_logs'::regclass
  18. ) THEN
  19. ALTER TABLE usage_logs
  20. ADD CONSTRAINT usage_logs_image_size_source_check
  21. CHECK (
  22. image_size_source IS NULL
  23. OR image_size_source IN ('output', 'input', 'default', 'legacy')
  24. ) NOT VALID;
  25. END IF;
  26. END $$;
  27. DO $$
  28. BEGIN
  29. IF NOT EXISTS (
  30. SELECT 1
  31. FROM pg_constraint
  32. WHERE conname = 'usage_logs_image_billing_size_check'
  33. AND conrelid = 'usage_logs'::regclass
  34. ) THEN
  35. ALTER TABLE usage_logs
  36. ADD CONSTRAINT usage_logs_image_billing_size_check
  37. CHECK (
  38. image_count <= 0
  39. OR (
  40. image_size IS NOT NULL
  41. AND image_size IN ('1K', '2K', '4K', 'mixed')
  42. )
  43. ) NOT VALID;
  44. END IF;
  45. END $$;