@grapadigital/shared-schemas 1.0.238 → 1.0.239

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -277,6 +277,9 @@ export declare const CONTENT_REPORTABLE_STATUS_VALUES: ContentStatus[];
277
277
  export declare const CONTENT_COMMENT_COUNT_SOURCE_VALUES: readonly ["primetag", "exportcomments"];
278
278
  export type ContentCommentCountSource = (typeof CONTENT_COMMENT_COUNT_SOURCE_VALUES)[number];
279
279
  export declare const CONTENT_METRICS_SOURCE_VALUES: readonly ["real", "organic", "estimated"];
280
+ /** Quem criou o Conteúdo (metricsFile = Métricas por arquivo, ainda sem uso). Ver GD-767. */
281
+ export declare const CONTENT_ORIGIN_VALUES: readonly ["primetag", "manual", "tagger", "metricsFile"];
282
+ export type ContentOrigin = (typeof CONTENT_ORIGIN_VALUES)[number];
280
283
  /** Origem do Tipo e da Fase: auto = regra da captura, manual = quem revisou. Ver GD-691. */
281
284
  export declare const CONTENT_CLASSIFICATION_SOURCE_VALUES: readonly ["auto", "manual"];
282
285
  export type ContentClassificationSource = (typeof CONTENT_CLASSIFICATION_SOURCE_VALUES)[number];
