agrs-sequelize-sdk 1.1.48 → 1.1.49
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/models/Channel.js +28 -5
- package/models/RSOCFeedCampaign.js +46 -31
- package/package.json +1 -1
package/models/Channel.js
CHANGED
|
@@ -17,10 +17,18 @@ module.exports = (sequelize, DataTypes) => {
|
|
|
17
17
|
allowNull: true,
|
|
18
18
|
defaultValue: "3544685732",
|
|
19
19
|
},
|
|
20
|
+
status: {
|
|
21
|
+
type: DataTypes.STRING,
|
|
22
|
+
allowNull: false,
|
|
23
|
+
defaultValue: "free",
|
|
24
|
+
validate: {
|
|
25
|
+
isIn: [["free", "used"]],
|
|
26
|
+
},
|
|
27
|
+
},
|
|
20
28
|
connectedCampaigns: {
|
|
21
29
|
type: DataTypes.JSON,
|
|
22
30
|
allowNull: true,
|
|
23
|
-
defaultValue: [],
|
|
31
|
+
defaultValue: [], // Array of objects: { campaignId, assignedAt, releasedAt }
|
|
24
32
|
},
|
|
25
33
|
createdAt: {
|
|
26
34
|
type: DataTypes.DATE,
|
|
@@ -46,20 +54,35 @@ module.exports = (sequelize, DataTypes) => {
|
|
|
46
54
|
});
|
|
47
55
|
};
|
|
48
56
|
|
|
57
|
+
// Hook to update status and history when a channel is created or updated
|
|
49
58
|
Channel.afterCreate(async (channel, options) => {
|
|
50
59
|
const campaigns = await sequelize.models.RSOCFeedCampaign.findAll({
|
|
51
60
|
where: { channelId: channel.channelId },
|
|
52
61
|
});
|
|
53
|
-
const campaignIds = campaigns.map((campaign) =>
|
|
54
|
-
|
|
62
|
+
const campaignIds = campaigns.map((campaign) => ({
|
|
63
|
+
campaignId: campaign.AGRS_CID,
|
|
64
|
+
assignedAt: new Date(),
|
|
65
|
+
releasedAt: null,
|
|
66
|
+
}));
|
|
67
|
+
if (campaignIds.length > 0) {
|
|
68
|
+
await channel.update({ status: "used", connectedCampaigns: campaignIds });
|
|
69
|
+
}
|
|
55
70
|
});
|
|
56
71
|
|
|
57
72
|
Channel.afterUpdate(async (channel, options) => {
|
|
58
73
|
const campaigns = await sequelize.models.RSOCFeedCampaign.findAll({
|
|
59
74
|
where: { channelId: channel.channelId },
|
|
60
75
|
});
|
|
61
|
-
const campaignIds = campaigns.map((campaign) =>
|
|
62
|
-
|
|
76
|
+
const campaignIds = campaigns.map((campaign) => ({
|
|
77
|
+
campaignId: campaign.AGRS_CID,
|
|
78
|
+
assignedAt: new Date(),
|
|
79
|
+
releasedAt: null,
|
|
80
|
+
}));
|
|
81
|
+
if (campaignIds.length > 0) {
|
|
82
|
+
await channel.update({ status: "used", connectedCampaigns: campaignIds });
|
|
83
|
+
} else {
|
|
84
|
+
await channel.update({ status: "free", connectedCampaigns: [] });
|
|
85
|
+
}
|
|
63
86
|
});
|
|
64
87
|
|
|
65
88
|
return Channel;
|
|
@@ -35,6 +35,10 @@ module.exports = (sequelize, DataTypes) => {
|
|
|
35
35
|
status: {
|
|
36
36
|
type: DataTypes.STRING,
|
|
37
37
|
allowNull: false,
|
|
38
|
+
defaultValue: "active",
|
|
39
|
+
validate: {
|
|
40
|
+
isIn: [["active", "inactive", "archived"]],
|
|
41
|
+
},
|
|
38
42
|
},
|
|
39
43
|
country: {
|
|
40
44
|
type: DataTypes.STRING,
|
|
@@ -43,6 +47,7 @@ module.exports = (sequelize, DataTypes) => {
|
|
|
43
47
|
vertical: {
|
|
44
48
|
type: DataTypes.STRING,
|
|
45
49
|
allowNull: false,
|
|
50
|
+
comment: "Maps to Article.category for dynamic selection",
|
|
46
51
|
},
|
|
47
52
|
freeText: {
|
|
48
53
|
type: DataTypes.TEXT,
|
|
@@ -60,9 +65,10 @@ module.exports = (sequelize, DataTypes) => {
|
|
|
60
65
|
type: DataTypes.ARRAY(DataTypes.STRING),
|
|
61
66
|
allowNull: true,
|
|
62
67
|
},
|
|
63
|
-
|
|
68
|
+
link: {
|
|
64
69
|
type: DataTypes.STRING(1024),
|
|
65
70
|
allowNull: true,
|
|
71
|
+
comment: "Campaign-specific URL based on article URL with parameters",
|
|
66
72
|
},
|
|
67
73
|
redirectLink: {
|
|
68
74
|
type: DataTypes.STRING(1024),
|
|
@@ -116,6 +122,14 @@ module.exports = (sequelize, DataTypes) => {
|
|
|
116
122
|
type: DataTypes.DATE,
|
|
117
123
|
defaultValue: DataTypes.NOW,
|
|
118
124
|
},
|
|
125
|
+
platform: {
|
|
126
|
+
type: DataTypes.STRING,
|
|
127
|
+
allowNull: false,
|
|
128
|
+
},
|
|
129
|
+
mediaBuyer: {
|
|
130
|
+
type: DataTypes.STRING,
|
|
131
|
+
allowNull: true,
|
|
132
|
+
},
|
|
119
133
|
},
|
|
120
134
|
{
|
|
121
135
|
tableName: "rsoc_feed_campaigns",
|
|
@@ -140,32 +154,28 @@ module.exports = (sequelize, DataTypes) => {
|
|
|
140
154
|
};
|
|
141
155
|
|
|
142
156
|
RSOCFeedCampaign.beforeCreate(async (campaign) => {
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
const redirectLink = `https://ktwrjqdfv.com/${AGRS_CID}?campaign_name={{campaign.name}}&adset_name={{adset.name}}&ad_name={{ad.name}}&campaign_id={{campaign.id}}&adset_id={{adset.id}}&ad_id={{ad.id}}_${AGRS_CID}&placement={{placement}}&site_source={{site_source}}&fbclid={{fbclid}}`;
|
|
146
|
-
campaign.setDataValue("redirectLink", redirectLink);
|
|
147
|
-
}
|
|
157
|
+
// Set redirectLink to null as requested
|
|
158
|
+
campaign.setDataValue("redirectLink", null);
|
|
148
159
|
|
|
149
160
|
const channel = await sequelize.models.Channel.findOne({
|
|
150
161
|
where: { channelId: campaign.channelId },
|
|
151
162
|
});
|
|
152
163
|
if (channel) {
|
|
153
164
|
const connectedCampaigns = channel.connectedCampaigns || [];
|
|
154
|
-
if (!connectedCampaigns.
|
|
155
|
-
connectedCampaigns.push(
|
|
156
|
-
|
|
165
|
+
if (!connectedCampaigns.some((c) => c.campaignId === campaign.AGRS_CID)) {
|
|
166
|
+
connectedCampaigns.push({
|
|
167
|
+
campaignId: campaign.AGRS_CID,
|
|
168
|
+
assignedAt: new Date(),
|
|
169
|
+
releasedAt: null,
|
|
170
|
+
});
|
|
171
|
+
await channel.update({ status: "used", connectedCampaigns });
|
|
157
172
|
}
|
|
158
173
|
}
|
|
159
174
|
});
|
|
160
175
|
|
|
161
176
|
RSOCFeedCampaign.beforeUpdate(async (campaign) => {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
if (AGRS_CID) {
|
|
165
|
-
const redirectLink = `https://ktwrjqdfv.com/${AGRS_CID}?campaign_name={{campaign.name}}&adset_name={{adset.name}}&ad_name={{ad.name}}&campaign_id={{campaign.id}}&adset_id={{adset.id}}&ad_id={{ad.id}}_${AGRS_CID}&placement={{placement}}&site_source={{site_source}}&fbclid={{fbclid}}`;
|
|
166
|
-
campaign.setDataValue("redirectLink", redirectLink);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
177
|
+
// Ensure redirectLink remains null
|
|
178
|
+
campaign.setDataValue("redirectLink", null);
|
|
169
179
|
|
|
170
180
|
if (campaign.changed("channelId")) {
|
|
171
181
|
const oldChannelId = campaign.previous("channelId");
|
|
@@ -177,10 +187,17 @@ module.exports = (sequelize, DataTypes) => {
|
|
|
177
187
|
});
|
|
178
188
|
if (oldChannel) {
|
|
179
189
|
const connectedCampaigns = oldChannel.connectedCampaigns || [];
|
|
180
|
-
const updatedCampaigns = connectedCampaigns
|
|
181
|
-
(
|
|
182
|
-
|
|
183
|
-
|
|
190
|
+
const updatedCampaigns = connectedCampaigns
|
|
191
|
+
.map((c) =>
|
|
192
|
+
c.campaignId === campaign.AGRS_CID
|
|
193
|
+
? { ...c, releasedAt: new Date() }
|
|
194
|
+
: c
|
|
195
|
+
)
|
|
196
|
+
.filter((c) => c.releasedAt === null);
|
|
197
|
+
await oldChannel.update({
|
|
198
|
+
connectedCampaigns: updatedCampaigns,
|
|
199
|
+
status: updatedCampaigns.length > 0 ? "used" : "free",
|
|
200
|
+
});
|
|
184
201
|
}
|
|
185
202
|
}
|
|
186
203
|
|
|
@@ -189,21 +206,19 @@ module.exports = (sequelize, DataTypes) => {
|
|
|
189
206
|
});
|
|
190
207
|
if (newChannel) {
|
|
191
208
|
const connectedCampaigns = newChannel.connectedCampaigns || [];
|
|
192
|
-
if (
|
|
193
|
-
connectedCampaigns.
|
|
194
|
-
|
|
209
|
+
if (
|
|
210
|
+
!connectedCampaigns.some((c) => c.campaignId === campaign.AGRS_CID)
|
|
211
|
+
) {
|
|
212
|
+
connectedCampaigns.push({
|
|
213
|
+
campaignId: campaign.AGRS_CID,
|
|
214
|
+
assignedAt: new Date(),
|
|
215
|
+
releasedAt: null,
|
|
216
|
+
});
|
|
217
|
+
await newChannel.update({ status: "used", connectedCampaigns });
|
|
195
218
|
}
|
|
196
219
|
}
|
|
197
220
|
}
|
|
198
221
|
});
|
|
199
222
|
|
|
200
|
-
RSOCFeedCampaign.beforeSave(async (campaign) => {
|
|
201
|
-
const AGRS_CID = campaign.getDataValue("AGRS_CID");
|
|
202
|
-
if (AGRS_CID && !campaign.getDataValue("redirectLink")) {
|
|
203
|
-
const redirectLink = `https://ktwrjqdfv.com/${AGRS_CID}?campaign_name={{campaign.name}}&adset_name={{adset.name}}&ad_name={{ad.name}}&campaign_id={{campaign.id}}&adset_id={{adset.id}}&ad_id={{ad.id}}_${AGRS_CID}&placement={{placement}}&site_source={{site_source}}&fbclid={{fbclid}}`;
|
|
204
|
-
campaign.setDataValue("redirectLink", redirectLink);
|
|
205
|
-
}
|
|
206
|
-
});
|
|
207
|
-
|
|
208
223
|
return RSOCFeedCampaign;
|
|
209
224
|
};
|