agrs-sequelize-sdk 1.2.80 → 1.2.82

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.
Files changed (42) hide show
  1. package/migrations/add-requested-from-dashboard-to-articles.js +17 -17
  2. package/models/AdAccountValues.js +25 -25
  3. package/models/AdHistory.js +30 -30
  4. package/models/AdPerformance.js +89 -89
  5. package/models/AdSet.js +289 -289
  6. package/models/AdSetHistory.js +30 -30
  7. package/models/AdsetPerformance.js +126 -126
  8. package/models/Article.js +170 -170
  9. package/models/AutomationRule.js +127 -127
  10. package/models/Buyers.js +25 -25
  11. package/models/Campaign.js +145 -145
  12. package/models/CampaignCreationLog.js +280 -280
  13. package/models/CampaignHistory.js +33 -33
  14. package/models/Channel.js +55 -55
  15. package/models/Domain.js +25 -25
  16. package/models/DynamicFeed.js +89 -89
  17. package/models/ExplorAdsChannel.js +61 -61
  18. package/models/Feed.js +33 -33
  19. package/models/FrontStoryChannel.js +59 -59
  20. package/models/Pages.js +73 -73
  21. package/models/PipelineExecution.js +59 -59
  22. package/models/Presets.js +34 -34
  23. package/models/RSOCFeedCampaign.js +357 -357
  24. package/models/RsocKeywordPerformance.js +110 -110
  25. package/models/RuleAction.js +90 -90
  26. package/models/RuleCondition.js +98 -98
  27. package/models/RuleExecution.js +107 -107
  28. package/models/RulesValues.js +56 -56
  29. package/models/SupportedLocale.js +23 -23
  30. package/models/SyncHistory.js +249 -249
  31. package/models/Tier2_AdAccounts.js +110 -0
  32. package/models/Tier2_BusinessManagers.js +105 -0
  33. package/models/Tier2_CreditLines.js +99 -0
  34. package/models/Tier2_Pages.js +91 -0
  35. package/models/Tier2_Pixels.js +82 -0
  36. package/models/Tier2_Tokens.js +72 -0
  37. package/models/TonicRSOCKeywordPerformance.js +122 -122
  38. package/models/Vertical.js +25 -25
  39. package/models/newFiles.js +110 -110
  40. package/package.json +19 -21
  41. package/run.sh +214 -214
  42. package/services/sequelizeService.js +63 -63