@@ -331,6 +334,13 @@ export declare class Content {
331
334
  createdAt?: Date;
332
335
  updatedAt?: Date;
333
336
  primetagId?: string;
337
+ /**
338
+ * Quem criou o Conteúdo. A Tagger pode assumir um existente, e a captura da
339
+ * Primetag não toca Conteúdo da Tagger. Ver GD-767.
340
+ */
341
+ origin?: ContentOrigin | null;
342
+ /** id do post na Tagger (import de JSON, GD-767). */
343
+ taggerId?: string | null;
334
344
  captureRunId?: string;
335
345
  sentimentAnalysis?: SentimentAnalysis | null;
336
346
  thumbnailUrl?: string;
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.ContentModel = exports.ContentSchema = exports.Content = exports.ContentStatusChangedBySchema = exports.ContentStatusChangedBy = exports.CONTENT_CLASSIFICATION_SOURCE_VALUES = exports.CONTENT_METRICS_SOURCE_VALUES = exports.CONTENT_COMMENT_COUNT_SOURCE_VALUES = exports.CONTENT_REPORTABLE_STATUS_VALUES = exports.CONTENT_STATUS_VALUES = exports.EstimatedMetricsSchema = exports.EstimatedMetrics = exports.ContentMetricsHistoryEntrySchema = exports.ContentMetricsHistoryEntry = exports.ContentVideoSchema = exports.ContentVideo = exports.ContentMetricsBreakdownSchema = exports.ContentMetricsBreakdown = exports.ContentBaseMetricsSchema = exports.ContentBaseMetrics = exports.CONTENT_BASE_METRIC_KEYS = exports.ContentCollabSchema = exports.ContentCollab = exports.MetricsSchema = exports.Metrics = exports.SentimentAnalysisSchema = exports.SentimentAnalysis = exports.SentimentScoreSchema = exports.SentimentScore = exports.WordCloudSchema = exports.WordCloud = exports.SentimentCommentSchema = exports.SentimentComment = void 0;
12
+ exports.ContentModel = exports.ContentSchema = exports.Content = exports.ContentStatusChangedBySchema = exports.ContentStatusChangedBy = exports.CONTENT_CLASSIFICATION_SOURCE_VALUES = exports.CONTENT_ORIGIN_VALUES = exports.CONTENT_METRICS_SOURCE_VALUES = exports.CONTENT_COMMENT_COUNT_SOURCE_VALUES = exports.CONTENT_REPORTABLE_STATUS_VALUES = exports.CONTENT_STATUS_VALUES = exports.EstimatedMetricsSchema = exports.EstimatedMetrics = exports.ContentMetricsHistoryEntrySchema = exports.ContentMetricsHistoryEntry = exports.ContentVideoSchema = exports.ContentVideo = exports.ContentMetricsBreakdownSchema = exports.ContentMetricsBreakdown = exports.ContentBaseMetricsSchema = exports.ContentBaseMetrics = exports.CONTENT_BASE_METRIC_KEYS = exports.ContentCollabSchema = exports.ContentCollab = exports.MetricsSchema = exports.Metrics = exports.SentimentAnalysisSchema = exports.SentimentAnalysis = exports.SentimentScoreSchema = exports.SentimentScore = exports.WordCloudSchema = exports.WordCloud = exports.SentimentCommentSchema = exports.SentimentComment = void 0;
13
13
  const mongoose_1 = require("@nestjs/mongoose");
14
14
  const mongoose_2 = require("mongoose");
15
15
  const normalize_content_link_util_1 = require("../utils/normalize-content-link.util");
@@ -457,6 +457,8 @@ exports.CONTENT_REPORTABLE_STATUS_VALUES = [
457
457
  ];
458
458
  exports.CONTENT_COMMENT_COUNT_SOURCE_VALUES = ['primetag', 'exportcomments'];
459
459
  exports.CONTENT_METRICS_SOURCE_VALUES = ['real', 'organic', 'estimated'];
460
+ /** Quem criou o Conteúdo (metricsFile = Métricas por arquivo, ainda sem uso). Ver GD-767. */
461
+ exports.CONTENT_ORIGIN_VALUES = ['primetag', 'manual', 'tagger', 'metricsFile'];
460
462
  /** Origem do Tipo e da Fase: auto = regra da captura, manual = quem revisou. Ver GD-691. */
461
463
  exports.CONTENT_CLASSIFICATION_SOURCE_VALUES = ['auto', 'manual'];
462
464
  let ContentStatusChangedBy = class ContentStatusChangedBy {
@@ -613,6 +615,14 @@ __decorate([
613
615
  (0, mongoose_1.Prop)({ type: String, required: false }),
614
616
  __metadata("design:type", String)
615
617
  ], Content.prototype, "primetagId", void 0);
618
+ __decorate([
619
+ (0, mongoose_1.Prop)({ type: String, enum: exports.CONTENT_ORIGIN_VALUES, required: false, default: null }),
620
+ __metadata("design:type", Object)
621
+ ], Content.prototype, "origin", void 0);
622
+ __decorate([
623
+ (0, mongoose_1.Prop)({ type: String, required: false, default: null }),
624
+ __metadata("design:type", Object)
625
+ ], Content.prototype, "taggerId", void 0);
616
626
  __decorate([
617
627
  (0, mongoose_1.Prop)({ type: String, required: false }),
618
628
  __metadata("design:type", String)
@@ -706,4 +716,6 @@ exports.ContentSchema.index({ 'collabs.profile': 1 });
706
716
  // Chave de idempotência da captura da Primetag — conteúdos manuais (sem
707
717
  // primetagId) ficam fora do índice.
708
718
  exports.ContentSchema.index({ action: 1, primetagId: 1 }, { unique: true, partialFilterExpression: { primetagId: { $type: 'string' } } });
719
+ // Chave do import da Tagger (GD-767) — Conteúdos sem taggerId ficam fora.
720
+ exports.ContentSchema.index({ action: 1, taggerId: 1 }, { unique: true, partialFilterExpression: { taggerId: { $type: 'string' } } });
709
721
  exports.ContentModel = (0, mongoose_2.model)('Content', exports.ContentSchema);
@@ -26,7 +26,7 @@
26
26
  import { HydratedDocument, Schema as MongooseSchema, Types } from 'mongoose';
27
27
  import { Action } from './action.schema';
28
28
  export type JobDocument = HydratedDocument<Job>;
29
- export declare const JOB_ORIGINS: readonly ["trigger", "approval", "reclassify"];
29
+ export declare const JOB_ORIGINS: readonly ["trigger", "approval", "reclassify", "tagger"];
30
30
  export type JobOrigin = (typeof JOB_ORIGINS)[number];
31
31
  export declare const JOB_WORKERS: readonly ["api-campaigns", "content-capture-trigger", "content-capture", "comment-capture", "content-classification", "metrics-generator", "profile-sync"];
32
32
  export type JobWorker = (typeof JOB_WORKERS)[number];
@@ -12,7 +12,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.JobModel = exports.JobSchema = exports.Job = exports.JOB_STATUSES = exports.JOB_WORKERS = exports.JOB_ORIGINS = void 0;
13
13
  const mongoose_1 = require("@nestjs/mongoose");
14
14
  const mongoose_2 = require("mongoose");
15
- exports.JOB_ORIGINS = ['trigger', 'approval', 'reclassify'];
15
+ // tagger: import do JSON da Tagger na tela (GD-767).
16
+ exports.JOB_ORIGINS = ['trigger', 'approval', 'reclassify', 'tagger'];
16
17
  exports.JOB_WORKERS = [
17
18
  // Clique de aprovação (lote): quantos conteúdos o disparo colocou no pipeline.
18
19
  'api-campaigns',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grapadigital/shared-schemas",
3
- "version": "1.0.238",
3
+ "version": "1.0.239",
4
4
  "description": "Shared Mongoose Schemas",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -400,6 +400,10 @@ export type ContentCommentCountSource = (typeof CONTENT_COMMENT_COUNT_SOURCE_VAL
400
400
 
401
401
  export const CONTENT_METRICS_SOURCE_VALUES = ['real', 'organic', 'estimated'] as const;
402
402
 
403
+ /** Quem criou o Conteúdo (metricsFile = Métricas por arquivo, ainda sem uso). Ver GD-767. */
404
+ export const CONTENT_ORIGIN_VALUES = ['primetag', 'manual', 'tagger', 'metricsFile'] as const;
405
+ export type ContentOrigin = (typeof CONTENT_ORIGIN_VALUES)[number];
406
+
403
407
  /** Origem do Tipo e da Fase: auto = regra da captura, manual = quem revisou. Ver GD-691. */
404
408
  export const CONTENT_CLASSIFICATION_SOURCE_VALUES = ['auto', 'manual'] as const;
405
409
  export type ContentClassificationSource = (typeof CONTENT_CLASSIFICATION_SOURCE_VALUES)[number];
@@ -554,6 +558,17 @@ export class Content {
554
558
  @Prop({ type: String, required: false })
555
559
  primetagId?: string;
556
560
 
561
+ /**
562
+ * Quem criou o Conteúdo. A Tagger pode assumir um existente, e a captura da
563
+ * Primetag não toca Conteúdo da Tagger. Ver GD-767.
564
+ */
565
+ @Prop({ type: String, enum: CONTENT_ORIGIN_VALUES, required: false, default: null })
566
+ origin?: ContentOrigin | null;
567
+
568
+ /** id do post na Tagger (import de JSON, GD-767). */
569
+ @Prop({ type: String, required: false, default: null })
570
+ taggerId?: string | null;
571
+
557
572
  // runId da última captura que tocou o conteúdo (não o da rodada que o
558
573
  // criou) — a aprovação e a reclassificação reaproveitam esse runId pra
559
574
  // continuar na mesma trilha da coleção `jobs`.
@@ -664,5 +679,10 @@ ContentSchema.index(
664
679
  { action: 1, primetagId: 1 },
665
680
  { unique: true, partialFilterExpression: { primetagId: { $type: 'string' } } },
666
681
  );
682
+ // Chave do import da Tagger (GD-767) — Conteúdos sem taggerId ficam fora.
683
+ ContentSchema.index(
684
+ { action: 1, taggerId: 1 },
685
+ { unique: true, partialFilterExpression: { taggerId: { $type: 'string' } } },
686
+ );
667
687
 
668
688
  export const ContentModel = MongooseModel('Content', ContentSchema);
@@ -9,7 +9,8 @@ import { Action } from './action.schema';
9
9
 
10
10
  export type JobDocument = HydratedDocument<Job>;
11
11
 
12
- export const JOB_ORIGINS = ['trigger', 'approval', 'reclassify'] as const;
12
+ // tagger: import do JSON da Tagger na tela (GD-767).
13
+ export const JOB_ORIGINS = ['trigger', 'approval', 'reclassify', 'tagger'] as const;
13
14
  export type JobOrigin = (typeof JOB_ORIGINS)[number];
14
15
 
15
16
  export const JOB_WORKERS = [