Add --enrich flag to common third party upsert
Let an operator create or update a catalog third party and queue it for the async enrichment worker in one step, so a minimal name/category row gets its profile, compliance documents, owned domains, and logo filled in without a separate reenrich call. Enrichment is armed explicitly via RequestEnrichmentByIDs rather than through the receiver: the coredata Upsert sets enrichment_requested_at from the receiver only on insert and leaves it untouched on conflict, so this is the only path that re-arms an existing row uniformly while also resetting the attempt budget for a fresh run. Signed-off-by: Émile Ré <emile@probo.com>
This commit is contained in:
30
pkg/proboctl/commonthirdparty/upsert.go
vendored
30
pkg/proboctl/commonthirdparty/upsert.go
vendored
@@ -48,6 +48,7 @@ func newCmdUpsert(f *cmdutil.Factory) *cobra.Command {
|
|||||||
flagTrustPageURL string
|
flagTrustPageURL string
|
||||||
flagCertifications []string
|
flagCertifications []string
|
||||||
flagDryRun bool
|
flagDryRun bool
|
||||||
|
flagEnrich bool
|
||||||
)
|
)
|
||||||
|
|
||||||
cmd := &cobra.Command{
|
cmd := &cobra.Command{
|
||||||
@@ -56,7 +57,11 @@ func newCmdUpsert(f *cmdutil.Factory) *cobra.Command {
|
|||||||
Long: "Insert a new common third party or update an existing one keyed by " +
|
Long: "Insert a new common third party or update an existing one keyed by " +
|
||||||
"slug. Only --name and --category are required; every other field is " +
|
"slug. Only --name and --category are required; every other field is " +
|
||||||
"updated only when its flag is passed, so an existing row's other " +
|
"updated only when its flag is passed, so an existing row's other " +
|
||||||
"columns are preserved.",
|
"columns are preserved.\n\n" +
|
||||||
|
"Pass --enrich to queue the row for the async enrichment worker after " +
|
||||||
|
"writing, so a minimal name/category row gets its profile, compliance " +
|
||||||
|
"documents, owned domains, and logo filled in. Enrichment is expensive " +
|
||||||
|
"(LLM + browser per row).",
|
||||||
Args: cobra.NoArgs,
|
Args: cobra.NoArgs,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -78,6 +83,7 @@ func newCmdUpsert(f *cmdutil.Factory) *cobra.Command {
|
|||||||
cmd.Flags().StringVar(&flagTrustPageURL, "trust-page-url", "", "Trust page URL")
|
cmd.Flags().StringVar(&flagTrustPageURL, "trust-page-url", "", "Trust page URL")
|
||||||
cmd.Flags().StringSliceVar(&flagCertifications, "certifications", nil, "Certifications (repeatable)")
|
cmd.Flags().StringSliceVar(&flagCertifications, "certifications", nil, "Certifications (repeatable)")
|
||||||
cmd.Flags().BoolVar(&flagDryRun, "dry-run", false, "Print the resulting row without writing")
|
cmd.Flags().BoolVar(&flagDryRun, "dry-run", false, "Print the resulting row without writing")
|
||||||
|
cmd.Flags().BoolVar(&flagEnrich, "enrich", false, "Queue the row for the async enrichment worker after writing")
|
||||||
|
|
||||||
_ = cmd.MarkFlagRequired("name")
|
_ = cmd.MarkFlagRequired("name")
|
||||||
_ = cmd.MarkFlagRequired("category")
|
_ = cmd.MarkFlagRequired("category")
|
||||||
@@ -165,14 +171,32 @@ func newCmdUpsert(f *cmdutil.Factory) *cobra.Command {
|
|||||||
return fmt.Errorf("cannot upsert common third party: %w", err)
|
return fmt.Errorf("cannot upsert common third party: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Arm enrichment explicitly rather than via the receiver:
|
||||||
|
// Upsert sets enrichment_requested_at from the receiver only
|
||||||
|
// on insert and leaves it untouched on conflict, so this is
|
||||||
|
// the only path that re-arms an existing row uniformly. It
|
||||||
|
// also resets the attempt budget for a fresh run.
|
||||||
|
if flagEnrich {
|
||||||
|
var parties coredata.CommonThirdParties
|
||||||
|
|
||||||
|
if _, err := parties.RequestEnrichmentByIDs(ctx, tx, []gid.GID{party.ID}); err != nil {
|
||||||
|
return fmt.Errorf("cannot queue enrichment: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enrichSuffix := ""
|
||||||
|
if flagEnrich {
|
||||||
|
enrichSuffix = " (queued for enrichment)"
|
||||||
|
}
|
||||||
|
|
||||||
if flagDryRun {
|
if flagDryRun {
|
||||||
_, _ = fmt.Fprintf(out, "Would upsert common third party %q (slug %q, category %s).\n", party.Name, party.Slug, party.Category)
|
_, _ = fmt.Fprintf(out, "Would upsert common third party %q (slug %q, category %s)%s.\n", party.Name, party.Slug, party.Category, enrichSuffix)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,7 +205,7 @@ func newCmdUpsert(f *cmdutil.Factory) *cobra.Command {
|
|||||||
action = "Created"
|
action = "Created"
|
||||||
}
|
}
|
||||||
|
|
||||||
_, _ = fmt.Fprintf(out, "%s common third party %s (%q, slug %q).\n", action, party.ID.String(), party.Name, party.Slug)
|
_, _ = fmt.Fprintf(out, "%s common third party %s (%q, slug %q)%s.\n", action, party.ID.String(), party.Name, party.Slug, enrichSuffix)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user