@@ -0,0 +1,105 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ const Tier2_BusinessManagers = sequelize.define(
3
+ "Tier2_BusinessManagers",
4
+ {
5
+ id: {
6
+ type: DataTypes.UUID,
7
+ defaultValue: DataTypes.UUIDV4,
8
+ primaryKey: true,
9
+ },
10
+ userId: {
11
+ type: DataTypes.UUID,
12
+ allowNull: false,
13
+ references: {
14
+ model: "Users",
15
+ key: "id",
16
+ },
17
+ onDelete: "CASCADE",
18
+ onUpdate: "CASCADE",
19
+ },
20
+ facebookBusinessId: {
21
+ type: DataTypes.STRING,
22
+ allowNull: false,
23
+ unique: true,
24
+ },
25
+ name: {
26
+ type: DataTypes.STRING,
27
+ allowNull: false,
28
+ },
29
+ clientName: {
30
+ type: DataTypes.STRING,
31
+ allowNull: true,
32
+ },
33
+ clientEmail: {
34
+ type: DataTypes.STRING,
35
+ allowNull: true,
36
+ },
37
+ currency: {
38
+ type: DataTypes.STRING,
39
+ allowNull: true,
40
+ },
41
+ verificationStatus: {
42
+ type: DataTypes.STRING,
43
+ allowNull: true,
44
+ },
45
+ status: {
46
+ type: DataTypes.STRING,
47
+ allowNull: false,
48
+ defaultValue: "active",
49
+ },
50
+ totalSpent: {
51
+ type: DataTypes.FLOAT,
52
+ allowNull: true,
53
+ defaultValue: 0,
54
+ },
55
+ lastSyncAt: {
56
+ type: DataTypes.DATE,
57
+ allowNull: true,
58
+ },
59
+ },
60
+ {
61
+ tableName: "Tier2_BusinessManagers",
62
+ indexes: [
63
+ {
64
+ fields: ["userId"],
65
+ },
66
+ {
67
+ fields: ["facebookBusinessId"],
68
+ unique: true,
69
+ },
70
+ {
71
+ fields: ["status"],
72
+ },
73
+ ],
74
+ }
75
+ );
76
+
77
+ Tier2_BusinessManagers.associate = (models) => {
78
+ Tier2_BusinessManagers.belongsTo(models.Users, {
79
+ foreignKey: "userId",
80
+ as: "user",
81
+ });
82
+
83
+ Tier2_BusinessManagers.hasMany(models.Tier2_AdAccounts, {
84
+ foreignKey: "businessManagerId",
85
+ as: "adAccounts",
86
+ });
87
+
88
+ Tier2_BusinessManagers.hasMany(models.Tier2_CreditLines, {
89
+ foreignKey: "businessManagerId",
90
+ as: "creditLines",
91
+ });
92
+
93
+ Tier2_BusinessManagers.hasMany(models.Tier2_Pages, {
94
+ foreignKey: "businessManagerId",
95
+ as: "pages",
96
+ });
97
+
98
+ Tier2_BusinessManagers.hasMany(models.Tier2_Pixels, {
99
+ foreignKey: "businessManagerId",
100
+ as: "pixels",
101
+ });
102
+ };
103
+
104
+ return Tier2_BusinessManagers;
105
+ };
@@ -0,0 +1,99 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ const Tier2_CreditLines = sequelize.define(
3
+ "Tier2_CreditLines",
4
+ {
5
+ id: {
6
+ type: DataTypes.UUID,
7
+ defaultValue: DataTypes.UUIDV4,
8
+ primaryKey: true,
9
+ },
10
+ userId: {
11
+ type: DataTypes.UUID,
12
+ allowNull: false,
13
+ references: {
14
+ model: "Users",
15
+ key: "id",
16
+ },
17
+ onDelete: "CASCADE",
18
+ onUpdate: "CASCADE",
19
+ },
20
+ businessManagerId: {
21
+ type: DataTypes.UUID,
22
+ allowNull: false,
23
+ references: {
24
+ model: "Tier2_BusinessManagers",
25
+ key: "id",
26
+ },
27
+ onDelete: "CASCADE",
28
+ onUpdate: "CASCADE",
29
+ },
30
+ facebookCreditLineId: {
31
+ type: DataTypes.STRING,
32
+ allowNull: false,
33
+ unique: true,
34
+ },
35
+ displayString: {
36
+ type: DataTypes.STRING,
37
+ allowNull: true,
38
+ },
39
+ legalEntityName: {
40
+ type: DataTypes.STRING,
41
+ allowNull: true,
42
+ },
43
+ currency: {
44
+ type: DataTypes.STRING,
45
+ allowNull: true,
46
+ },
47
+ creditLimit: {
48
+ type: DataTypes.FLOAT,
49
+ allowNull: true,
50
+ },
51
+ amountOwed: {
52
+ type: DataTypes.FLOAT,
53
+ allowNull: true,
54
+ defaultValue: 0,
55
+ },
56
+ availableCredit: {
57
+ type: DataTypes.FLOAT,
58
+ allowNull: true,
59
+ },
60
+ status: {
61
+ type: DataTypes.STRING,
62
+ allowNull: true,
63
+ },
64
+ lastSyncAt: {
65
+ type: DataTypes.DATE,
66
+ allowNull: true,
67
+ },
68
+ },
69
+ {
70
+ tableName: "Tier2_CreditLines",
71
+ indexes: [
72
+ {
73
+ fields: ["userId"],
74
+ },
75
+ {
76
+ fields: ["businessManagerId"],
77
+ },
78
+ {
79
+ fields: ["facebookCreditLineId"],
80
+ unique: true,
81
+ },
82
+ ],
83
+ }
84
+ );
85
+
86
+ Tier2_CreditLines.associate = (models) => {
87
+ Tier2_CreditLines.belongsTo(models.Users, {
88
+ foreignKey: "userId",
89
+ as: "user",
90
+ });
91
+
92
+ Tier2_CreditLines.belongsTo(models.Tier2_BusinessManagers, {
93
+ foreignKey: "businessManagerId",
94
+ as: "businessManager",
95
+ });
96
+ };
97
+
98
+ return Tier2_CreditLines;
99
+ };
@@ -0,0 +1,91 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ const Tier2_Pages = sequelize.define(
3
+ "Tier2_Pages",
4
+ {
5
+ id: {
6
+ type: DataTypes.UUID,
7
+ defaultValue: DataTypes.UUIDV4,
8
+ primaryKey: true,
9
+ },
10
+ userId: {
11
+ type: DataTypes.UUID,
12
+ allowNull: false,
13
+ references: {
14
+ model: "Users",
15
+ key: "id",
16
+ },
17
+ onDelete: "CASCADE",
18
+ onUpdate: "CASCADE",
19
+ },
20
+ businessManagerId: {
21
+ type: DataTypes.UUID,
22
+ allowNull: false,
23
+ references: {
24
+ model: "Tier2_BusinessManagers",
25
+ key: "id",
26
+ },
27
+ onDelete: "CASCADE",
28
+ onUpdate: "CASCADE",
29
+ },
30
+ facebookPageId: {
31
+ type: DataTypes.STRING,
32
+ allowNull: false,
33
+ unique: true,
34
+ },
35
+ name: {
36
+ type: DataTypes.STRING,
37
+ allowNull: false,
38
+ },
39
+ category: {
40
+ type: DataTypes.STRING,
41
+ allowNull: true,
42
+ },
43
+ link: {
44
+ type: DataTypes.STRING,
45
+ allowNull: true,
46
+ },
47
+ status: {
48
+ type: DataTypes.STRING,
49
+ allowNull: true,
50
+ },
51
+ accessToken: {
52
+ type: DataTypes.TEXT,
53
+ allowNull: true,
54
+ // This will be encrypted at the application level
55
+ },
56
+ lastSyncAt: {
57
+ type: DataTypes.DATE,
58
+ allowNull: true,
59
+ },
60
+ },
61
+ {
62
+ tableName: "Tier2_Pages",
63
+ indexes: [
64
+ {
65
+ fields: ["userId"],
66
+ },
67
+ {
68
+ fields: ["businessManagerId"],
69
+ },
70
+ {
71
+ fields: ["facebookPageId"],
72
+ unique: true,
73
+ },
74
+ ],
75
+ }
76
+ );
77
+
78
+ Tier2_Pages.associate = (models) => {
79
+ Tier2_Pages.belongsTo(models.Users, {
80
+ foreignKey: "userId",
81
+ as: "user",
82
+ });
83
+
84
+ Tier2_Pages.belongsTo(models.Tier2_BusinessManagers, {
85
+ foreignKey: "businessManagerId",
86
+ as: "businessManager",
87
+ });
88
+ };
89
+
90
+ return Tier2_Pages;
91
+ };
@@ -0,0 +1,82 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ const Tier2_Pixels = sequelize.define(
3
+ "Tier2_Pixels",
4
+ {
5
+ id: {
6
+ type: DataTypes.UUID,
7
+ defaultValue: DataTypes.UUIDV4,
8
+ primaryKey: true,
9
+ },
10
+ userId: {
11
+ type: DataTypes.UUID,
12
+ allowNull: false,
13
+ references: {
14
+ model: "Users",
15
+ key: "id",
16
+ },
17
+ onDelete: "CASCADE",
18
+ onUpdate: "CASCADE",
19
+ },
20
+ businessManagerId: {
21
+ type: DataTypes.UUID,
22
+ allowNull: false,
23
+ references: {
24
+ model: "Tier2_BusinessManagers",
25
+ key: "id",
26
+ },
27
+ onDelete: "CASCADE",
28
+ onUpdate: "CASCADE",
29
+ },
30
+ facebookPixelId: {
31
+ type: DataTypes.STRING,
32
+ allowNull: false,
33
+ unique: true,
34
+ },
35
+ name: {
36
+ type: DataTypes.STRING,
37
+ allowNull: false,
38
+ },
39
+ code: {
40
+ type: DataTypes.TEXT,
41
+ allowNull: true,
42
+ },
43
+ status: {
44
+ type: DataTypes.STRING,
45
+ allowNull: true,
46
+ },
47
+ lastSyncAt: {
48
+ type: DataTypes.DATE,
49
+ allowNull: true,
50
+ },
51
+ },
52
+ {
53
+ tableName: "Tier2_Pixels",
54
+ indexes: [
55
+ {
56
+ fields: ["userId"],
57
+ },
58
+ {
59
+ fields: ["businessManagerId"],
60
+ },
61
+ {
62
+ fields: ["facebookPixelId"],
63
+ unique: true,
64
+ },
65
+ ],
66
+ }
67
+ );
68
+
69
+ Tier2_Pixels.associate = (models) => {
70
+ Tier2_Pixels.belongsTo(models.Users, {
71
+ foreignKey: "userId",
72
+ as: "user",
73
+ });
74
+
75
+ Tier2_Pixels.belongsTo(models.Tier2_BusinessManagers, {
76
+ foreignKey: "businessManagerId",
77
+ as: "businessManager",
78
+ });
79
+ };
80
+
81
+ return Tier2_Pixels;
82
+ };
@@ -0,0 +1,72 @@
1
+ module.exports = (sequelize, DataTypes) => {
2
+ const Tier2_Tokens = sequelize.define(
3
+ "Tier2_Tokens",
4
+ {
5
+ id: {
6
+ type: DataTypes.UUID,
7
+ defaultValue: DataTypes.UUIDV4,
8
+ primaryKey: true,
9
+ },
10
+ userId: {
11
+ type: DataTypes.UUID,
12
+ allowNull: false,
13
+ unique: true,
14
+ references: {
15
+ model: "Users",
16
+ key: "id",
17
+ },
18
+ onDelete: "CASCADE",
19
+ onUpdate: "CASCADE",
20
+ },
21
+ accessToken: {
22
+ type: DataTypes.TEXT,
23
+ allowNull: false,
24
+ // This will be encrypted at the application level
25
+ },
26
+ tokenType: {
27
+ type: DataTypes.STRING,
28
+ allowNull: false,
29
+ defaultValue: "facebook",
30
+ },
31
+ expiresAt: {
32
+ type: DataTypes.DATE,
33
+ allowNull: true,
34
+ },
35
+ scopes: {
36
+ type: DataTypes.ARRAY(DataTypes.STRING),
37
+ allowNull: false,
38
+ defaultValue: [],
39
+ },
40
+ isValid: {
41
+ type: DataTypes.BOOLEAN,
42
+ allowNull: false,
43
+ defaultValue: true,
44
+ },
45
+ lastValidated: {
46
+ type: DataTypes.DATE,
47
+ allowNull: true,
48
+ },
49
+ },
50
+ {
51
+ tableName: "Tier2_Tokens",
52
+ indexes: [
53
+ {
54
+ fields: ["userId"],
55
+ unique: true,
56
+ },
57
+ {
58
+ fields: ["isValid"],
59
+ },
60
+ ],
61
+ }
62
+ );
63
+
64
+ Tier2_Tokens.associate = (models) => {
65
+ Tier2_Tokens.belongsTo(models.Users, {
66
+ foreignKey: "userId",
67
+ as: "user",
68
+ });
69
+ };
70
+
71
+ return Tier2_Tokens;
72
+ };
@@ -1,123 +1,123 @@
1
- module.exports = (sequelize, DataTypes) => {
2
- const TonicRSOCKeywordPerformance = sequelize.define(
3
- "TonicRSOCKeywordPerformance",
4
- {
5
- Date: {
6
- type: DataTypes.DATEONLY,
7
- primaryKey: true,
8
- },
9
- adID: {
10
- type: DataTypes.STRING,
11
- references: {
12
- model: "Ad",
13
- key: "AdID",
14
- },
15
- foreignKey: true,
16
- primaryKey: true,
17
- },
18
- Keyword: {
19
- type: DataTypes.STRING,
20
- allowNull: false,
21
- primaryKey: true,
22
- },
23
- Country: {
24
- type: DataTypes.STRING,
25
- allowNull: false,
26
- primaryKey: true, // ✅ Country is now part of primary key
27
- },
28
- Revenue: {
29
- type: DataTypes.FLOAT,
30
- allowNull: false,
31
- },
32
- Clicks: {
33
- type: DataTypes.INTEGER,
34
- allowNull: false,
35
- },
36
- TemplatedKeyword: {
37
- type: DataTypes.STRING,
38
- allowNull: true,
39
- },
40
- FirstAppearanceDate: {
41
- type: DataTypes.DATEONLY,
42
- allowNull: true,
43
- },
44
- },
45
- {
46
- tableName: "TonicRSOCKeywordPerformance",
47
- indexes: [
48
- {
49
- unique: true,
50
- fields: ["Date", "adID", "Keyword", "Country"],
51
- name: "tonic_primary_idx" // ✅ Custom short name
52
- },
53
- {
54
- fields: ["Date"],
55
- name: "tonic_date_idx"
56
- },
57
- {
58
- fields: ["adID"],
59
- name: "tonic_adid_idx"
60
- },
61
- {
62
- fields: ["Keyword"],
63
- name: "tonic_keyword_idx"
64
- },
65
- {
66
- fields: ["Country"],
67
- name: "tonic_country_idx"
68
- },
69
- {
70
- fields: ["Revenue"],
71
- name: "tonic_revenue_idx"
72
- },
73
- {
74
- fields: ["Clicks"],
75
- name: "tonic_clicks_idx"
76
- },
77
- {
78
- fields: ["Country", "Date"],
79
- name: "tonic_country_date_idx"
80
- },
81
- {
82
- fields: ["Keyword", "Country"],
83
- name: "tonic_keyword_country_idx"
84
- },
85
- {
86
- fields: ["Date", "Revenue"],
87
- name: "tonic_date_revenue_idx"
88
- },
89
- ],
90
- hooks: {
91
- beforeCreate: async (record, options) => {
92
- try {
93
- const existingKeyword = await sequelize.models.TonicRSOCKeywordPerformance.findOne({
94
- where: {
95
- Keyword: sequelize.where(
96
- sequelize.fn("LOWER", sequelize.col("Keyword")),
97
- sequelize.fn("LOWER", record.Keyword)
98
- ),
99
- Country: record.Country,
100
- },
101
- attributes: ["FirstAppearanceDate"],
102
- transaction: options.transaction,
103
- });
104
-
105
- record.FirstAppearanceDate =
106
- existingKeyword?.FirstAppearanceDate || record.Date;
107
- } catch (error) {
108
- console.error("Error in TonicRSOCKeywordPerformance FirstAppearanceDate hook:", error);
109
- throw error;
110
- }
111
- },
112
- },
113
- }
114
- );
115
-
116
- TonicRSOCKeywordPerformance.associate = (models) => {
117
- TonicRSOCKeywordPerformance.belongsTo(models.Ad, {
118
- foreignKey: "adID",
119
- });
120
- };
121
-
122
- return TonicRSOCKeywordPerformance;
1
+ module.exports = (sequelize, DataTypes) => {
2
+ const TonicRSOCKeywordPerformance = sequelize.define(
3
+ "TonicRSOCKeywordPerformance",
4
+ {
5
+ Date: {
6
+ type: DataTypes.DATEONLY,
7
+ primaryKey: true,
8
+ },
9
+ adID: {
10
+ type: DataTypes.STRING,
11
+ references: {
12
+ model: "Ad",
13
+ key: "AdID",
14
+ },
15
+ foreignKey: true,
16
+ primaryKey: true,
17
+ },
18
+ Keyword: {
19
+ type: DataTypes.STRING,
20
+ allowNull: false,
21
+ primaryKey: true,
22
+ },
23
+ Country: {
24
+ type: DataTypes.STRING,
25
+ allowNull: false,
26
+ primaryKey: true, // ✅ Country is now part of primary key
27
+ },
28
+ Revenue: {
29
+ type: DataTypes.FLOAT,
30
+ allowNull: false,
31
+ },
32
+ Clicks: {
33
+ type: DataTypes.INTEGER,
34
+ allowNull: false,
35
+ },
36
+ TemplatedKeyword: {
37
+ type: DataTypes.STRING,
38
+ allowNull: true,
39
+ },
40
+ FirstAppearanceDate: {
41
+ type: DataTypes.DATEONLY,
42
+ allowNull: true,
43
+ },
44
+ },
45
+ {
46
+ tableName: "TonicRSOCKeywordPerformance",
47
+ indexes: [
48
+ {
49
+ unique: true,
50
+ fields: ["Date", "adID", "Keyword", "Country"],
51
+ name: "tonic_primary_idx" // ✅ Custom short name
52
+ },
53
+ {
54
+ fields: ["Date"],
55
+ name: "tonic_date_idx"
56
+ },
57
+ {
58
+ fields: ["adID"],
59
+ name: "tonic_adid_idx"
60
+ },
61
+ {
62
+ fields: ["Keyword"],
63
+ name: "tonic_keyword_idx"
64
+ },
65
+ {
66
+ fields: ["Country"],
67
+ name: "tonic_country_idx"
68
+ },
69
+ {
70
+ fields: ["Revenue"],
71
+ name: "tonic_revenue_idx"
72
+ },
73
+ {
74
+ fields: ["Clicks"],
75
+ name: "tonic_clicks_idx"
76
+ },
77
+ {
78
+ fields: ["Country", "Date"],
79
+ name: "tonic_country_date_idx"
80
+ },
81
+ {
82
+ fields: ["Keyword", "Country"],
83
+ name: "tonic_keyword_country_idx"
84
+ },
85
+ {
86
+ fields: ["Date", "Revenue"],
87
+ name: "tonic_date_revenue_idx"
88
+ },
89
+ ],
90
+ hooks: {
91
+ beforeCreate: async (record, options) => {
92
+ try {
93
+ const existingKeyword = await sequelize.models.TonicRSOCKeywordPerformance.findOne({
94
+ where: {
95
+ Keyword: sequelize.where(
96
+ sequelize.fn("LOWER", sequelize.col("Keyword")),
97
+ sequelize.fn("LOWER", record.Keyword)
98
+ ),
99
+ Country: record.Country,
100
+ },
101
+ attributes: ["FirstAppearanceDate"],
102
+ transaction: options.transaction,
103
+ });
104
+
105
+ record.FirstAppearanceDate =
106
+ existingKeyword?.FirstAppearanceDate || record.Date;
107
+ } catch (error) {
108
+ console.error("Error in TonicRSOCKeywordPerformance FirstAppearanceDate hook:", error);
109
+ throw error;
110
+ }
111
+ },
112
+ },
113
+ }
114
+ );
115
+
116
+ TonicRSOCKeywordPerformance.associate = (models) => {
117
+ TonicRSOCKeywordPerformance.belongsTo(models.Ad, {
118
+ foreignKey: "adID",
119
+ });
120
+ };
121
+
122
+ return TonicRSOCKeywordPerformance;
123
123
  };