Dual-write tracker patterns in cookie pattern CRUD

CookiePattern Create/Update/Delete/Move now also write the
corresponding TrackerPattern (TrackerType=COOKIE) so the
tracker-pattern-based snapshot picks up the changes and
draft versions are created correctly.

Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
Émile Ré
2026-05-05 17:09:03 +04:00
parent b0610cac24
commit e39fe25237

View File

@@ -1211,6 +1211,26 @@ func (s *Service) CreateCookiePattern(
return fmt.Errorf("cannot insert cookie pattern: %w", err)
}
src := coredata.CookieSourceScript
tp := &coredata.TrackerPattern{
ID: gid.New(scope.GetTenantID(), coredata.TrackerPatternEntityType),
OrganizationID: category.OrganizationID,
CookieBannerID: category.CookieBannerID,
CookieCategoryID: category.ID,
TrackerType: coredata.TrackerTypeCookie,
Pattern: req.Pattern,
MatchType: req.MatchType,
DisplayName: req.DisplayName,
MaxAgeSeconds: req.MaxAgeSeconds,
Description: req.Description,
Source: &src,
CreatedAt: now,
UpdatedAt: now,
}
if _, err := tp.InsertIfNotExists(ctx, tx, scope); err != nil {
return fmt.Errorf("cannot insert tracker pattern: %w", err)
}
if _, err := s.ensureDraftVersionForBanner(ctx, tx, scope, category.CookieBannerID); err != nil {
return fmt.Errorf("cannot ensure draft version: %w", err)
}
@@ -1279,6 +1299,26 @@ func (s *Service) UpdateCookiePattern(
return fmt.Errorf("cannot update cookie pattern: %w", err)
}
var tp coredata.TrackerPattern
if err := tp.LoadByBannerIDTypeAndPattern(ctx, tx, scope, pattern.CookieBannerID, coredata.TrackerTypeCookie, pattern.Pattern); err == nil {
if req.DisplayName != nil {
tp.DisplayName = *req.DisplayName
}
if req.MaxAgeSeconds != nil {
tp.MaxAgeSeconds = *req.MaxAgeSeconds
}
if req.Description != nil {
tp.Description = *req.Description
}
if req.Excluded != nil {
tp.Excluded = *req.Excluded
}
tp.UpdatedAt = time.Now()
if err := tp.Update(ctx, tx, scope); err != nil {
return fmt.Errorf("cannot update tracker pattern: %w", err)
}
}
if !staysExcluded {
if _, err := s.ensureDraftVersionForBanner(ctx, tx, scope, pattern.CookieBannerID); err != nil {
return fmt.Errorf("cannot ensure draft version: %w", err)
@@ -1317,6 +1357,13 @@ func (s *Service) DeleteCookiePattern(
return fmt.Errorf("cannot delete cookie pattern: %w", err)
}
var tp coredata.TrackerPattern
if err := tp.LoadByBannerIDTypeAndPattern(ctx, tx, scope, pattern.CookieBannerID, coredata.TrackerTypeCookie, pattern.Pattern); err == nil {
if err := tp.Delete(ctx, tx, scope); err != nil {
return fmt.Errorf("cannot delete tracker pattern: %w", err)
}
}
if !wasExcluded {
if _, err := s.ensureDraftVersionForBanner(ctx, tx, scope, pattern.CookieBannerID); err != nil {
return fmt.Errorf("cannot ensure draft version: %w", err)
@@ -1375,6 +1422,15 @@ func (s *Service) MoveCookiePatternToCategory(
return fmt.Errorf("cannot update cookie pattern: %w", err)
}
var tp coredata.TrackerPattern
if err := tp.LoadByBannerIDTypeAndPattern(ctx, tx, scope, pattern.CookieBannerID, coredata.TrackerTypeCookie, pattern.Pattern); err == nil {
tp.CookieCategoryID = target.ID
tp.UpdatedAt = time.Now()
if err := tp.Update(ctx, tx, scope); err != nil {
return fmt.Errorf("cannot update tracker pattern: %w", err)
}
}
var banner coredata.CookieBanner
if err := banner.LoadByID(ctx, tx, scope, pattern.CookieBannerID); err != nil {
return fmt.Errorf("cannot load cookie banner: %w", err)