From ed41b354b08041466d635f3317ca2ef1f0e7184b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89mile=20R=C3=A9?= Date: Fri, 15 May 2026 11:02:31 +0400 Subject: [PATCH] Allow domains to belong to multiple third parties MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change the unique constraint on common_third_party_domains from (domain) to (common_third_party_id, domain) so a domain like google.com can be associated with Google, Google Analytics, Google AdSense, etc. Also fix Beamer domain (was hotjar.com, now getbeamer.com) and preserve the original url.Parse error in pgconn DSN parsing. Signed-off-by: Émile Ré --- cmd/proboctl/CHANGELOG.md | 2 ++ pkg/coredata/common_third_party_domain.go | 5 ++--- pkg/coredata/migrations/20260513T105453Z.sql | 4 ++-- pkg/proboctl/pgconn/pgconn.go | 2 +- pkg/proboctl/seed/common-third-parties/data/data.json | 2 +- 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/cmd/proboctl/CHANGELOG.md b/cmd/proboctl/CHANGELOG.md index 825c32f0d..1933e2634 100644 --- a/cmd/proboctl/CHANGELOG.md +++ b/cmd/proboctl/CHANGELOG.md @@ -1 +1,3 @@ # Changelog + +All notable changes to the `proboctl` CLI will be documented in this file. diff --git a/pkg/coredata/common_third_party_domain.go b/pkg/coredata/common_third_party_domain.go index a1056dcc1..e9406144a 100644 --- a/pkg/coredata/common_third_party_domain.go +++ b/pkg/coredata/common_third_party_domain.go @@ -136,10 +136,9 @@ INSERT INTO common_third_party_domains ( @created_at, @updated_at ) -ON CONFLICT (domain) DO UPDATE +ON CONFLICT (common_third_party_id, domain) DO UPDATE SET - common_third_party_id = EXCLUDED.common_third_party_id, - updated_at = EXCLUDED.updated_at + updated_at = EXCLUDED.updated_at RETURNING (xmax = 0) AS inserted ` diff --git a/pkg/coredata/migrations/20260513T105453Z.sql b/pkg/coredata/migrations/20260513T105453Z.sql index b7a47e1f8..94874a34a 100644 --- a/pkg/coredata/migrations/20260513T105453Z.sql +++ b/pkg/coredata/migrations/20260513T105453Z.sql @@ -23,8 +23,8 @@ CREATE TABLE common_third_party_domains ( updated_at TIMESTAMP WITH TIME ZONE NOT NULL ); -CREATE UNIQUE INDEX common_third_party_domains_domain_key - ON common_third_party_domains (domain); +CREATE UNIQUE INDEX common_third_party_domains_party_domain_key + ON common_third_party_domains (common_third_party_id, domain); CREATE INDEX idx_common_third_party_domains_third_party ON common_third_party_domains (common_third_party_id); diff --git a/pkg/proboctl/pgconn/pgconn.go b/pkg/proboctl/pgconn/pgconn.go index ca094e079..dbb26c1d5 100644 --- a/pkg/proboctl/pgconn/pgconn.go +++ b/pkg/proboctl/pgconn/pgconn.go @@ -25,7 +25,7 @@ import ( func NewPgClientFromDSN(dsn string) (*pg.Client, error) { u, err := url.Parse(dsn) if err != nil { - return nil, fmt.Errorf("cannot parse DSN (check URL format)") + return nil, fmt.Errorf("cannot parse DSN: %w", err) } var opts []pg.Option diff --git a/pkg/proboctl/seed/common-third-parties/data/data.json b/pkg/proboctl/seed/common-third-parties/data/data.json index 4a60cd62f..368b22159 100644 --- a/pkg/proboctl/seed/common-third-parties/data/data.json +++ b/pkg/proboctl/seed/common-third-parties/data/data.json @@ -761,7 +761,7 @@ "name": "Beamer", "category": "MARKETING", "domains": [ - "hotjar.com" + "getbeamer.com" ], "websiteUrl": "https://www.getbeamer.com", "legalName": "Beamer, Inc.",