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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user