@grapadigital/shared-schemas 1.0.238 → 1.0.240
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.
- package/dist/schemas/client.schema.d.ts +20 -0
- package/dist/schemas/client.schema.js +25 -1
- package/dist/schemas/content.schema.d.ts +10 -0
- package/dist/schemas/content.schema.js +13 -1
- package/dist/schemas/influencer.schema.d.ts +1 -1
- package/dist/schemas/job.schema.d.ts +1 -1
- package/dist/schemas/job.schema.js +2 -1
- package/dist/schemas/recruitment.schema.d.ts +3 -3
- package/package.json +1 -1
- package/src/schemas/client.schema.ts +20 -0
- package/src/schemas/content.schema.ts +20 -0
- package/src/schemas/influencer.schema.ts +1 -1
- package/src/schemas/job.schema.ts +2 -1
- package/src/schemas/recruitment.schema.ts +3 -3
|
@@ -58,6 +58,24 @@ export declare const ClusterSchema: MongooseSchema<Cluster, import("mongoose").M
|
|
|
58
58
|
} & {
|
|
59
59
|
__v: number;
|
|
60
60
|
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Squad do cliente (ex.: { key: 'alto_padrao', label: 'Alto Padrão' }). A chave
|
|
63
|
+
* é gravada no Recrutamento (`scope.squad`) e no Contrato (`squad`); o label é
|
|
64
|
+
* o texto da tela. Ver GD-770.
|
|
65
|
+
*/
|
|
66
|
+
export declare class ClientSquad {
|
|
67
|
+
key: string;
|
|
68
|
+
label: string;
|
|
69
|
+
}
|
|
70
|
+
export declare const ClientSquadSchema: MongooseSchema<ClientSquad, import("mongoose").Model<ClientSquad, any, any, any, import("mongoose").Document<unknown, any, ClientSquad, any, {}> & ClientSquad & {
|
|
71
|
+
_id: Types.ObjectId;
|
|
72
|
+
} & {
|
|
73
|
+
__v: number;
|
|
74
|
+
}, any>, {}, {}, {}, {}, import("mongoose").DefaultSchemaOptions, ClientSquad, import("mongoose").Document<unknown, {}, import("mongoose").FlatRecord<ClientSquad>, {}, import("mongoose").ResolveSchemaOptions<import("mongoose").DefaultSchemaOptions>> & import("mongoose").FlatRecord<ClientSquad> & {
|
|
75
|
+
_id: Types.ObjectId;
|
|
76
|
+
} & {
|
|
77
|
+
__v: number;
|
|
78
|
+
}>;
|
|
61
79
|
export declare class Company {
|
|
62
80
|
legalName: string;
|
|
63
81
|
document: string;
|
|
@@ -214,6 +232,8 @@ export declare class Client extends Party {
|
|
|
214
232
|
tiers: ClientTier[];
|
|
215
233
|
/** Metas anuais do cliente (só com Personalização Samsung por enquanto). Ver GD-687. */
|
|
216
234
|
annualGoals: ClientAnnualGoal[];
|
|
235
|
+
/** Squads do cliente, para qualquer cliente. Ver `ClientSquad` e GD-770. */
|
|
236
|
+
squads: ClientSquad[];
|
|
217
237
|
/**
|
|
218
238
|
* Client de organização (ex.: "Oma Creators"): representa a organização
|
|
219
239
|
* inteira, não uma marca. No hub, mostra todas as actions dessa organização
|
|
@@ -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.ClientModel = exports.ClientSchema = exports.Client = exports.ClientResponsibleSchema = exports.ClientResponsible = exports.NicheItemSchema = exports.NicheItem = exports.AgencyCommissionPeriodSchema = exports.AgencyCommissionPeriod = exports.ClientAnnualGoalSchema = exports.ClientAnnualGoal = exports.ClientTierSchema = exports.ClientTier = exports.ClientMetricGoalSchema = exports.ClientMetricGoal = exports.CommissionRangeSchema = exports.CommissionRange = exports.CompanySchema = exports.Company = exports.ClusterSchema = exports.Cluster = exports.CLIENT_GOAL_METRIC_UNITS = exports.CLIENT_GOAL_METRIC_VALUES = exports.CLIENT_CUSTOMIZATION_VALUES = void 0;
|
|
12
|
+
exports.ClientModel = exports.ClientSchema = exports.Client = exports.ClientResponsibleSchema = exports.ClientResponsible = exports.NicheItemSchema = exports.NicheItem = exports.AgencyCommissionPeriodSchema = exports.AgencyCommissionPeriod = exports.ClientAnnualGoalSchema = exports.ClientAnnualGoal = exports.ClientTierSchema = exports.ClientTier = exports.ClientMetricGoalSchema = exports.ClientMetricGoal = exports.CommissionRangeSchema = exports.CommissionRange = exports.CompanySchema = exports.Company = exports.ClientSquadSchema = exports.ClientSquad = exports.ClusterSchema = exports.Cluster = exports.CLIENT_GOAL_METRIC_UNITS = exports.CLIENT_GOAL_METRIC_VALUES = exports.CLIENT_CUSTOMIZATION_VALUES = void 0;
|
|
13
13
|
const mongoose_1 = require("@nestjs/mongoose");
|
|
14
14
|
const swagger_1 = require("@nestjs/swagger");
|
|
15
15
|
const mongoose_2 = require("mongoose");
|
|
@@ -82,6 +82,26 @@ Cluster = __decorate([
|
|
|
82
82
|
], Cluster);
|
|
83
83
|
exports.Cluster = Cluster;
|
|
84
84
|
exports.ClusterSchema = mongoose_1.SchemaFactory.createForClass(Cluster);
|
|
85
|
+
/**
|
|
86
|
+
* Squad do cliente (ex.: { key: 'alto_padrao', label: 'Alto Padrão' }). A chave
|
|
87
|
+
* é gravada no Recrutamento (`scope.squad`) e no Contrato (`squad`); o label é
|
|
88
|
+
* o texto da tela. Ver GD-770.
|
|
89
|
+
*/
|
|
90
|
+
let ClientSquad = class ClientSquad {
|
|
91
|
+
};
|
|
92
|
+
__decorate([
|
|
93
|
+
(0, mongoose_1.Prop)({ required: true }),
|
|
94
|
+
__metadata("design:type", String)
|
|
95
|
+
], ClientSquad.prototype, "key", void 0);
|
|
96
|
+
__decorate([
|
|
97
|
+
(0, mongoose_1.Prop)({ required: true }),
|
|
98
|
+
__metadata("design:type", String)
|
|
99
|
+
], ClientSquad.prototype, "label", void 0);
|
|
100
|
+
ClientSquad = __decorate([
|
|
101
|
+
(0, mongoose_1.Schema)({ _id: false })
|
|
102
|
+
], ClientSquad);
|
|
103
|
+
exports.ClientSquad = ClientSquad;
|
|
104
|
+
exports.ClientSquadSchema = mongoose_1.SchemaFactory.createForClass(ClientSquad);
|
|
85
105
|
let Company = class Company {
|
|
86
106
|
};
|
|
87
107
|
__decorate([
|
|
@@ -295,6 +315,10 @@ __decorate([
|
|
|
295
315
|
(0, mongoose_1.Prop)({ type: [exports.ClientAnnualGoalSchema], default: [] }),
|
|
296
316
|
__metadata("design:type", Array)
|
|
297
317
|
], Client.prototype, "annualGoals", void 0);
|
|
318
|
+
__decorate([
|
|
319
|
+
(0, mongoose_1.Prop)({ type: [exports.ClientSquadSchema], default: [] }),
|
|
320
|
+
__metadata("design:type", Array)
|
|
321
|
+
], Client.prototype, "squads", void 0);
|
|
298
322
|
__decorate([
|
|
299
323
|
(0, mongoose_1.Prop)({ type: mongoose_2.Schema.Types.ObjectId, ref: 'Organization', required: false }),
|
|
300
324
|
__metadata("design:type", mongoose_2.Types.ObjectId)
|
|
@@ -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);
|
|
@@ -110,7 +110,7 @@ export declare class InfluencerContract {
|
|
|
110
110
|
contractedCostPerImpact?: number | null;
|
|
111
111
|
/** E/R contratual, em fração (0,02 = 2%). */
|
|
112
112
|
contractedEngagementRate?: number | null;
|
|
113
|
-
/**
|
|
113
|
+
/** Chave de `Client.squads` do cliente do Contrato (ex.: `team_galaxy`). Ver GD-770. */
|
|
114
114
|
squad?: string | null;
|
|
115
115
|
/** Ex.: "Technology", "Camera", "Fashion". */
|
|
116
116
|
passionPoint?: string | null;
|
|
@@ -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
|
-
|
|
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',
|
|
@@ -191,9 +191,9 @@ export declare class Scope {
|
|
|
191
191
|
exchange?: Exchange;
|
|
192
192
|
exclusivity?: boolean;
|
|
193
193
|
/**
|
|
194
|
-
* Squad do Influenciador nesta Ação (ex.:
|
|
195
|
-
*
|
|
196
|
-
* Squad da Samsung
|
|
194
|
+
* Squad do Influenciador nesta Ação: chave de `Client.squads` (ex.:
|
|
195
|
+
* `team_galaxy`). Nasce com o Squad do Contrato e é editável no escopo; a aba
|
|
196
|
+
* Squads do Hub e os filtros de Squad da Samsung usam este valor. Ver GD-770.
|
|
197
197
|
*/
|
|
198
198
|
squad?: string | null;
|
|
199
199
|
estimates?: ScopeEstimates;
|
package/package.json
CHANGED
|
@@ -82,6 +82,22 @@ export class Cluster {
|
|
|
82
82
|
|
|
83
83
|
export const ClusterSchema = SchemaFactory.createForClass(Cluster);
|
|
84
84
|
|
|
85
|
+
/**
|
|
86
|
+
* Squad do cliente (ex.: { key: 'alto_padrao', label: 'Alto Padrão' }). A chave
|
|
87
|
+
* é gravada no Recrutamento (`scope.squad`) e no Contrato (`squad`); o label é
|
|
88
|
+
* o texto da tela. Ver GD-770.
|
|
89
|
+
*/
|
|
90
|
+
@Schema({ _id: false })
|
|
91
|
+
export class ClientSquad {
|
|
92
|
+
@Prop({ required: true })
|
|
93
|
+
key: string;
|
|
94
|
+
|
|
95
|
+
@Prop({ required: true })
|
|
96
|
+
label: string;
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
export const ClientSquadSchema = SchemaFactory.createForClass(ClientSquad);
|
|
100
|
+
|
|
85
101
|
@Schema({ _id: false })
|
|
86
102
|
export class Company {
|
|
87
103
|
@Prop()
|
|
@@ -267,6 +283,10 @@ export class Client extends Party {
|
|
|
267
283
|
@Prop({ type: [ClientAnnualGoalSchema], default: [] })
|
|
268
284
|
annualGoals: ClientAnnualGoal[];
|
|
269
285
|
|
|
286
|
+
/** Squads do cliente, para qualquer cliente. Ver `ClientSquad` e GD-770. */
|
|
287
|
+
@Prop({ type: [ClientSquadSchema], default: [] })
|
|
288
|
+
squads: ClientSquad[];
|
|
289
|
+
|
|
270
290
|
/**
|
|
271
291
|
* Client de organização (ex.: "Oma Creators"): representa a organização
|
|
272
292
|
* inteira, não uma marca. No hub, mostra todas as actions dessa organização
|
|
@@ -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);
|
|
@@ -140,7 +140,7 @@ export class InfluencerContract {
|
|
|
140
140
|
@Prop({ type: Number, required: false, default: null })
|
|
141
141
|
contractedEngagementRate?: number | null;
|
|
142
142
|
|
|
143
|
-
/**
|
|
143
|
+
/** Chave de `Client.squads` do cliente do Contrato (ex.: `team_galaxy`). Ver GD-770. */
|
|
144
144
|
@Prop({ type: String, required: false, default: null })
|
|
145
145
|
squad?: string | null;
|
|
146
146
|
|
|
@@ -9,7 +9,8 @@ import { Action } from './action.schema';
|
|
|
9
9
|
|
|
10
10
|
export type JobDocument = HydratedDocument<Job>;
|
|
11
11
|
|
|
12
|
-
|
|
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 = [
|
|
@@ -185,9 +185,9 @@ export class Scope {
|
|
|
185
185
|
exclusivity?: boolean;
|
|
186
186
|
|
|
187
187
|
/**
|
|
188
|
-
* Squad do Influenciador nesta Ação (ex.:
|
|
189
|
-
*
|
|
190
|
-
* Squad da Samsung
|
|
188
|
+
* Squad do Influenciador nesta Ação: chave de `Client.squads` (ex.:
|
|
189
|
+
* `team_galaxy`). Nasce com o Squad do Contrato e é editável no escopo; a aba
|
|
190
|
+
* Squads do Hub e os filtros de Squad da Samsung usam este valor. Ver GD-770.
|
|
191
191
|
*/
|
|
192
192
|
@Prop({ type: String, required: false, default: null })
|
|
193
193
|
squad?: string | null;
|