nordabiz/database/migrations/052_gbp_audit_enhanced.sql
Maciej Pienczyn 387bd2f616
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
chore(db): Add migration files 051-055 for enhanced audits
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 11:58:24 +01:00

62 lines
2.9 KiB
SQL

-- Migration 052: Enhanced GBP Audit with Reviews and Extended Attributes
-- Date: 2026-02-06
-- Review management
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS reviews_with_response INTEGER DEFAULT 0;
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS reviews_without_response INTEGER DEFAULT 0;
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS review_response_rate NUMERIC(5,2);
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS avg_review_response_days NUMERIC(5,1);
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS review_sentiment JSONB; -- {"positive": 15, "neutral": 3, "negative": 2}
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS reviews_30d INTEGER DEFAULT 0;
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS review_keywords JSONB; -- ["profesjonalny", "szybko", "polecam"]
-- Content & activity
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS has_posts BOOLEAN;
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS posts_count_30d INTEGER;
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS has_products BOOLEAN;
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS has_qa BOOLEAN;
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS qa_count INTEGER;
-- Enhanced attributes
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS attributes JSONB; -- {"payment": [...], "accessibility": [...], ...}
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS special_hours JSONB;
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS has_special_hours BOOLEAN;
-- NAP consistency
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS nap_consistent BOOLEAN;
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS nap_issues JSONB; -- [{"field": "phone", "gbp": "...", "website": "..."}]
-- Keywords
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS description_keywords JSONB;
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS keyword_density_score INTEGER; -- 0-100
-- Photo analysis
ALTER TABLE gbp_audits ADD COLUMN IF NOT EXISTS photo_categories JSONB; -- {"interior": 3, "exterior": 2, "team": 1, ...}
-- NEW TABLE: Individual reviews tracking
CREATE TABLE IF NOT EXISTS gbp_reviews (
id SERIAL PRIMARY KEY,
company_id INTEGER REFERENCES companies(id) ON DELETE CASCADE,
google_review_id VARCHAR(255),
author_name VARCHAR(255),
rating INTEGER NOT NULL CHECK (rating >= 1 AND rating <= 5),
text TEXT,
publish_time TIMESTAMP,
has_owner_response BOOLEAN DEFAULT FALSE,
owner_response_text TEXT,
owner_response_time TIMESTAMP,
sentiment VARCHAR(20), -- positive, neutral, negative
keywords JSONB,
created_at TIMESTAMP DEFAULT NOW(),
UNIQUE(company_id, google_review_id)
);
CREATE INDEX IF NOT EXISTS idx_gbp_reviews_company ON gbp_reviews(company_id);
CREATE INDEX IF NOT EXISTS idx_gbp_reviews_publish ON gbp_reviews(publish_time);
CREATE INDEX IF NOT EXISTS idx_gbp_reviews_sentiment ON gbp_reviews(sentiment);
-- Permissions
GRANT ALL ON TABLE gbp_audits TO nordabiz_app;
GRANT ALL ON TABLE gbp_reviews TO nordabiz_app;
GRANT USAGE, SELECT ON SEQUENCE gbp_reviews_id_seq TO nordabiz_app;