Remove cookie_patterns legacy, migrate to tracker_patterns
Delete coredata.CookiePattern and all associated CRUD methods, rename shared types (CookiePatternOrderField, CookiePatternFilter, CookiePatternMatchType) to TrackerPattern equivalents, and migrate all API surfaces (GraphQL, MCP, CLI, n8n) to tracker_pattern naming. The worker was already migrated in the base branch; this commit completes the removal by dropping the old GraphQL schema/resolvers, service methods, CLI commands, and n8n operations that operated on the legacy cookie_patterns table. Signed-off-by: Émile Ré <emile@getprobo.com>
This commit is contained in:
@@ -177,54 +177,18 @@ func (r *cookieBannerResolver) ConsentRecords(ctx context.Context, obj *types.Co
|
||||
return types.NewCookieConsentRecordConnection(p, r, obj.ID, coredataFilter), nil
|
||||
}
|
||||
|
||||
// UncategorisedPatterns is the resolver for the uncategorisedPatterns field.
|
||||
func (r *cookieBannerResolver) UncategorisedPatterns(ctx context.Context, obj *types.CookieBanner, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.CookiePatternOrderBy, filter *types.CookiePatternFilter) (*types.CookiePatternConnection, error) {
|
||||
if err := r.authorize(ctx, obj.ID, probo.ActionCookiePatternList); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pageOrderBy := page.OrderBy[coredata.CookiePatternOrderField]{
|
||||
Field: coredata.CookiePatternOrderFieldName,
|
||||
Direction: page.OrderDirectionAsc,
|
||||
}
|
||||
if orderBy != nil {
|
||||
pageOrderBy = page.OrderBy[coredata.CookiePatternOrderField]{
|
||||
Field: orderBy.Field,
|
||||
Direction: orderBy.Direction,
|
||||
}
|
||||
}
|
||||
|
||||
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
|
||||
scope := coredata.NewScopeFromObjectID(obj.ID)
|
||||
|
||||
coredataFilter := coredata.NewCookiePatternFilter(nil, nil, nil)
|
||||
if filter != nil {
|
||||
coredataFilter = coredataFilter.WithQuery(filter.Query).WithSource(filter.Source)
|
||||
}
|
||||
|
||||
patterns, err := r.cookieBanner.ListUncategorisedCookiePatterns(ctx, scope, obj.ID, cursor, coredataFilter)
|
||||
if err != nil {
|
||||
r.logger.ErrorCtx(ctx, "cannot list uncategorised cookie patterns", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
p := page.NewPage(patterns, cursor)
|
||||
|
||||
return types.NewCookiePatternConnectionWithFilter(p, r, obj.ID, coredataFilter), nil
|
||||
}
|
||||
|
||||
// UncategorisedTrackerPatterns is the resolver for the uncategorisedTrackerPatterns field.
|
||||
func (r *cookieBannerResolver) UncategorisedTrackerPatterns(ctx context.Context, obj *types.CookieBanner, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.TrackerPatternOrderBy, filter *types.TrackerPatternFilter) (*types.TrackerPatternConnection, error) {
|
||||
if err := r.authorize(ctx, obj.ID, probo.ActionCookiePatternList); err != nil {
|
||||
if err := r.authorize(ctx, obj.ID, probo.ActionTrackerPatternList); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pageOrderBy := page.OrderBy[coredata.CookiePatternOrderField]{
|
||||
Field: coredata.CookiePatternOrderFieldName,
|
||||
pageOrderBy := page.OrderBy[coredata.TrackerPatternOrderField]{
|
||||
Field: coredata.TrackerPatternOrderFieldName,
|
||||
Direction: page.OrderDirectionAsc,
|
||||
}
|
||||
if orderBy != nil {
|
||||
pageOrderBy = page.OrderBy[coredata.CookiePatternOrderField]{
|
||||
pageOrderBy = page.OrderBy[coredata.TrackerPatternOrderField]{
|
||||
Field: orderBy.Field,
|
||||
Direction: orderBy.Direction,
|
||||
}
|
||||
@@ -233,7 +197,7 @@ func (r *cookieBannerResolver) UncategorisedTrackerPatterns(ctx context.Context,
|
||||
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
|
||||
scope := coredata.NewScopeFromObjectID(obj.ID)
|
||||
|
||||
coredataFilter := coredata.NewCookiePatternFilter(nil, nil, nil)
|
||||
coredataFilter := coredata.NewTrackerPatternFilter(nil, nil, nil)
|
||||
if filter != nil {
|
||||
coredataFilter = coredataFilter.WithQuery(filter.Query).WithSource(filter.Source)
|
||||
}
|
||||
@@ -338,18 +302,18 @@ func (r *cookieCategoryResolver) CookieBanner(ctx context.Context, obj *types.Co
|
||||
return types.NewCookieBanner(banner), nil
|
||||
}
|
||||
|
||||
// CookiePatterns is the resolver for the cookiePatterns field.
|
||||
func (r *cookieCategoryResolver) CookiePatterns(ctx context.Context, obj *types.CookieCategory, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.CookiePatternOrderBy) (*types.CookiePatternConnection, error) {
|
||||
if err := r.authorize(ctx, obj.ID, probo.ActionCookiePatternList); err != nil {
|
||||
// TrackerPatterns is the resolver for the trackerPatterns field.
|
||||
func (r *cookieCategoryResolver) TrackerPatterns(ctx context.Context, obj *types.CookieCategory, first *int, after *page.CursorKey, last *int, before *page.CursorKey, orderBy *types.TrackerPatternOrderBy) (*types.TrackerPatternConnection, error) {
|
||||
if err := r.authorize(ctx, obj.ID, probo.ActionTrackerPatternList); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
pageOrderBy := page.OrderBy[coredata.CookiePatternOrderField]{
|
||||
Field: coredata.CookiePatternOrderFieldCreatedAt,
|
||||
pageOrderBy := page.OrderBy[coredata.TrackerPatternOrderField]{
|
||||
Field: coredata.TrackerPatternOrderFieldCreatedAt,
|
||||
Direction: page.OrderDirectionAsc,
|
||||
}
|
||||
if orderBy != nil {
|
||||
pageOrderBy = page.OrderBy[coredata.CookiePatternOrderField]{
|
||||
pageOrderBy = page.OrderBy[coredata.TrackerPatternOrderField]{
|
||||
Field: orderBy.Field,
|
||||
Direction: orderBy.Direction,
|
||||
}
|
||||
@@ -358,15 +322,15 @@ func (r *cookieCategoryResolver) CookiePatterns(ctx context.Context, obj *types.
|
||||
cursor := types.NewCursor(first, after, last, before, pageOrderBy)
|
||||
scope := coredata.NewScopeFromObjectID(obj.ID)
|
||||
|
||||
patterns, err := r.cookieBanner.ListCookiePatternsForCategory(ctx, scope, obj.ID, cursor)
|
||||
patterns, err := r.cookieBanner.ListTrackerPatternsForCategory(ctx, scope, obj.ID, cursor)
|
||||
if err != nil {
|
||||
r.logger.ErrorCtx(ctx, "cannot list cookie patterns", log.Error(err))
|
||||
r.logger.ErrorCtx(ctx, "cannot list tracker patterns", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
p := page.NewPage(patterns, cursor)
|
||||
|
||||
return types.NewCookiePatternConnection(p, r, obj.ID), nil
|
||||
return types.NewTrackerPatternConnection(p, r, obj.ID), nil
|
||||
}
|
||||
|
||||
// Permission is the resolver for the permission field.
|
||||
@@ -391,74 +355,6 @@ func (r *cookieCategoryConnectionResolver) TotalCount(ctx context.Context, obj *
|
||||
return count, nil
|
||||
}
|
||||
|
||||
// CookieCategory is the resolver for the cookieCategory field.
|
||||
func (r *cookiePatternResolver) CookieCategory(ctx context.Context, obj *types.CookiePattern) (*types.CookieCategory, error) {
|
||||
if err := r.authorize(ctx, obj.CookieCategory.ID, probo.ActionCookieCategoryGet); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
loaders := dataloader.FromContext(ctx)
|
||||
|
||||
category, err := loaders.CookieCategory.Load(ctx, obj.CookieCategory.ID)
|
||||
if err != nil {
|
||||
if errors.Is(err, coredata.ErrResourceNotFound) || errors.Is(err, dataloadgen.ErrNotFound) {
|
||||
return nil, nil
|
||||
}
|
||||
r.logger.ErrorCtx(ctx, "cannot get cookie category", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
return types.NewCookieCategory(category), nil
|
||||
}
|
||||
|
||||
// CookieCount is the resolver for the cookieCount field.
|
||||
func (r *cookiePatternResolver) CookieCount(ctx context.Context, obj *types.CookiePattern) (int, error) {
|
||||
if err := r.authorize(ctx, obj.ID, probo.ActionCookiePatternGet); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
scope := coredata.NewScopeFromObjectID(obj.ID)
|
||||
|
||||
count, err := r.cookieBanner.CountCookiesForPattern(ctx, scope, obj.ID)
|
||||
if err != nil {
|
||||
r.logger.ErrorCtx(ctx, "cannot count cookies for pattern", log.Error(err))
|
||||
return 0, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
return count, nil
|
||||
}
|
||||
|
||||
// Permission is the resolver for the permission field.
|
||||
func (r *cookiePatternResolver) Permission(ctx context.Context, obj *types.CookiePattern, action string) (bool, error) {
|
||||
return r.Resolver.Permission(ctx, obj, action)
|
||||
}
|
||||
|
||||
// TotalCount is the resolver for the totalCount field.
|
||||
func (r *cookiePatternConnectionResolver) TotalCount(ctx context.Context, obj *types.CookiePatternConnection) (int, error) {
|
||||
if err := r.authorize(ctx, obj.ParentID, probo.ActionCookiePatternList); err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
||||
scope := coredata.NewScopeFromObjectID(obj.ParentID)
|
||||
|
||||
switch obj.Resolver.(type) {
|
||||
case *cookieBannerResolver:
|
||||
count, err := r.cookieBanner.CountUncategorisedCookiePatterns(ctx, scope, obj.ParentID, obj.Filter)
|
||||
if err != nil {
|
||||
r.logger.ErrorCtx(ctx, "cannot count uncategorised cookie patterns", log.Error(err))
|
||||
return 0, gqlutils.Internal(ctx)
|
||||
}
|
||||
return count, nil
|
||||
default:
|
||||
count, err := r.cookieBanner.CountCookiePatternsForCategory(ctx, scope, obj.ParentID)
|
||||
if err != nil {
|
||||
r.logger.ErrorCtx(ctx, "cannot count cookie patterns", log.Error(err))
|
||||
return 0, gqlutils.Internal(ctx)
|
||||
}
|
||||
return count, nil
|
||||
}
|
||||
}
|
||||
|
||||
// CreateCookieBanner is the resolver for the createCookieBanner field.
|
||||
func (r *mutationResolver) CreateCookieBanner(ctx context.Context, input types.CreateCookieBannerInput) (*types.CreateCookieBannerPayload, error) {
|
||||
if err := r.authorize(ctx, input.OrganizationID, probo.ActionCookieBannerCreate); err != nil {
|
||||
@@ -819,180 +715,6 @@ func (r *mutationResolver) ReorderCookieCategory(ctx context.Context, input type
|
||||
}, nil
|
||||
}
|
||||
|
||||
// CreateCookiePattern is the resolver for the createCookiePattern field.
|
||||
func (r *mutationResolver) CreateCookiePattern(ctx context.Context, input types.CreateCookiePatternInput) (*types.CreateCookiePatternPayload, error) {
|
||||
if err := r.authorize(ctx, input.CookieCategoryID, probo.ActionCookiePatternCreate); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
scope := coredata.NewScopeFromObjectID(input.CookieCategoryID)
|
||||
|
||||
pattern, err := r.cookieBanner.CreateCookiePattern(
|
||||
ctx,
|
||||
scope,
|
||||
cookiebanner.CreateCookiePatternRequest{
|
||||
CookieCategoryID: input.CookieCategoryID,
|
||||
Pattern: input.Pattern,
|
||||
MatchType: input.MatchType,
|
||||
DisplayName: input.DisplayName,
|
||||
MaxAgeSeconds: input.MaxAgeSeconds,
|
||||
Description: input.Description,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
if errors.Is(err, cookiebanner.ErrPatternAlreadyExists) {
|
||||
return nil, gqlutils.Conflict(ctx, err)
|
||||
}
|
||||
if errors.Is(err, cookiebanner.ErrCategoryNotFound) {
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
}
|
||||
if validationErrors, ok := errors.AsType[validator.ValidationErrors](err); ok {
|
||||
return nil, gqlutils.InvalidValidationErrors(ctx, validationErrors)
|
||||
}
|
||||
r.logger.ErrorCtx(ctx, "cannot create cookie pattern", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
bannerScope := coredata.NewScopeFromObjectID(pattern.CookieBannerID)
|
||||
banner, err := r.cookieBanner.GetCookieBanner(ctx, bannerScope, pattern.CookieBannerID)
|
||||
if err != nil {
|
||||
r.logger.ErrorCtx(ctx, "cannot get cookie banner", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
return &types.CreateCookiePatternPayload{
|
||||
CookiePatternEdge: types.NewCookiePatternEdge(pattern, coredata.CookiePatternOrderFieldCreatedAt),
|
||||
CookieBanner: types.NewCookieBanner(banner),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// UpdateCookiePattern is the resolver for the updateCookiePattern field.
|
||||
func (r *mutationResolver) UpdateCookiePattern(ctx context.Context, input types.UpdateCookiePatternInput) (*types.UpdateCookiePatternPayload, error) {
|
||||
if err := r.authorize(ctx, input.CookiePatternID, probo.ActionCookiePatternUpdate); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
scope := coredata.NewScopeFromObjectID(input.CookiePatternID)
|
||||
|
||||
pattern, err := r.cookieBanner.UpdateCookiePattern(
|
||||
ctx,
|
||||
scope,
|
||||
cookiebanner.UpdateCookiePatternRequest{
|
||||
CookiePatternID: input.CookiePatternID,
|
||||
DisplayName: input.DisplayName,
|
||||
MaxAgeSeconds: gqlutils.UnwrapOmittable(input.MaxAgeSeconds),
|
||||
Description: input.Description,
|
||||
Excluded: input.Excluded,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
if errors.Is(err, cookiebanner.ErrCookiePatternNotFound) {
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
}
|
||||
if validationErrors, ok := errors.AsType[validator.ValidationErrors](err); ok {
|
||||
return nil, gqlutils.InvalidValidationErrors(ctx, validationErrors)
|
||||
}
|
||||
r.logger.ErrorCtx(ctx, "cannot update cookie pattern", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
bannerScope := coredata.NewScopeFromObjectID(pattern.CookieBannerID)
|
||||
banner, err := r.cookieBanner.GetCookieBanner(ctx, bannerScope, pattern.CookieBannerID)
|
||||
if err != nil {
|
||||
r.logger.ErrorCtx(ctx, "cannot get cookie banner", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
return &types.UpdateCookiePatternPayload{
|
||||
CookiePattern: types.NewCookiePattern(pattern),
|
||||
CookieBanner: types.NewCookieBanner(banner),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// DeleteCookiePattern is the resolver for the deleteCookiePattern field.
|
||||
func (r *mutationResolver) DeleteCookiePattern(ctx context.Context, input types.DeleteCookiePatternInput) (*types.DeleteCookiePatternPayload, error) {
|
||||
if err := r.authorize(ctx, input.CookiePatternID, probo.ActionCookiePatternDelete); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
scope := coredata.NewScopeFromObjectID(input.CookiePatternID)
|
||||
|
||||
pattern, err := r.cookieBanner.GetCookiePattern(ctx, scope, input.CookiePatternID)
|
||||
if err != nil {
|
||||
if errors.Is(err, cookiebanner.ErrCookieNotFound) {
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
}
|
||||
r.logger.ErrorCtx(ctx, "cannot get cookie pattern", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
bannerID := pattern.CookieBannerID
|
||||
|
||||
err = r.cookieBanner.DeleteCookiePattern(ctx, scope, input.CookiePatternID)
|
||||
if err != nil {
|
||||
if errors.Is(err, cookiebanner.ErrCookiePatternNotFound) {
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
}
|
||||
r.logger.ErrorCtx(ctx, "cannot delete cookie pattern", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
bannerScope := coredata.NewScopeFromObjectID(bannerID)
|
||||
banner, err := r.cookieBanner.GetCookieBanner(ctx, bannerScope, bannerID)
|
||||
if err != nil {
|
||||
r.logger.ErrorCtx(ctx, "cannot get cookie banner", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
return &types.DeleteCookiePatternPayload{
|
||||
DeletedCookiePatternID: input.CookiePatternID,
|
||||
CookieBanner: types.NewCookieBanner(banner),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// MoveCookiePatternToCategory is the resolver for the moveCookiePatternToCategory field.
|
||||
func (r *mutationResolver) MoveCookiePatternToCategory(ctx context.Context, input types.MoveCookiePatternToCategoryInput) (*types.MoveCookiePatternToCategoryPayload, error) {
|
||||
if err := r.authorize(ctx, input.CookiePatternID, probo.ActionCookiePatternUpdate); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if err := r.authorize(ctx, input.TargetCookieCategoryID, probo.ActionCookieCategoryUpdate); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
scope := coredata.NewScopeFromObjectID(input.CookiePatternID)
|
||||
|
||||
result, err := r.cookieBanner.MoveCookiePatternToCategory(
|
||||
ctx,
|
||||
scope,
|
||||
cookiebanner.MoveCookiePatternToCategoryRequest{
|
||||
CookiePatternID: input.CookiePatternID,
|
||||
TargetCookieCategoryID: input.TargetCookieCategoryID,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
switch {
|
||||
case errors.Is(err, cookiebanner.ErrCategoryNotFound):
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
case errors.Is(err, cookiebanner.ErrCookiePatternNotFound):
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
case errors.Is(err, cookiebanner.ErrCategoriesBannerMismatch):
|
||||
return nil, gqlutils.NotFoundf(ctx, "cookie pattern or target category not found")
|
||||
default:
|
||||
if validationErrors, ok := errors.AsType[validator.ValidationErrors](err); ok {
|
||||
return nil, gqlutils.InvalidValidationErrors(ctx, validationErrors)
|
||||
}
|
||||
r.logger.ErrorCtx(ctx, "cannot move cookie pattern to category", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
}
|
||||
|
||||
return &types.MoveCookiePatternToCategoryPayload{
|
||||
CookiePattern: types.NewCookiePattern(result.CookiePattern),
|
||||
CookieBanner: types.NewCookieBanner(result.Banner),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// UpsertCookieBannerTranslation is the resolver for the upsertCookieBannerTranslation field.
|
||||
func (r *mutationResolver) UpsertCookieBannerTranslation(ctx context.Context, input types.UpsertCookieBannerTranslationInput) (*types.UpsertCookieBannerTranslationPayload, error) {
|
||||
if err := r.authorize(ctx, input.CookieBannerID, probo.ActionCookieBannerUpdate); err != nil {
|
||||
@@ -1033,9 +755,64 @@ func (r *mutationResolver) UpsertCookieBannerTranslation(ctx context.Context, in
|
||||
}, nil
|
||||
}
|
||||
|
||||
// CreateTrackerPattern is the resolver for the createTrackerPattern field.
|
||||
func (r *mutationResolver) CreateTrackerPattern(ctx context.Context, input types.CreateTrackerPatternInput) (*types.CreateTrackerPatternPayload, error) {
|
||||
if err := r.authorize(ctx, input.CookieCategoryID, probo.ActionTrackerPatternCreate); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
scope := coredata.NewScopeFromObjectID(input.CookieCategoryID)
|
||||
|
||||
trackerType := coredata.TrackerTypeCookie
|
||||
if input.TrackerType != nil {
|
||||
trackerType = *input.TrackerType
|
||||
}
|
||||
|
||||
var description string
|
||||
if input.Description != nil {
|
||||
description = *input.Description
|
||||
}
|
||||
|
||||
pattern, err := r.cookieBanner.CreateTrackerPattern(
|
||||
ctx,
|
||||
scope,
|
||||
cookiebanner.CreateTrackerPatternRequest{
|
||||
CookieCategoryID: input.CookieCategoryID,
|
||||
TrackerType: trackerType,
|
||||
Pattern: input.Pattern,
|
||||
MatchType: input.MatchType,
|
||||
DisplayName: input.DisplayName,
|
||||
MaxAgeSeconds: input.MaxAgeSeconds,
|
||||
Description: description,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
if errors.Is(err, cookiebanner.ErrPatternAlreadyExists) {
|
||||
return nil, gqlutils.Conflictf(ctx, "a pattern with this name already exists in this banner")
|
||||
}
|
||||
if validationErrors, ok := errors.AsType[validator.ValidationErrors](err); ok {
|
||||
return nil, gqlutils.InvalidValidationErrors(ctx, validationErrors)
|
||||
}
|
||||
r.logger.ErrorCtx(ctx, "cannot create tracker pattern", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
bannerScope := coredata.NewScopeFromObjectID(pattern.CookieBannerID)
|
||||
banner, err := r.cookieBanner.GetCookieBanner(ctx, bannerScope, pattern.CookieBannerID)
|
||||
if err != nil {
|
||||
r.logger.ErrorCtx(ctx, "cannot get cookie banner", log.Error(err))
|
||||
return nil, gqlutils.Internal(ctx)
|
||||
}
|
||||
|
||||
return &types.CreateTrackerPatternPayload{
|
||||
TrackerPatternEdge: types.NewTrackerPatternEdge(pattern, coredata.TrackerPatternOrderFieldCreatedAt),
|
||||
CookieBanner: types.NewCookieBanner(banner),
|
||||
}, nil
|
||||
}
|
||||
|
||||
// UpdateTrackerPattern is the resolver for the updateTrackerPattern field.
|
||||
func (r *mutationResolver) UpdateTrackerPattern(ctx context.Context, input types.UpdateTrackerPatternInput) (*types.UpdateTrackerPatternPayload, error) {
|
||||
if err := r.authorize(ctx, input.TrackerPatternID, probo.ActionCookiePatternUpdate); err != nil {
|
||||
if err := r.authorize(ctx, input.TrackerPatternID, probo.ActionTrackerPatternUpdate); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -1053,7 +830,7 @@ func (r *mutationResolver) UpdateTrackerPattern(ctx context.Context, input types
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
if errors.Is(err, cookiebanner.ErrCookiePatternNotFound) {
|
||||
if errors.Is(err, cookiebanner.ErrTrackerPatternNotFound) {
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
}
|
||||
r.logger.ErrorCtx(ctx, "cannot update tracker pattern", log.Error(err))
|
||||
@@ -1075,7 +852,7 @@ func (r *mutationResolver) UpdateTrackerPattern(ctx context.Context, input types
|
||||
|
||||
// DeleteTrackerPattern is the resolver for the deleteTrackerPattern field.
|
||||
func (r *mutationResolver) DeleteTrackerPattern(ctx context.Context, input types.DeleteTrackerPatternInput) (*types.DeleteTrackerPatternPayload, error) {
|
||||
if err := r.authorize(ctx, input.TrackerPatternID, probo.ActionCookiePatternDelete); err != nil {
|
||||
if err := r.authorize(ctx, input.TrackerPatternID, probo.ActionTrackerPatternDelete); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -1083,7 +860,7 @@ func (r *mutationResolver) DeleteTrackerPattern(ctx context.Context, input types
|
||||
|
||||
pattern, err := r.cookieBanner.GetTrackerPattern(ctx, scope, input.TrackerPatternID)
|
||||
if err != nil {
|
||||
if errors.Is(err, cookiebanner.ErrCookiePatternNotFound) {
|
||||
if errors.Is(err, cookiebanner.ErrTrackerPatternNotFound) {
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
}
|
||||
r.logger.ErrorCtx(ctx, "cannot get tracker pattern", log.Error(err))
|
||||
@@ -1093,7 +870,7 @@ func (r *mutationResolver) DeleteTrackerPattern(ctx context.Context, input types
|
||||
bannerID := pattern.CookieBannerID
|
||||
|
||||
if err := r.cookieBanner.DeleteTrackerPattern(ctx, scope, input.TrackerPatternID); err != nil {
|
||||
if errors.Is(err, cookiebanner.ErrCookiePatternNotFound) {
|
||||
if errors.Is(err, cookiebanner.ErrTrackerPatternNotFound) {
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
}
|
||||
r.logger.ErrorCtx(ctx, "cannot delete tracker pattern", log.Error(err))
|
||||
@@ -1115,7 +892,7 @@ func (r *mutationResolver) DeleteTrackerPattern(ctx context.Context, input types
|
||||
|
||||
// MoveTrackerPatternToCategory is the resolver for the moveTrackerPatternToCategory field.
|
||||
func (r *mutationResolver) MoveTrackerPatternToCategory(ctx context.Context, input types.MoveTrackerPatternToCategoryInput) (*types.MoveTrackerPatternToCategoryPayload, error) {
|
||||
if err := r.authorize(ctx, input.TrackerPatternID, probo.ActionCookiePatternUpdate); err != nil {
|
||||
if err := r.authorize(ctx, input.TrackerPatternID, probo.ActionTrackerPatternUpdate); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -1137,7 +914,7 @@ func (r *mutationResolver) MoveTrackerPatternToCategory(ctx context.Context, inp
|
||||
switch {
|
||||
case errors.Is(err, cookiebanner.ErrCategoryNotFound):
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
case errors.Is(err, cookiebanner.ErrCookiePatternNotFound):
|
||||
case errors.Is(err, cookiebanner.ErrTrackerPatternNotFound):
|
||||
return nil, gqlutils.NotFound(ctx, err)
|
||||
case errors.Is(err, cookiebanner.ErrCategoriesBannerMismatch):
|
||||
return nil, gqlutils.NotFoundf(ctx, "tracker pattern or target category not found")
|
||||
@@ -1195,7 +972,7 @@ func (r *trackerPatternResolver) Permission(ctx context.Context, obj *types.Trac
|
||||
func (r *trackerPatternConnectionResolver) TotalCount(ctx context.Context, obj *types.TrackerPatternConnection) (int, error) {
|
||||
scope := coredata.NewScopeFromObjectID(obj.ParentID)
|
||||
|
||||
filter := coredata.NewCookiePatternFilter(nil, nil, nil)
|
||||
filter := coredata.NewTrackerPatternFilter(nil, nil, nil)
|
||||
if obj.Filter != nil {
|
||||
filter = filter.WithQuery(obj.Filter.Query).WithSource(obj.Filter.Source)
|
||||
}
|
||||
@@ -1230,14 +1007,6 @@ func (r *Resolver) CookieCategoryConnection() schema.CookieCategoryConnectionRes
|
||||
return &cookieCategoryConnectionResolver{r}
|
||||
}
|
||||
|
||||
// CookiePattern returns schema.CookiePatternResolver implementation.
|
||||
func (r *Resolver) CookiePattern() schema.CookiePatternResolver { return &cookiePatternResolver{r} }
|
||||
|
||||
// CookiePatternConnection returns schema.CookiePatternConnectionResolver implementation.
|
||||
func (r *Resolver) CookiePatternConnection() schema.CookiePatternConnectionResolver {
|
||||
return &cookiePatternConnectionResolver{r}
|
||||
}
|
||||
|
||||
// TrackerPattern returns schema.TrackerPatternResolver implementation.
|
||||
func (r *Resolver) TrackerPattern() schema.TrackerPatternResolver { return &trackerPatternResolver{r} }
|
||||
|
||||
@@ -1251,7 +1020,5 @@ type cookieBannerConnectionResolver struct{ *Resolver }
|
||||
type cookieBannerVersionResolver struct{ *Resolver }
|
||||
type cookieCategoryResolver struct{ *Resolver }
|
||||
type cookieCategoryConnectionResolver struct{ *Resolver }
|
||||
type cookiePatternResolver struct{ *Resolver }
|
||||
type cookiePatternConnectionResolver struct{ *Resolver }
|
||||
type trackerPatternResolver struct{ *Resolver }
|
||||
type trackerPatternConnectionResolver struct{ *Resolver }
|
||||
|
||||
@@ -151,15 +151,6 @@ type CookieBanner implements Node {
|
||||
filter: CookieConsentRecordFilter
|
||||
): CookieConsentRecordConnection @goField(forceResolver: true)
|
||||
|
||||
uncategorisedPatterns(
|
||||
first: Int
|
||||
after: CursorKey
|
||||
last: Int
|
||||
before: CursorKey
|
||||
orderBy: CookiePatternOrder
|
||||
filter: CookiePatternFilter
|
||||
): CookiePatternConnection @goField(forceResolver: true)
|
||||
|
||||
uncategorisedTrackerPatterns(
|
||||
first: Int
|
||||
after: CursorKey
|
||||
@@ -194,13 +185,13 @@ type CookieCategory implements Node {
|
||||
gcmConsentTypes: [String!]!
|
||||
posthogConsent: Boolean!
|
||||
|
||||
cookiePatterns(
|
||||
trackerPatterns(
|
||||
first: Int
|
||||
after: CursorKey
|
||||
last: Int
|
||||
before: CursorKey
|
||||
orderBy: CookiePatternOrder
|
||||
): CookiePatternConnection @goField(forceResolver: true)
|
||||
orderBy: TrackerPatternOrder
|
||||
): TrackerPatternConnection @goField(forceResolver: true)
|
||||
|
||||
createdAt: Datetime!
|
||||
updatedAt: Datetime!
|
||||
@@ -208,98 +199,52 @@ type CookieCategory implements Node {
|
||||
permission(action: String!): Boolean! @goField(forceResolver: true)
|
||||
}
|
||||
|
||||
enum CookiePatternMatchType
|
||||
enum TrackerPatternMatchType
|
||||
@goModel(
|
||||
model: "go.probo.inc/probo/pkg/coredata.CookiePatternMatchType"
|
||||
model: "go.probo.inc/probo/pkg/coredata.TrackerPatternMatchType"
|
||||
) {
|
||||
EXACT
|
||||
@goEnum(
|
||||
value: "go.probo.inc/probo/pkg/coredata.CookiePatternMatchTypeExact"
|
||||
value: "go.probo.inc/probo/pkg/coredata.TrackerPatternMatchTypeExact"
|
||||
)
|
||||
PREFIX
|
||||
@goEnum(
|
||||
value: "go.probo.inc/probo/pkg/coredata.CookiePatternMatchTypePrefix"
|
||||
value: "go.probo.inc/probo/pkg/coredata.TrackerPatternMatchTypePrefix"
|
||||
)
|
||||
}
|
||||
|
||||
enum CookiePatternOrderField
|
||||
enum TrackerPatternOrderField
|
||||
@goModel(
|
||||
model: "go.probo.inc/probo/pkg/coredata.CookiePatternOrderField"
|
||||
model: "go.probo.inc/probo/pkg/coredata.TrackerPatternOrderField"
|
||||
) {
|
||||
CREATED_AT
|
||||
@goEnum(
|
||||
value: "go.probo.inc/probo/pkg/coredata.CookiePatternOrderFieldCreatedAt"
|
||||
value: "go.probo.inc/probo/pkg/coredata.TrackerPatternOrderFieldCreatedAt"
|
||||
)
|
||||
NAME
|
||||
@goEnum(
|
||||
value: "go.probo.inc/probo/pkg/coredata.CookiePatternOrderFieldName"
|
||||
value: "go.probo.inc/probo/pkg/coredata.TrackerPatternOrderFieldName"
|
||||
)
|
||||
LAST_MATCHED_AT
|
||||
@goEnum(
|
||||
value: "go.probo.inc/probo/pkg/coredata.CookiePatternOrderFieldLastMatchedAt"
|
||||
value: "go.probo.inc/probo/pkg/coredata.TrackerPatternOrderFieldLastMatchedAt"
|
||||
)
|
||||
UPDATED_AT
|
||||
@goEnum(
|
||||
value: "go.probo.inc/probo/pkg/coredata.CookiePatternOrderFieldUpdatedAt"
|
||||
value: "go.probo.inc/probo/pkg/coredata.TrackerPatternOrderFieldUpdatedAt"
|
||||
)
|
||||
SOURCE
|
||||
@goEnum(
|
||||
value: "go.probo.inc/probo/pkg/coredata.CookiePatternOrderFieldSource"
|
||||
value: "go.probo.inc/probo/pkg/coredata.TrackerPatternOrderFieldSource"
|
||||
)
|
||||
}
|
||||
|
||||
input CookiePatternOrder
|
||||
@goModel(
|
||||
model: "go.probo.inc/probo/pkg/server/api/console/v1/types.CookiePatternOrderBy"
|
||||
) {
|
||||
direction: OrderDirection!
|
||||
field: CookiePatternOrderField!
|
||||
}
|
||||
|
||||
input CookiePatternFilter {
|
||||
query: String
|
||||
source: CookieSource
|
||||
}
|
||||
|
||||
type CookiePattern implements Node {
|
||||
id: ID!
|
||||
cookieCategory: CookieCategory @goField(forceResolver: true)
|
||||
trackerType: TrackerType!
|
||||
pattern: String!
|
||||
matchType: CookiePatternMatchType!
|
||||
displayName: String!
|
||||
maxAgeSeconds: Int
|
||||
description: String!
|
||||
source: CookieSource
|
||||
excluded: Boolean!
|
||||
cookieCount: Int! @goField(forceResolver: true)
|
||||
lastMatchedAt: Datetime
|
||||
createdAt: Datetime!
|
||||
updatedAt: Datetime!
|
||||
|
||||
permission(action: String!): Boolean! @goField(forceResolver: true)
|
||||
}
|
||||
|
||||
type CookiePatternConnection
|
||||
@goModel(
|
||||
model: "go.probo.inc/probo/pkg/server/api/console/v1/types.CookiePatternConnection"
|
||||
) {
|
||||
totalCount: Int! @goField(forceResolver: true)
|
||||
edges: [CookiePatternEdge!]!
|
||||
pageInfo: PageInfo!
|
||||
}
|
||||
|
||||
type CookiePatternEdge {
|
||||
cursor: CursorKey!
|
||||
node: CookiePattern!
|
||||
}
|
||||
|
||||
type TrackerPattern implements Node {
|
||||
id: ID!
|
||||
cookieCategory: CookieCategory @goField(forceResolver: true)
|
||||
trackerType: TrackerType!
|
||||
pattern: String!
|
||||
matchType: CookiePatternMatchType!
|
||||
matchType: TrackerPatternMatchType!
|
||||
displayName: String!
|
||||
maxAgeSeconds: Int
|
||||
description: String!
|
||||
@@ -332,7 +277,7 @@ input TrackerPatternOrder
|
||||
model: "go.probo.inc/probo/pkg/server/api/console/v1/types.TrackerPatternOrderBy"
|
||||
) {
|
||||
direction: OrderDirection!
|
||||
field: CookiePatternOrderField!
|
||||
field: TrackerPatternOrderField!
|
||||
}
|
||||
|
||||
input TrackerPatternFilter
|
||||
@@ -426,21 +371,12 @@ extend type Mutation {
|
||||
reorderCookieCategory(
|
||||
input: ReorderCookieCategoryInput!
|
||||
): ReorderCookieCategoryPayload!
|
||||
createCookiePattern(
|
||||
input: CreateCookiePatternInput!
|
||||
): CreateCookiePatternPayload!
|
||||
updateCookiePattern(
|
||||
input: UpdateCookiePatternInput!
|
||||
): UpdateCookiePatternPayload!
|
||||
deleteCookiePattern(
|
||||
input: DeleteCookiePatternInput!
|
||||
): DeleteCookiePatternPayload!
|
||||
moveCookiePatternToCategory(
|
||||
input: MoveCookiePatternToCategoryInput!
|
||||
): MoveCookiePatternToCategoryPayload!
|
||||
upsertCookieBannerTranslation(
|
||||
input: UpsertCookieBannerTranslationInput!
|
||||
): UpsertCookieBannerTranslationPayload!
|
||||
createTrackerPattern(
|
||||
input: CreateTrackerPatternInput!
|
||||
): CreateTrackerPatternPayload!
|
||||
updateTrackerPattern(
|
||||
input: UpdateTrackerPatternInput!
|
||||
): UpdateTrackerPatternPayload!
|
||||
@@ -558,53 +494,6 @@ type ReorderCookieCategoryPayload {
|
||||
cookieBanner: CookieBanner!
|
||||
}
|
||||
|
||||
input CreateCookiePatternInput {
|
||||
cookieCategoryId: ID!
|
||||
trackerType: TrackerType
|
||||
pattern: String!
|
||||
matchType: CookiePatternMatchType!
|
||||
displayName: String!
|
||||
maxAgeSeconds: Int
|
||||
description: String!
|
||||
}
|
||||
|
||||
input UpdateCookiePatternInput {
|
||||
cookiePatternId: ID!
|
||||
displayName: String
|
||||
maxAgeSeconds: Int @goField(omittable: true)
|
||||
description: String
|
||||
excluded: Boolean
|
||||
}
|
||||
|
||||
input DeleteCookiePatternInput {
|
||||
cookiePatternId: ID!
|
||||
}
|
||||
|
||||
input MoveCookiePatternToCategoryInput {
|
||||
cookiePatternId: ID!
|
||||
targetCookieCategoryId: ID!
|
||||
}
|
||||
|
||||
type CreateCookiePatternPayload {
|
||||
cookiePatternEdge: CookiePatternEdge!
|
||||
cookieBanner: CookieBanner!
|
||||
}
|
||||
|
||||
type UpdateCookiePatternPayload {
|
||||
cookiePattern: CookiePattern!
|
||||
cookieBanner: CookieBanner!
|
||||
}
|
||||
|
||||
type DeleteCookiePatternPayload {
|
||||
deletedCookiePatternId: ID!
|
||||
cookieBanner: CookieBanner!
|
||||
}
|
||||
|
||||
type MoveCookiePatternToCategoryPayload {
|
||||
cookiePattern: CookiePattern!
|
||||
cookieBanner: CookieBanner!
|
||||
}
|
||||
|
||||
input UpsertCookieBannerTranslationInput {
|
||||
cookieBannerId: ID!
|
||||
language: String!
|
||||
@@ -616,6 +505,16 @@ type UpsertCookieBannerTranslationPayload {
|
||||
cookieBanner: CookieBanner!
|
||||
}
|
||||
|
||||
input CreateTrackerPatternInput {
|
||||
cookieCategoryId: ID!
|
||||
trackerType: TrackerType
|
||||
pattern: String!
|
||||
matchType: TrackerPatternMatchType!
|
||||
displayName: String!
|
||||
maxAgeSeconds: Int
|
||||
description: String
|
||||
}
|
||||
|
||||
input UpdateTrackerPatternInput {
|
||||
trackerPatternId: ID!
|
||||
displayName: String
|
||||
@@ -633,6 +532,11 @@ input MoveTrackerPatternToCategoryInput {
|
||||
targetCookieCategoryId: ID!
|
||||
}
|
||||
|
||||
type CreateTrackerPatternPayload {
|
||||
trackerPatternEdge: TrackerPatternEdge!
|
||||
cookieBanner: CookieBanner!
|
||||
}
|
||||
|
||||
type UpdateTrackerPatternPayload {
|
||||
trackerPattern: TrackerPattern!
|
||||
cookieBanner: CookieBanner!
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
// Copyright (c) 2026 Probo Inc <hello@getprobo.com>.
|
||||
//
|
||||
// Permission to use, copy, modify, and/or distribute this software for any
|
||||
// purpose with or without fee is hereby granted, provided that the above
|
||||
// copyright notice and this permission notice appear in all copies.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
// PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
package types
|
||||
|
||||
import (
|
||||
"go.probo.inc/probo/pkg/coredata"
|
||||
"go.probo.inc/probo/pkg/gid"
|
||||
"go.probo.inc/probo/pkg/page"
|
||||
)
|
||||
|
||||
type (
|
||||
CookiePatternOrderBy OrderBy[coredata.CookiePatternOrderField]
|
||||
|
||||
CookiePatternConnection struct {
|
||||
TotalCount int
|
||||
Edges []*CookiePatternEdge
|
||||
PageInfo PageInfo
|
||||
|
||||
Resolver any
|
||||
ParentID gid.GID
|
||||
Filter *coredata.CookiePatternFilter
|
||||
}
|
||||
)
|
||||
|
||||
func NewCookiePatternConnection(
|
||||
p *page.Page[*coredata.CookiePattern, coredata.CookiePatternOrderField],
|
||||
parentType any,
|
||||
parentID gid.GID,
|
||||
) *CookiePatternConnection {
|
||||
edges := make([]*CookiePatternEdge, len(p.Data))
|
||||
|
||||
for i := range edges {
|
||||
edges[i] = NewCookiePatternEdge(p.Data[i], p.Cursor.OrderBy.Field)
|
||||
}
|
||||
|
||||
return &CookiePatternConnection{
|
||||
Edges: edges,
|
||||
PageInfo: *NewPageInfo(p),
|
||||
|
||||
Resolver: parentType,
|
||||
ParentID: parentID,
|
||||
}
|
||||
}
|
||||
|
||||
func NewCookiePatternConnectionWithFilter(
|
||||
p *page.Page[*coredata.CookiePattern, coredata.CookiePatternOrderField],
|
||||
parentType any,
|
||||
parentID gid.GID,
|
||||
filter *coredata.CookiePatternFilter,
|
||||
) *CookiePatternConnection {
|
||||
conn := NewCookiePatternConnection(p, parentType, parentID)
|
||||
conn.Filter = filter
|
||||
return conn
|
||||
}
|
||||
|
||||
func NewCookiePatternEdge(cp *coredata.CookiePattern, orderBy coredata.CookiePatternOrderField) *CookiePatternEdge {
|
||||
return &CookiePatternEdge{
|
||||
Cursor: cp.CursorKey(orderBy),
|
||||
Node: NewCookiePattern(cp),
|
||||
}
|
||||
}
|
||||
|
||||
func NewCookiePattern(cp *coredata.CookiePattern) *CookiePattern {
|
||||
return &CookiePattern{
|
||||
ID: cp.ID,
|
||||
CookieCategory: &CookieCategory{
|
||||
ID: cp.CookieCategoryID,
|
||||
CookieBanner: &CookieBanner{
|
||||
ID: cp.CookieBannerID,
|
||||
},
|
||||
},
|
||||
TrackerType: coredata.TrackerTypeCookie,
|
||||
Pattern: cp.Pattern,
|
||||
MatchType: cp.MatchType,
|
||||
DisplayName: cp.DisplayName,
|
||||
MaxAgeSeconds: cp.MaxAgeSeconds,
|
||||
Description: cp.Description,
|
||||
Source: &cp.Source,
|
||||
Excluded: cp.Excluded,
|
||||
LastMatchedAt: cp.LastMatchedAt,
|
||||
CreatedAt: cp.CreatedAt,
|
||||
UpdatedAt: cp.UpdatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func NewTrackerPattern(tp *coredata.TrackerPattern) *CookiePattern {
|
||||
return &CookiePattern{
|
||||
ID: tp.ID,
|
||||
CookieCategory: &CookieCategory{
|
||||
ID: tp.CookieCategoryID,
|
||||
CookieBanner: &CookieBanner{
|
||||
ID: tp.CookieBannerID,
|
||||
},
|
||||
},
|
||||
TrackerType: tp.TrackerType,
|
||||
Pattern: tp.Pattern,
|
||||
MatchType: tp.MatchType,
|
||||
DisplayName: tp.DisplayName,
|
||||
MaxAgeSeconds: tp.MaxAgeSeconds,
|
||||
Description: tp.Description,
|
||||
Source: tp.Source,
|
||||
Excluded: tp.Excluded,
|
||||
LastMatchedAt: tp.LastMatchedAt,
|
||||
CreatedAt: tp.CreatedAt,
|
||||
UpdatedAt: tp.UpdatedAt,
|
||||
}
|
||||
}
|
||||
@@ -21,7 +21,7 @@ import (
|
||||
)
|
||||
|
||||
type (
|
||||
TrackerPatternOrderBy OrderBy[coredata.CookiePatternOrderField]
|
||||
TrackerPatternOrderBy OrderBy[coredata.TrackerPatternOrderField]
|
||||
|
||||
TrackerPatternConnection struct {
|
||||
TotalCount int
|
||||
@@ -41,7 +41,7 @@ type (
|
||||
)
|
||||
|
||||
func NewTrackerPatternConnection(
|
||||
p *page.Page[*coredata.TrackerPattern, coredata.CookiePatternOrderField],
|
||||
p *page.Page[*coredata.TrackerPattern, coredata.TrackerPatternOrderField],
|
||||
parentType any,
|
||||
parentID gid.GID,
|
||||
) *TrackerPatternConnection {
|
||||
@@ -61,7 +61,7 @@ func NewTrackerPatternConnection(
|
||||
}
|
||||
|
||||
func NewTrackerPatternConnectionWithFilter(
|
||||
p *page.Page[*coredata.TrackerPattern, coredata.CookiePatternOrderField],
|
||||
p *page.Page[*coredata.TrackerPattern, coredata.TrackerPatternOrderField],
|
||||
parentType any,
|
||||
parentID gid.GID,
|
||||
filter *TrackerPatternFilter,
|
||||
@@ -71,7 +71,7 @@ func NewTrackerPatternConnectionWithFilter(
|
||||
return conn
|
||||
}
|
||||
|
||||
func NewTrackerPatternEdge(tp *coredata.TrackerPattern, orderBy coredata.CookiePatternOrderField) *TrackerPatternEdge {
|
||||
func NewTrackerPatternEdge(tp *coredata.TrackerPattern, orderBy coredata.TrackerPatternOrderField) *TrackerPatternEdge {
|
||||
return &TrackerPatternEdge{
|
||||
Cursor: tp.CursorKey(orderBy),
|
||||
Node: NewTrackerPatternNode(tp),
|
||||
|
||||
@@ -4941,49 +4941,50 @@ func (r *Resolver) ReorderCookieCategoryTool(ctx context.Context, req *mcp.CallT
|
||||
return nil, types.ReorderCookieCategoryOutput{CookieCategory: types.NewCookieCategory(category)}, nil
|
||||
}
|
||||
|
||||
func (r *Resolver) ListCookiePatternsTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListCookiePatternsInput) (*mcp.CallToolResult, types.ListCookiePatternsOutput, error) {
|
||||
r.MustAuthorize(ctx, input.CookieCategoryID, probo.ActionCookiePatternList)
|
||||
func (r *Resolver) ListTrackerPatternsTool(ctx context.Context, req *mcp.CallToolRequest, input *types.ListTrackerPatternsInput) (*mcp.CallToolResult, types.ListTrackerPatternsOutput, error) {
|
||||
r.MustAuthorize(ctx, input.CookieCategoryID, probo.ActionTrackerPatternList)
|
||||
scope := coredata.NewScopeFromObjectID(input.CookieCategoryID)
|
||||
cursor := types.NewCursor(input.Size, input.Cursor, page.OrderBy[coredata.CookiePatternOrderField]{Field: coredata.CookiePatternOrderFieldCreatedAt, Direction: page.OrderDirectionAsc})
|
||||
patterns, err := r.cookieBanner.ListCookiePatternsForCategory(ctx, scope, input.CookieCategoryID, cursor)
|
||||
cursor := types.NewCursor(input.Size, input.Cursor, page.OrderBy[coredata.TrackerPatternOrderField]{Field: coredata.TrackerPatternOrderFieldCreatedAt, Direction: page.OrderDirectionAsc})
|
||||
patterns, err := r.cookieBanner.ListTrackerPatternsForCategory(ctx, scope, input.CookieCategoryID, cursor)
|
||||
if err != nil {
|
||||
panic(fmt.Errorf("cannot list cookie patterns: %w", err))
|
||||
panic(fmt.Errorf("cannot list tracker patterns: %w", err))
|
||||
}
|
||||
p := page.NewPage(patterns, cursor)
|
||||
return nil, types.NewListCookiePatternsOutput(p), nil
|
||||
return nil, types.NewListTrackerPatternsOutput(p), nil
|
||||
}
|
||||
|
||||
func (r *Resolver) GetCookiePatternTool(ctx context.Context, req *mcp.CallToolRequest, input *types.GetCookiePatternInput) (*mcp.CallToolResult, types.GetCookiePatternOutput, error) {
|
||||
r.MustAuthorize(ctx, input.ID, probo.ActionCookiePatternGet)
|
||||
func (r *Resolver) GetTrackerPatternTool(ctx context.Context, req *mcp.CallToolRequest, input *types.GetTrackerPatternInput) (*mcp.CallToolResult, types.GetTrackerPatternOutput, error) {
|
||||
r.MustAuthorize(ctx, input.ID, probo.ActionTrackerPatternGet)
|
||||
scope := coredata.NewScopeFromObjectID(input.ID)
|
||||
pattern, err := r.cookieBanner.GetCookiePattern(ctx, scope, input.ID)
|
||||
pattern, err := r.cookieBanner.GetTrackerPattern(ctx, scope, input.ID)
|
||||
if err != nil {
|
||||
return nil, types.GetCookiePatternOutput{}, fmt.Errorf("cannot get cookie pattern: %w", err)
|
||||
return nil, types.GetTrackerPatternOutput{}, fmt.Errorf("cannot get tracker pattern: %w", err)
|
||||
}
|
||||
return nil, types.GetCookiePatternOutput{CookiePattern: types.NewCookiePattern(pattern)}, nil
|
||||
return nil, types.GetTrackerPatternOutput{TrackerPattern: types.NewTrackerPattern(pattern)}, nil
|
||||
}
|
||||
|
||||
func (r *Resolver) AddCookiePatternTool(ctx context.Context, req *mcp.CallToolRequest, input *types.AddCookiePatternInput) (*mcp.CallToolResult, types.AddCookiePatternOutput, error) {
|
||||
r.MustAuthorize(ctx, input.CookieCategoryID, probo.ActionCookiePatternCreate)
|
||||
func (r *Resolver) AddTrackerPatternTool(ctx context.Context, req *mcp.CallToolRequest, input *types.AddTrackerPatternInput) (*mcp.CallToolResult, types.AddTrackerPatternOutput, error) {
|
||||
r.MustAuthorize(ctx, input.CookieCategoryID, probo.ActionTrackerPatternCreate)
|
||||
scope := coredata.NewScopeFromObjectID(input.CookieCategoryID)
|
||||
pattern, err := r.cookieBanner.CreateCookiePattern(ctx, scope, cookiebanner.CreateCookiePatternRequest{
|
||||
pattern, err := r.cookieBanner.CreateTrackerPattern(ctx, scope, cookiebanner.CreateTrackerPatternRequest{
|
||||
CookieCategoryID: input.CookieCategoryID,
|
||||
TrackerType: coredata.TrackerType(input.TrackerType),
|
||||
Pattern: input.Pattern,
|
||||
MatchType: coredata.CookiePatternMatchType(input.MatchType),
|
||||
MatchType: coredata.TrackerPatternMatchType(input.MatchType),
|
||||
DisplayName: input.DisplayName,
|
||||
MaxAgeSeconds: input.MaxAgeSeconds,
|
||||
Description: input.Description,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, types.AddCookiePatternOutput{}, fmt.Errorf("cannot create cookie pattern: %w", err)
|
||||
return nil, types.AddTrackerPatternOutput{}, fmt.Errorf("cannot create tracker pattern: %w", err)
|
||||
}
|
||||
return nil, types.AddCookiePatternOutput{CookiePattern: types.NewCookiePattern(pattern)}, nil
|
||||
return nil, types.AddTrackerPatternOutput{TrackerPattern: types.NewTrackerPattern(pattern)}, nil
|
||||
}
|
||||
|
||||
func (r *Resolver) UpdateCookiePatternTool(ctx context.Context, req *mcp.CallToolRequest, input *types.UpdateCookiePatternInput) (*mcp.CallToolResult, types.UpdateCookiePatternOutput, error) {
|
||||
r.MustAuthorize(ctx, input.ID, probo.ActionCookiePatternUpdate)
|
||||
func (r *Resolver) UpdateTrackerPatternTool(ctx context.Context, req *mcp.CallToolRequest, input *types.UpdateTrackerPatternInput) (*mcp.CallToolResult, types.UpdateTrackerPatternOutput, error) {
|
||||
r.MustAuthorize(ctx, input.ID, probo.ActionTrackerPatternUpdate)
|
||||
scope := coredata.NewScopeFromObjectID(input.ID)
|
||||
updateReq := cookiebanner.UpdateCookiePatternRequest{CookiePatternID: input.ID}
|
||||
updateReq := cookiebanner.UpdateTrackerPatternRequest{TrackerPatternID: input.ID}
|
||||
if v := UnwrapOmittable(input.DisplayName); v != nil && *v != nil {
|
||||
updateReq.DisplayName = *v
|
||||
}
|
||||
@@ -4997,33 +4998,33 @@ func (r *Resolver) UpdateCookiePatternTool(ctx context.Context, req *mcp.CallToo
|
||||
if v := UnwrapOmittable(input.Excluded); v != nil && *v != nil {
|
||||
updateReq.Excluded = *v
|
||||
}
|
||||
pattern, err := r.cookieBanner.UpdateCookiePattern(ctx, scope, updateReq)
|
||||
pattern, err := r.cookieBanner.UpdateTrackerPattern(ctx, scope, updateReq)
|
||||
if err != nil {
|
||||
return nil, types.UpdateCookiePatternOutput{}, fmt.Errorf("cannot update cookie pattern: %w", err)
|
||||
return nil, types.UpdateTrackerPatternOutput{}, fmt.Errorf("cannot update tracker pattern: %w", err)
|
||||
}
|
||||
return nil, types.UpdateCookiePatternOutput{CookiePattern: types.NewCookiePattern(pattern)}, nil
|
||||
return nil, types.UpdateTrackerPatternOutput{TrackerPattern: types.NewTrackerPattern(pattern)}, nil
|
||||
}
|
||||
|
||||
func (r *Resolver) DeleteCookiePatternTool(ctx context.Context, req *mcp.CallToolRequest, input *types.DeleteCookiePatternInput) (*mcp.CallToolResult, types.DeleteCookiePatternOutput, error) {
|
||||
r.MustAuthorize(ctx, input.ID, probo.ActionCookiePatternDelete)
|
||||
func (r *Resolver) DeleteTrackerPatternTool(ctx context.Context, req *mcp.CallToolRequest, input *types.DeleteTrackerPatternInput) (*mcp.CallToolResult, types.DeleteTrackerPatternOutput, error) {
|
||||
r.MustAuthorize(ctx, input.ID, probo.ActionTrackerPatternDelete)
|
||||
scope := coredata.NewScopeFromObjectID(input.ID)
|
||||
if err := r.cookieBanner.DeleteCookiePattern(ctx, scope, input.ID); err != nil {
|
||||
return nil, types.DeleteCookiePatternOutput{}, fmt.Errorf("cannot delete cookie pattern: %w", err)
|
||||
if err := r.cookieBanner.DeleteTrackerPattern(ctx, scope, input.ID); err != nil {
|
||||
return nil, types.DeleteTrackerPatternOutput{}, fmt.Errorf("cannot delete tracker pattern: %w", err)
|
||||
}
|
||||
return nil, types.DeleteCookiePatternOutput{DeletedID: input.ID}, nil
|
||||
return nil, types.DeleteTrackerPatternOutput{DeletedID: input.ID}, nil
|
||||
}
|
||||
|
||||
func (r *Resolver) MoveCookiePatternToCategoryTool(ctx context.Context, req *mcp.CallToolRequest, input *types.MoveCookiePatternToCategoryInput) (*mcp.CallToolResult, types.MoveCookiePatternToCategoryOutput, error) {
|
||||
r.MustAuthorize(ctx, input.CookiePatternID, probo.ActionCookiePatternUpdate)
|
||||
scope := coredata.NewScopeFromObjectID(input.CookiePatternID)
|
||||
result, err := r.cookieBanner.MoveCookiePatternToCategory(ctx, scope, cookiebanner.MoveCookiePatternToCategoryRequest{
|
||||
CookiePatternID: input.CookiePatternID,
|
||||
func (r *Resolver) MoveTrackerPatternToCategoryTool(ctx context.Context, req *mcp.CallToolRequest, input *types.MoveTrackerPatternToCategoryInput) (*mcp.CallToolResult, types.MoveTrackerPatternToCategoryOutput, error) {
|
||||
r.MustAuthorize(ctx, input.TrackerPatternID, probo.ActionTrackerPatternUpdate)
|
||||
scope := coredata.NewScopeFromObjectID(input.TrackerPatternID)
|
||||
result, err := r.cookieBanner.MoveTrackerPatternToCategory(ctx, scope, cookiebanner.MoveTrackerPatternToCategoryRequest{
|
||||
TrackerPatternID: input.TrackerPatternID,
|
||||
TargetCookieCategoryID: input.TargetCookieCategoryID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, types.MoveCookiePatternToCategoryOutput{}, fmt.Errorf("cannot move cookie pattern: %w", err)
|
||||
return nil, types.MoveTrackerPatternToCategoryOutput{}, fmt.Errorf("cannot move tracker pattern: %w", err)
|
||||
}
|
||||
return nil, types.MoveCookiePatternToCategoryOutput{CookiePattern: types.NewCookiePattern(result.CookiePattern)}, nil
|
||||
return nil, types.MoveTrackerPatternToCategoryOutput{TrackerPattern: types.NewTrackerPattern(result.TrackerPattern)}, nil
|
||||
}
|
||||
|
||||
func (r *Resolver) PublishCookieBannerVersionTool(ctx context.Context, req *mcp.CallToolRequest, input *types.PublishCookieBannerVersionInput) (*mcp.CallToolResult, types.PublishCookieBannerVersionOutput, error) {
|
||||
|
||||
@@ -9132,13 +9132,14 @@ components:
|
||||
format: date-time
|
||||
description: Last update timestamp
|
||||
|
||||
CookiePattern:
|
||||
TrackerPattern:
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
- organization_id
|
||||
- cookie_banner_id
|
||||
- cookie_category_id
|
||||
- tracker_type
|
||||
- pattern
|
||||
- match_type
|
||||
- display_name
|
||||
@@ -9150,7 +9151,7 @@ components:
|
||||
properties:
|
||||
id:
|
||||
$ref: "#/components/schemas/GID"
|
||||
description: Cookie pattern ID
|
||||
description: Tracker pattern ID
|
||||
organization_id:
|
||||
$ref: "#/components/schemas/GID"
|
||||
description: Organization ID
|
||||
@@ -9160,9 +9161,13 @@ components:
|
||||
cookie_category_id:
|
||||
$ref: "#/components/schemas/GID"
|
||||
description: Cookie category ID
|
||||
tracker_type:
|
||||
type: string
|
||||
enum: [COOKIE, LOCAL_STORAGE, SESSION_STORAGE, PIXEL]
|
||||
description: Type of tracker
|
||||
pattern:
|
||||
type: string
|
||||
description: Cookie name pattern
|
||||
description: Tracker name pattern
|
||||
match_type:
|
||||
type: string
|
||||
enum: [EXACT, PREFIX]
|
||||
@@ -9630,7 +9635,7 @@ components:
|
||||
cookie_category:
|
||||
$ref: "#/components/schemas/CookieCategory"
|
||||
|
||||
ListCookiePatternsInput:
|
||||
ListTrackerPatternsInput:
|
||||
type: object
|
||||
required:
|
||||
- cookie_category_id
|
||||
@@ -9642,19 +9647,19 @@ components:
|
||||
cursor:
|
||||
$ref: "#/components/schemas/CursorKey"
|
||||
|
||||
ListCookiePatternsOutput:
|
||||
ListTrackerPatternsOutput:
|
||||
type: object
|
||||
required:
|
||||
- cookie_patterns
|
||||
- tracker_patterns
|
||||
properties:
|
||||
next_cursor:
|
||||
$ref: "#/components/schemas/CursorKey"
|
||||
cookie_patterns:
|
||||
tracker_patterns:
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/CookiePattern"
|
||||
$ref: "#/components/schemas/TrackerPattern"
|
||||
|
||||
GetCookiePatternInput:
|
||||
GetTrackerPatternInput:
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
@@ -9662,18 +9667,19 @@ components:
|
||||
id:
|
||||
$ref: "#/components/schemas/GID"
|
||||
|
||||
GetCookiePatternOutput:
|
||||
GetTrackerPatternOutput:
|
||||
type: object
|
||||
required:
|
||||
- cookie_pattern
|
||||
- tracker_pattern
|
||||
properties:
|
||||
cookie_pattern:
|
||||
$ref: "#/components/schemas/CookiePattern"
|
||||
tracker_pattern:
|
||||
$ref: "#/components/schemas/TrackerPattern"
|
||||
|
||||
AddCookiePatternInput:
|
||||
AddTrackerPatternInput:
|
||||
type: object
|
||||
required:
|
||||
- cookie_category_id
|
||||
- tracker_type
|
||||
- pattern
|
||||
- match_type
|
||||
- display_name
|
||||
@@ -9681,6 +9687,9 @@ components:
|
||||
properties:
|
||||
cookie_category_id:
|
||||
$ref: "#/components/schemas/GID"
|
||||
tracker_type:
|
||||
type: string
|
||||
enum: [COOKIE, LOCAL_STORAGE, SESSION_STORAGE, PIXEL]
|
||||
pattern:
|
||||
type: string
|
||||
match_type:
|
||||
@@ -9693,15 +9702,15 @@ components:
|
||||
description:
|
||||
type: string
|
||||
|
||||
AddCookiePatternOutput:
|
||||
AddTrackerPatternOutput:
|
||||
type: object
|
||||
required:
|
||||
- cookie_pattern
|
||||
- tracker_pattern
|
||||
properties:
|
||||
cookie_pattern:
|
||||
$ref: "#/components/schemas/CookiePattern"
|
||||
tracker_pattern:
|
||||
$ref: "#/components/schemas/TrackerPattern"
|
||||
|
||||
UpdateCookiePatternInput:
|
||||
UpdateTrackerPatternInput:
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
@@ -9729,15 +9738,15 @@ components:
|
||||
- "null"
|
||||
go.probo.inc/mcpgen/omittable: true
|
||||
|
||||
UpdateCookiePatternOutput:
|
||||
UpdateTrackerPatternOutput:
|
||||
type: object
|
||||
required:
|
||||
- cookie_pattern
|
||||
- tracker_pattern
|
||||
properties:
|
||||
cookie_pattern:
|
||||
$ref: "#/components/schemas/CookiePattern"
|
||||
tracker_pattern:
|
||||
$ref: "#/components/schemas/TrackerPattern"
|
||||
|
||||
DeleteCookiePatternInput:
|
||||
DeleteTrackerPatternInput:
|
||||
type: object
|
||||
required:
|
||||
- id
|
||||
@@ -9745,7 +9754,7 @@ components:
|
||||
id:
|
||||
$ref: "#/components/schemas/GID"
|
||||
|
||||
DeleteCookiePatternOutput:
|
||||
DeleteTrackerPatternOutput:
|
||||
type: object
|
||||
required:
|
||||
- deleted_id
|
||||
@@ -9753,24 +9762,24 @@ components:
|
||||
deleted_id:
|
||||
$ref: "#/components/schemas/GID"
|
||||
|
||||
MoveCookiePatternToCategoryInput:
|
||||
MoveTrackerPatternToCategoryInput:
|
||||
type: object
|
||||
required:
|
||||
- cookie_pattern_id
|
||||
- tracker_pattern_id
|
||||
- target_cookie_category_id
|
||||
properties:
|
||||
cookie_pattern_id:
|
||||
tracker_pattern_id:
|
||||
$ref: "#/components/schemas/GID"
|
||||
target_cookie_category_id:
|
||||
$ref: "#/components/schemas/GID"
|
||||
|
||||
MoveCookiePatternToCategoryOutput:
|
||||
MoveTrackerPatternToCategoryOutput:
|
||||
type: object
|
||||
required:
|
||||
- cookie_pattern
|
||||
- tracker_pattern
|
||||
properties:
|
||||
cookie_pattern:
|
||||
$ref: "#/components/schemas/CookiePattern"
|
||||
tracker_pattern:
|
||||
$ref: "#/components/schemas/TrackerPattern"
|
||||
|
||||
PublishCookieBannerVersionInput:
|
||||
type: object
|
||||
@@ -12019,57 +12028,57 @@ tools:
|
||||
$ref: "#/components/schemas/ReorderCookieCategoryInput"
|
||||
outputSchema:
|
||||
$ref: "#/components/schemas/ReorderCookieCategoryOutput"
|
||||
- name: listCookiePatterns
|
||||
description: List all cookie patterns for a category
|
||||
- name: listTrackerPatterns
|
||||
description: List all tracker patterns for a category
|
||||
hints:
|
||||
readonly: true
|
||||
idempotent: true
|
||||
inputSchema:
|
||||
$ref: "#/components/schemas/ListCookiePatternsInput"
|
||||
$ref: "#/components/schemas/ListTrackerPatternsInput"
|
||||
outputSchema:
|
||||
$ref: "#/components/schemas/ListCookiePatternsOutput"
|
||||
- name: getCookiePattern
|
||||
description: Get a cookie pattern by ID
|
||||
$ref: "#/components/schemas/ListTrackerPatternsOutput"
|
||||
- name: getTrackerPattern
|
||||
description: Get a tracker pattern by ID
|
||||
hints:
|
||||
readonly: true
|
||||
idempotent: true
|
||||
inputSchema:
|
||||
$ref: "#/components/schemas/GetCookiePatternInput"
|
||||
$ref: "#/components/schemas/GetTrackerPatternInput"
|
||||
outputSchema:
|
||||
$ref: "#/components/schemas/GetCookiePatternOutput"
|
||||
- name: addCookiePattern
|
||||
description: Create a new cookie pattern for a category
|
||||
$ref: "#/components/schemas/GetTrackerPatternOutput"
|
||||
- name: addTrackerPattern
|
||||
description: Create a new tracker pattern for a category
|
||||
hints:
|
||||
readonly: false
|
||||
inputSchema:
|
||||
$ref: "#/components/schemas/AddCookiePatternInput"
|
||||
$ref: "#/components/schemas/AddTrackerPatternInput"
|
||||
outputSchema:
|
||||
$ref: "#/components/schemas/AddCookiePatternOutput"
|
||||
- name: updateCookiePattern
|
||||
description: Update an existing cookie pattern
|
||||
$ref: "#/components/schemas/AddTrackerPatternOutput"
|
||||
- name: updateTrackerPattern
|
||||
description: Update an existing tracker pattern
|
||||
hints:
|
||||
readonly: false
|
||||
inputSchema:
|
||||
$ref: "#/components/schemas/UpdateCookiePatternInput"
|
||||
$ref: "#/components/schemas/UpdateTrackerPatternInput"
|
||||
outputSchema:
|
||||
$ref: "#/components/schemas/UpdateCookiePatternOutput"
|
||||
- name: deleteCookiePattern
|
||||
description: Delete a cookie pattern
|
||||
$ref: "#/components/schemas/UpdateTrackerPatternOutput"
|
||||
- name: deleteTrackerPattern
|
||||
description: Delete a tracker pattern
|
||||
hints:
|
||||
readonly: false
|
||||
destructive: true
|
||||
inputSchema:
|
||||
$ref: "#/components/schemas/DeleteCookiePatternInput"
|
||||
$ref: "#/components/schemas/DeleteTrackerPatternInput"
|
||||
outputSchema:
|
||||
$ref: "#/components/schemas/DeleteCookiePatternOutput"
|
||||
- name: moveCookiePatternToCategory
|
||||
description: Move a cookie pattern to a different category
|
||||
$ref: "#/components/schemas/DeleteTrackerPatternOutput"
|
||||
- name: moveTrackerPatternToCategory
|
||||
description: Move a tracker pattern to a different category
|
||||
hints:
|
||||
readonly: false
|
||||
inputSchema:
|
||||
$ref: "#/components/schemas/MoveCookiePatternToCategoryInput"
|
||||
$ref: "#/components/schemas/MoveTrackerPatternToCategoryInput"
|
||||
outputSchema:
|
||||
$ref: "#/components/schemas/MoveCookiePatternToCategoryOutput"
|
||||
$ref: "#/components/schemas/MoveTrackerPatternToCategoryOutput"
|
||||
- name: publishCookieBannerVersion
|
||||
description: Publish the current draft version of a cookie banner
|
||||
hints:
|
||||
|
||||
@@ -19,18 +19,24 @@ import (
|
||||
"go.probo.inc/probo/pkg/page"
|
||||
)
|
||||
|
||||
func NewCookiePattern(p *coredata.CookiePattern) *CookiePattern {
|
||||
return &CookiePattern{
|
||||
func NewTrackerPattern(p *coredata.TrackerPattern) *TrackerPattern {
|
||||
var source TrackerPatternSource
|
||||
if p.Source != nil {
|
||||
source = TrackerPatternSource(*p.Source)
|
||||
}
|
||||
|
||||
return &TrackerPattern{
|
||||
ID: p.ID,
|
||||
OrganizationID: p.OrganizationID,
|
||||
CookieBannerID: p.CookieBannerID,
|
||||
CookieCategoryID: p.CookieCategoryID,
|
||||
TrackerType: TrackerPatternTrackerType(p.TrackerType),
|
||||
Pattern: p.Pattern,
|
||||
MatchType: CookiePatternMatchType(p.MatchType),
|
||||
MatchType: TrackerPatternMatchType(p.MatchType),
|
||||
DisplayName: p.DisplayName,
|
||||
MaxAgeSeconds: p.MaxAgeSeconds,
|
||||
Description: p.Description,
|
||||
Source: CookiePatternSource(p.Source),
|
||||
Source: source,
|
||||
Excluded: p.Excluded,
|
||||
LastMatchedAt: p.LastMatchedAt,
|
||||
CreatedAt: p.CreatedAt,
|
||||
@@ -38,10 +44,10 @@ func NewCookiePattern(p *coredata.CookiePattern) *CookiePattern {
|
||||
}
|
||||
}
|
||||
|
||||
func NewListCookiePatternsOutput(pg *page.Page[*coredata.CookiePattern, coredata.CookiePatternOrderField]) ListCookiePatternsOutput {
|
||||
patterns := make([]*CookiePattern, 0, len(pg.Data))
|
||||
func NewListTrackerPatternsOutput(pg *page.Page[*coredata.TrackerPattern, coredata.TrackerPatternOrderField]) ListTrackerPatternsOutput {
|
||||
patterns := make([]*TrackerPattern, 0, len(pg.Data))
|
||||
for _, p := range pg.Data {
|
||||
patterns = append(patterns, NewCookiePattern(p))
|
||||
patterns = append(patterns, NewTrackerPattern(p))
|
||||
}
|
||||
|
||||
var nextCursor *page.CursorKey
|
||||
@@ -50,8 +56,8 @@ func NewListCookiePatternsOutput(pg *page.Page[*coredata.CookiePattern, coredata
|
||||
nextCursor = &cursorKey
|
||||
}
|
||||
|
||||
return ListCookiePatternsOutput{
|
||||
NextCursor: nextCursor,
|
||||
CookiePatterns: patterns,
|
||||
return ListTrackerPatternsOutput{
|
||||
NextCursor: nextCursor,
|
||||
TrackerPatterns: patterns,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user