@plusscommunities/pluss-newsletter-aws-sharing 1.2.14 → 1.3.5
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/common/helper/audience/filterByAudienceType.js +3 -0
- package/common/helper/opengraph/getOpenGraph.js +29 -2
- package/feature.config.coaching.js +3 -1
- package/feature.config.curatedposts.js +3 -1
- package/feature.config.default.js +3 -1
- package/feature.config.headoffice.js +3 -1
- package/feature.config.js +3 -1
- package/feature.config.menu.js +3 -1
- package/feature.config.noticeboard.js +3 -1
- package/{feature.config.personaldevelopmenthub.js → feature.config.personaldev.js} +23 -23
- package/feature.config.sales.js +3 -1
- package/feature.config.sharing.js +3 -1
- package/feature.config.training.js +3 -1
- package/getFeaturedNewsletterEntries.js +47 -50
- package/getNewsletterEntries.js +62 -65
- package/getRecentNewsletterEntries.js +49 -50
- package/package-lock.json +4 -4
- package/package.json +2 -2
|
@@ -1,3 +1,30 @@
|
|
|
1
|
-
const getOpenGraph = require("@plusscommunities/pluss-core-aws/helper/opengraph/getOpenGraph");
|
|
1
|
+
// const getOpenGraph = require("@plusscommunities/pluss-core-aws/helper/opengraph/getOpenGraph");
|
|
2
2
|
|
|
3
|
-
module.exports = getOpenGraph;
|
|
3
|
+
// module.exports = getOpenGraph;
|
|
4
|
+
|
|
5
|
+
const axios = require("axios");
|
|
6
|
+
|
|
7
|
+
module.exports = async (url) => {
|
|
8
|
+
return new Promise(async (resolve, reject) => {
|
|
9
|
+
const request = {
|
|
10
|
+
method: "GET",
|
|
11
|
+
url: "https://opengraph-io.p.rapidapi.com/api/1.1/sites",
|
|
12
|
+
params: {
|
|
13
|
+
url,
|
|
14
|
+
accept_lang: "en-US,en;q=0.9",
|
|
15
|
+
max_cache_age: "432000000",
|
|
16
|
+
},
|
|
17
|
+
headers: {
|
|
18
|
+
"x-rapidapi-host": "opengraph-io.p.rapidapi.com",
|
|
19
|
+
"x-rapidapi-key": "3941bc0a39msh60f09652e936b3dp1afe26jsn4163bac965cc",
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
const response = await axios(request);
|
|
25
|
+
return resolve(response.data);
|
|
26
|
+
} catch (e) {
|
|
27
|
+
return reject(e);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
};
|
|
@@ -19,6 +19,7 @@ const values = {
|
|
|
19
19
|
notificationRejectNewsSubmission: "RejectNewsSubmissionCoaching",
|
|
20
20
|
notificationNewsletterPublished: "NewsletterPublishedCoaching",
|
|
21
21
|
routeEntityPath: "/newsCoaching/article/:id",
|
|
22
|
+
screenNewsletterPost: "newsletterPostCoaching",
|
|
22
23
|
textNewNewsletterSubmission: "New Coaching Submission",
|
|
23
24
|
textHasSubmittedANewNewsletterPost:
|
|
24
25
|
"has submitted a new coaching for review.",
|
|
@@ -35,7 +36,8 @@ exports.entity = {
|
|
|
35
36
|
permission: values.permissionNewsletter,
|
|
36
37
|
table: values.tableNameNewsletterEntries,
|
|
37
38
|
id: "RowId",
|
|
38
|
-
|
|
39
|
+
webPath: values.routeEntityPath,
|
|
40
|
+
appPath: values.screenNewsletterPost,
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
exports.serverless = {
|
|
@@ -19,6 +19,7 @@ const values = {
|
|
|
19
19
|
notificationRejectNewsSubmission: "RejectNewsSubmissionCuratedPosts",
|
|
20
20
|
notificationNewsletterPublished: "NewsletterPublishedCuratedPosts",
|
|
21
21
|
routeEntityPath: "/newsCuratedPosts/article/:id",
|
|
22
|
+
screenNewsletterPost: "newsletterPostCuratedPosts",
|
|
22
23
|
textNewNewsletterSubmission: "New Curated Post Submission",
|
|
23
24
|
textHasSubmittedANewNewsletterPost:
|
|
24
25
|
"has submitted a new curated post for review.",
|
|
@@ -35,7 +36,8 @@ exports.entity = {
|
|
|
35
36
|
permission: values.permissionNewsletter,
|
|
36
37
|
table: values.tableNameNewsletterEntries,
|
|
37
38
|
id: "RowId",
|
|
38
|
-
|
|
39
|
+
webPath: values.routeEntityPath,
|
|
40
|
+
appPath: values.screenNewsletterPost,
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
exports.serverless = {
|
|
@@ -19,6 +19,7 @@ const values = {
|
|
|
19
19
|
notificationRejectNewsSubmission: "RejectNewsSubmission",
|
|
20
20
|
notificationNewsletterPublished: "NewsletterPublished",
|
|
21
21
|
routeEntityPath: "/news/article/:id",
|
|
22
|
+
screenNewsletterPost: "newsletterPost",
|
|
22
23
|
textNewNewsletterSubmission: "New Newsletter Submission",
|
|
23
24
|
textHasSubmittedANewNewsletterPost:
|
|
24
25
|
"has submitted a new newsletter post for review.",
|
|
@@ -35,7 +36,8 @@ exports.entity = {
|
|
|
35
36
|
permission: values.permissionNewsletter,
|
|
36
37
|
table: values.tableNameNewsletterEntries,
|
|
37
38
|
id: "RowId",
|
|
38
|
-
|
|
39
|
+
webPath: values.routeEntityPath,
|
|
40
|
+
appPath: values.screenNewsletterPost,
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
exports.serverless = {
|
|
@@ -19,6 +19,7 @@ const values = {
|
|
|
19
19
|
notificationRejectNewsSubmission: "RejectNewsSubmissionHeadOffice",
|
|
20
20
|
notificationNewsletterPublished: "NewsletterPublishedHeadOffice",
|
|
21
21
|
routeEntityPath: "/newsHeadOffice/article/:id",
|
|
22
|
+
screenNewsletterPost: "newsletterPostHeadOffice",
|
|
22
23
|
textNewNewsletterSubmission: "New Head Office News Submission",
|
|
23
24
|
textHasSubmittedANewNewsletterPost:
|
|
24
25
|
"has submitted a new head office post for review.",
|
|
@@ -35,7 +36,8 @@ exports.entity = {
|
|
|
35
36
|
permission: values.permissionNewsletter,
|
|
36
37
|
table: values.tableNameNewsletterEntries,
|
|
37
38
|
id: "RowId",
|
|
38
|
-
|
|
39
|
+
webPath: values.routeEntityPath,
|
|
40
|
+
appPath: values.screenNewsletterPost,
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
exports.serverless = {
|
package/feature.config.js
CHANGED
|
@@ -19,6 +19,7 @@ const values = {
|
|
|
19
19
|
notificationRejectNewsSubmission: "RejectNewsSubmissionSharing",
|
|
20
20
|
notificationNewsletterPublished: "NewsletterPublishedSharing",
|
|
21
21
|
routeEntityPath: "/newsSharing/article/:id",
|
|
22
|
+
screenNewsletterPost: "newsletterPostSharing",
|
|
22
23
|
textNewNewsletterSubmission: "New Sharing Submission",
|
|
23
24
|
textHasSubmittedANewNewsletterPost:
|
|
24
25
|
"has submitted a new sharing post for review.",
|
|
@@ -35,7 +36,8 @@ exports.entity = {
|
|
|
35
36
|
permission: values.permissionNewsletter,
|
|
36
37
|
table: values.tableNameNewsletterEntries,
|
|
37
38
|
id: "RowId",
|
|
38
|
-
|
|
39
|
+
webPath: values.routeEntityPath,
|
|
40
|
+
appPath: values.screenNewsletterPost,
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
exports.serverless = {
|
package/feature.config.menu.js
CHANGED
|
@@ -19,6 +19,7 @@ const values = {
|
|
|
19
19
|
notificationRejectNewsSubmission: "RejectNewsSubmissionMenu",
|
|
20
20
|
notificationNewsletterPublished: "NewsletterPublishedMenu",
|
|
21
21
|
routeEntityPath: "/newsMenu/article/:id",
|
|
22
|
+
screenNewsletterPost: "newsletterPostMenu",
|
|
22
23
|
textNewNewsletterSubmission: "New Menu Submission",
|
|
23
24
|
textHasSubmittedANewNewsletterPost: "has submitted a new menu for review.",
|
|
24
25
|
};
|
|
@@ -34,7 +35,8 @@ exports.entity = {
|
|
|
34
35
|
permission: values.permissionNewsletter,
|
|
35
36
|
table: values.tableNameNewsletterEntries,
|
|
36
37
|
id: "RowId",
|
|
37
|
-
|
|
38
|
+
webPath: values.routeEntityPath,
|
|
39
|
+
appPath: values.screenNewsletterPost,
|
|
38
40
|
};
|
|
39
41
|
|
|
40
42
|
exports.serverless = {
|
|
@@ -19,6 +19,7 @@ const values = {
|
|
|
19
19
|
notificationRejectNewsSubmission: "RejectNewsSubmissionNoticeBoard",
|
|
20
20
|
notificationNewsletterPublished: "NewsletterPublishedNoticeBoard",
|
|
21
21
|
routeEntityPath: "/newsNoticeBoard/article/:id",
|
|
22
|
+
screenNewsletterPost: "newsletterPostNoticeBoard",
|
|
22
23
|
textNewNewsletterSubmission: "New Notice Board Submission",
|
|
23
24
|
textHasSubmittedANewNewsletterPost:
|
|
24
25
|
"has submitted a new notice board post for review.",
|
|
@@ -35,7 +36,8 @@ exports.entity = {
|
|
|
35
36
|
permission: values.permissionNewsletter,
|
|
36
37
|
table: values.tableNameNewsletterEntries,
|
|
37
38
|
id: "RowId",
|
|
38
|
-
|
|
39
|
+
webPath: values.routeEntityPath,
|
|
40
|
+
appPath: values.screenNewsletterPost,
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
exports.serverless = {
|
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
const values = {
|
|
2
|
-
entityKey: "
|
|
3
|
-
serviceKey: "
|
|
4
|
-
updateKey: "
|
|
5
|
-
tableKeyNewsletterEntries: "
|
|
6
|
-
tableKeyNewsletterSubmissions: "
|
|
7
|
-
tableKeyNewsletterUserEntries: "
|
|
8
|
-
tableNameNewsletterEntries: "
|
|
9
|
-
tableNameNewsletterSubmissions: "
|
|
10
|
-
tableNameNewsletterUserEntries: "
|
|
11
|
-
stringPostfixSubmissionEmail: "
|
|
12
|
-
permissionNewsletter: "
|
|
13
|
-
permissionNewsletterSubmit: "
|
|
14
|
-
activityAddNewsSubmission: "
|
|
15
|
-
activityAddNews: "
|
|
16
|
-
activityDeleteNews: "
|
|
17
|
-
activityEditNews: "
|
|
18
|
-
notificationApproveNewsSubmission:
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
routeEntityPath: "/newsPersonalDevelopmentHub/article/:id",
|
|
2
|
+
entityKey: "newsPersonalDev",
|
|
3
|
+
serviceKey: "newsletterPersonalDev",
|
|
4
|
+
updateKey: "newsPersonalDev",
|
|
5
|
+
tableKeyNewsletterEntries: "NewsletterEntriesPersonalDev",
|
|
6
|
+
tableKeyNewsletterSubmissions: "NewsletterSubmissionsPersonalDev",
|
|
7
|
+
tableKeyNewsletterUserEntries: "NewsletterUserEntriesPersonalDev",
|
|
8
|
+
tableNameNewsletterEntries: "newsletterentriesPersonalDev",
|
|
9
|
+
tableNameNewsletterSubmissions: "newslettersubmissionsPersonalDev",
|
|
10
|
+
tableNameNewsletterUserEntries: "newsletteruserentriesPersonalDev",
|
|
11
|
+
stringPostfixSubmissionEmail: "newssubmissionemailPersonalDev",
|
|
12
|
+
permissionNewsletter: "newsletterPersonalDev",
|
|
13
|
+
permissionNewsletterSubmit: "newsletterSubmitPersonalDev",
|
|
14
|
+
activityAddNewsSubmission: "AddNewsSubmissionPersonalDev",
|
|
15
|
+
activityAddNews: "AddNewsPersonalDev",
|
|
16
|
+
activityDeleteNews: "DeleteNewsPersonalDev",
|
|
17
|
+
activityEditNews: "EditNewsPersonalDev",
|
|
18
|
+
notificationApproveNewsSubmission: "ApproveNewsSubmissionPersonalDev",
|
|
19
|
+
notificationRejectNewsSubmission: "RejectNewsSubmissionPersonalDev",
|
|
20
|
+
notificationNewsletterPublished: "NewsletterPublishedPersonalDev",
|
|
21
|
+
routeEntityPath: "/newsPersonalDev/article/:id",
|
|
22
|
+
screenNewsletterPost: "newsletterPostPersonalDev",
|
|
24
23
|
textNewNewsletterSubmission: "Personal Development Submission",
|
|
25
24
|
textHasSubmittedANewNewsletterPost:
|
|
26
25
|
"has submitted a new personal development post for review.",
|
|
@@ -37,7 +36,8 @@ exports.entity = {
|
|
|
37
36
|
permission: values.permissionNewsletter,
|
|
38
37
|
table: values.tableNameNewsletterEntries,
|
|
39
38
|
id: "RowId",
|
|
40
|
-
|
|
39
|
+
webPath: values.routeEntityPath,
|
|
40
|
+
appPath: values.screenNewsletterPost,
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
exports.serverless = {
|
package/feature.config.sales.js
CHANGED
|
@@ -19,6 +19,7 @@ const values = {
|
|
|
19
19
|
notificationRejectNewsSubmission: "RejectNewsSubmissionSales",
|
|
20
20
|
notificationNewsletterPublished: "NewsletterPublishedSales",
|
|
21
21
|
routeEntityPath: "/newsSales/article/:id",
|
|
22
|
+
screenNewsletterPost: "newsletterPostSales",
|
|
22
23
|
textNewNewsletterSubmission: "Sale Submission",
|
|
23
24
|
textHasSubmittedANewNewsletterPost: "has submitted a new sale for review.",
|
|
24
25
|
};
|
|
@@ -34,7 +35,8 @@ exports.entity = {
|
|
|
34
35
|
permission: values.permissionNewsletter,
|
|
35
36
|
table: values.tableNameNewsletterEntries,
|
|
36
37
|
id: "RowId",
|
|
37
|
-
|
|
38
|
+
webPath: values.routeEntityPath,
|
|
39
|
+
appPath: values.screenNewsletterPost,
|
|
38
40
|
};
|
|
39
41
|
|
|
40
42
|
exports.serverless = {
|
|
@@ -19,6 +19,7 @@ const values = {
|
|
|
19
19
|
notificationRejectNewsSubmission: "RejectNewsSubmissionSharing",
|
|
20
20
|
notificationNewsletterPublished: "NewsletterPublishedSharing",
|
|
21
21
|
routeEntityPath: "/newsSharing/article/:id",
|
|
22
|
+
screenNewsletterPost: "newsletterPostSharing",
|
|
22
23
|
textNewNewsletterSubmission: "New Sharing Submission",
|
|
23
24
|
textHasSubmittedANewNewsletterPost:
|
|
24
25
|
"has submitted a new sharing post for review.",
|
|
@@ -35,7 +36,8 @@ exports.entity = {
|
|
|
35
36
|
permission: values.permissionNewsletter,
|
|
36
37
|
table: values.tableNameNewsletterEntries,
|
|
37
38
|
id: "RowId",
|
|
38
|
-
|
|
39
|
+
webPath: values.routeEntityPath,
|
|
40
|
+
appPath: values.screenNewsletterPost,
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
exports.serverless = {
|
|
@@ -19,6 +19,7 @@ const values = {
|
|
|
19
19
|
notificationRejectNewsSubmission: "RejectNewsSubmissionTraining",
|
|
20
20
|
notificationNewsletterPublished: "NewsletterPublishedTraining",
|
|
21
21
|
routeEntityPath: "/newsTraining/article/:id",
|
|
22
|
+
screenNewsletterPost: "newsletterPostTraining",
|
|
22
23
|
textNewNewsletterSubmission: "Training Submission",
|
|
23
24
|
textHasSubmittedANewNewsletterPost:
|
|
24
25
|
"has submitted a new training for review.",
|
|
@@ -35,7 +36,8 @@ exports.entity = {
|
|
|
35
36
|
permission: values.permissionNewsletter,
|
|
36
37
|
table: values.tableNameNewsletterEntries,
|
|
37
38
|
id: "RowId",
|
|
38
|
-
|
|
39
|
+
webPath: values.routeEntityPath,
|
|
40
|
+
appPath: values.screenNewsletterPost,
|
|
39
41
|
};
|
|
40
42
|
|
|
41
43
|
exports.serverless = {
|
|
@@ -5,9 +5,9 @@ const generateJsonResponse = require("./common/helper/generateJsonResponse");
|
|
|
5
5
|
const { thisOrDefault } = require("./common/helper");
|
|
6
6
|
const indexQuery = require("./common/db/common/indexQuery");
|
|
7
7
|
const validateUserLoggedIn = require("./common/helper/auth/validateUserLoggedIn");
|
|
8
|
+
const validateMasterAuth = require("./common/helper/auth/validateMasterAuth");
|
|
8
9
|
const checkUpdateSource = require("./helper/checkUpdateSource");
|
|
9
|
-
const
|
|
10
|
-
const filterOnAudienceType = require("./common/helper/audience/filterOnAudienceType");
|
|
10
|
+
const filterByAudienceType = require("./common/helper/audience/filterByAudienceType");
|
|
11
11
|
const { values } = require("./feature.config");
|
|
12
12
|
|
|
13
13
|
module.exports.getFeaturedNewsletterEntries = (event, context, callback) => {
|
|
@@ -23,67 +23,64 @@ module.exports.getFeaturedNewsletterEntries = (event, context, callback) => {
|
|
|
23
23
|
);
|
|
24
24
|
|
|
25
25
|
validateUserLoggedIn(event)
|
|
26
|
-
.then((authorised) => {
|
|
26
|
+
.then(async (authorised) => {
|
|
27
27
|
if (!authorised) {
|
|
28
28
|
return callback(
|
|
29
29
|
null,
|
|
30
30
|
generateJsonResponse(422, { fail: true, error: "not authorised" })
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
|
-
getMatchingAudienceTypes(event.headers.authkey)
|
|
34
|
-
.then((types) => {
|
|
35
|
-
const query = {
|
|
36
|
-
IndexName: "NewsletterEntriesSiteFeaturedExpiryIndex",
|
|
37
|
-
KeyConditionExpression: "Site = :site and FeaturedExpiry > :time",
|
|
38
|
-
FilterExpression: "IsFeatured = :featured",
|
|
39
|
-
ExpressionAttributeValues: {
|
|
40
|
-
":site": site,
|
|
41
|
-
":time": time,
|
|
42
|
-
":featured": true,
|
|
43
|
-
},
|
|
44
|
-
};
|
|
45
|
-
const hqQuery = _.cloneDeep(query);
|
|
46
|
-
hqQuery.ExpressionAttributeValues[":site"] = "hq";
|
|
47
|
-
console.log(`running query - ${JSON.stringify(query)}`);
|
|
48
33
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
34
|
+
const canManage = await validateMasterAuth(event, "newsletter", site);
|
|
35
|
+
|
|
36
|
+
const query = {
|
|
37
|
+
IndexName: "NewsletterEntriesSiteFeaturedExpiryIndex",
|
|
38
|
+
KeyConditionExpression: "Site = :site and FeaturedExpiry > :time",
|
|
39
|
+
FilterExpression: "IsFeatured = :featured",
|
|
40
|
+
ExpressionAttributeValues: {
|
|
41
|
+
":site": site,
|
|
42
|
+
":time": time,
|
|
43
|
+
":featured": true,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
const hqQuery = _.cloneDeep(query);
|
|
47
|
+
hqQuery.ExpressionAttributeValues[":site"] = "hq";
|
|
48
|
+
console.log(`running query - ${JSON.stringify(query)}`);
|
|
49
|
+
|
|
50
|
+
const promises = [];
|
|
51
|
+
promises.push(indexQuery(values.tableNameNewsletterEntries, query));
|
|
52
|
+
if (!params.noHQ) {
|
|
53
|
+
promises.push(indexQuery(values.tableNameNewsletterEntries, hqQuery));
|
|
54
|
+
}
|
|
55
|
+
Promise.all(promises)
|
|
56
|
+
.then(async (responses) => {
|
|
57
|
+
console.log("successful query");
|
|
58
|
+
const result = [];
|
|
59
|
+
responses.forEach((data) => {
|
|
60
|
+
result.push.apply(result, data.Items);
|
|
61
|
+
});
|
|
62
|
+
let filteredResult = _.filter(result, (entry) => {
|
|
63
|
+
return (
|
|
64
|
+
!entry.Private && entry.UnixTimestamp < time && !entry.Deleted
|
|
65
|
+
);
|
|
66
|
+
});
|
|
67
|
+
if (!canManage) {
|
|
68
|
+
filteredResult = await filterByAudienceType(
|
|
69
|
+
filteredResult,
|
|
70
|
+
event.headers.authkey,
|
|
71
|
+
site
|
|
54
72
|
);
|
|
55
73
|
}
|
|
56
|
-
|
|
57
|
-
.then((responses) => {
|
|
58
|
-
console.log("successful query");
|
|
59
|
-
const result = [];
|
|
60
|
-
responses.forEach((data) => {
|
|
61
|
-
result.push.apply(result, data.Items);
|
|
62
|
-
});
|
|
63
|
-
const filteredResult = filterOnAudienceType(
|
|
64
|
-
_.filter(result, (entry) => {
|
|
65
|
-
return (
|
|
66
|
-
!entry.Private &&
|
|
67
|
-
entry.UnixTimestamp < time &&
|
|
68
|
-
!entry.Deleted
|
|
69
|
-
);
|
|
70
|
-
}),
|
|
71
|
-
types
|
|
72
|
-
);
|
|
73
|
-
const randomResults = _.shuffle(filteredResult).slice(0, count);
|
|
74
|
+
const randomResults = _.shuffle(filteredResult).slice(0, count);
|
|
74
75
|
|
|
75
|
-
|
|
76
|
+
checkUpdateSource(randomResults);
|
|
76
77
|
|
|
77
|
-
|
|
78
|
-
})
|
|
79
|
-
.catch((error) => {
|
|
80
|
-
console.log("query failed");
|
|
81
|
-
console.log(error);
|
|
82
|
-
callback(null, generateJsonResponse(422, { error }));
|
|
83
|
-
});
|
|
78
|
+
callback(null, generateJsonResponse(200, randomResults));
|
|
84
79
|
})
|
|
85
80
|
.catch((error) => {
|
|
86
|
-
|
|
81
|
+
console.log("query failed");
|
|
82
|
+
console.log(error);
|
|
83
|
+
callback(null, generateJsonResponse(422, { error }));
|
|
87
84
|
});
|
|
88
85
|
})
|
|
89
86
|
.catch((error) => {
|
package/getNewsletterEntries.js
CHANGED
|
@@ -4,9 +4,9 @@ const initConfig = require("./initConfig");
|
|
|
4
4
|
const generateJsonResponse = require("./common/helper/generateJsonResponse");
|
|
5
5
|
const { thisOrDefault } = require("./common/helper");
|
|
6
6
|
const validateSiteAccess = require("./common/helper/auth/validateSiteAccess");
|
|
7
|
+
const validateMasterAuth = require("./common/helper/auth/validateMasterAuth");
|
|
7
8
|
const checkUpdateSource = require("./helper/checkUpdateSource");
|
|
8
|
-
const
|
|
9
|
-
const filterOnAudienceType = require("./common/helper/audience/filterOnAudienceType");
|
|
9
|
+
const filterByAudienceType = require("./common/helper/audience/filterByAudienceType");
|
|
10
10
|
const indexQueryRecursive = require("./common/db/common/indexQueryRecursive");
|
|
11
11
|
const { values } = require("./feature.config");
|
|
12
12
|
|
|
@@ -38,82 +38,79 @@ module.exports.getNewsletterEntries = (event, context, callback) => {
|
|
|
38
38
|
console.log(`maxTime: ${maxTime}`);
|
|
39
39
|
|
|
40
40
|
validateSiteAccess(event, site)
|
|
41
|
-
.then((authorised) => {
|
|
41
|
+
.then(async (authorised) => {
|
|
42
42
|
if (!authorised) {
|
|
43
43
|
return callback(
|
|
44
44
|
null,
|
|
45
45
|
generateJsonResponse(422, { fail: true, error: "not authorised" })
|
|
46
46
|
);
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
48
|
+
|
|
49
|
+
const canManage = await validateMasterAuth(event, "newsletter", site);
|
|
50
|
+
|
|
51
|
+
const query = {
|
|
52
|
+
IndexName: "NewsletterEntriesSiteTimestampIndex",
|
|
53
|
+
KeyConditionExpression:
|
|
54
|
+
"Site = :site and UnixTimestampReverse BETWEEN :minTime and :maxTime",
|
|
55
|
+
ExpressionAttributeValues: {
|
|
56
|
+
":site": site,
|
|
57
|
+
":minTime": minTime,
|
|
58
|
+
":maxTime": maxTime,
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
const hqQuery = _.cloneDeep(query);
|
|
62
|
+
hqQuery.ExpressionAttributeValues[":site"] = "hq";
|
|
63
|
+
console.log("running query");
|
|
64
|
+
console.log(query);
|
|
65
|
+
const promises = [];
|
|
66
|
+
promises.push(
|
|
67
|
+
indexQueryRecursive(values.tableNameNewsletterEntries, query)
|
|
68
|
+
);
|
|
69
|
+
if (!params.noHQ) {
|
|
70
|
+
promises.push(
|
|
71
|
+
indexQueryRecursive(values.tableNameNewsletterEntries, hqQuery)
|
|
72
|
+
);
|
|
73
|
+
}
|
|
74
|
+
Promise.all(promises)
|
|
75
|
+
.then(async (responses) => {
|
|
76
|
+
console.log("successful query");
|
|
77
|
+
const result = [];
|
|
78
|
+
responses.forEach((data) => {
|
|
79
|
+
result.push.apply(result, data);
|
|
80
|
+
});
|
|
81
|
+
let filteredResult = params.noFilter
|
|
82
|
+
? result
|
|
83
|
+
: _.filter(result, (entry) => !entry.Private);
|
|
84
|
+
if (!params.noFilter && !canManage) {
|
|
85
|
+
filteredResult = await filterByAudienceType(
|
|
86
|
+
filteredResult,
|
|
87
|
+
event.headers.authkey,
|
|
88
|
+
site
|
|
71
89
|
);
|
|
72
90
|
}
|
|
73
|
-
Promise.all(promises)
|
|
74
|
-
.then((responses) => {
|
|
75
|
-
console.log("successful query");
|
|
76
|
-
const result = [];
|
|
77
|
-
responses.forEach((data) => {
|
|
78
|
-
result.push.apply(result, data);
|
|
79
|
-
});
|
|
80
|
-
const filteredResult = params.noFilter
|
|
81
|
-
? result
|
|
82
|
-
: filterOnAudienceType(
|
|
83
|
-
_.filter(result, (entry) => {
|
|
84
|
-
return !entry.Private;
|
|
85
|
-
}),
|
|
86
|
-
types
|
|
87
|
-
);
|
|
88
|
-
const sortedResult = _.sortBy(
|
|
89
|
-
filteredResult,
|
|
90
|
-
"UnixTimestampReverse"
|
|
91
|
-
);
|
|
92
91
|
|
|
93
|
-
|
|
92
|
+
const sortedResult = _.sortBy(filteredResult, "UnixTimestampReverse");
|
|
94
93
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
}
|
|
94
|
+
checkUpdateSource(sortedResult);
|
|
95
|
+
|
|
96
|
+
if (count) {
|
|
97
|
+
return callback(
|
|
98
|
+
null,
|
|
99
|
+
generateJsonResponse(200, {
|
|
100
|
+
items: sortedResult.slice(skip, skip + count),
|
|
101
|
+
skip,
|
|
102
|
+
count,
|
|
103
|
+
totalCount: sortedResult.length,
|
|
104
|
+
})
|
|
105
|
+
);
|
|
106
|
+
}
|
|
106
107
|
|
|
107
|
-
|
|
108
|
-
})
|
|
109
|
-
.catch((error) => {
|
|
110
|
-
console.log("query failed");
|
|
111
|
-
console.log(error);
|
|
112
|
-
callback(null, generateJsonResponse(422, { error }));
|
|
113
|
-
});
|
|
108
|
+
callback(null, generateJsonResponse(200, sortedResult));
|
|
114
109
|
})
|
|
115
110
|
.catch((error) => {
|
|
116
|
-
|
|
111
|
+
console.log("query failed");
|
|
112
|
+
console.log(error);
|
|
113
|
+
callback(null, generateJsonResponse(422, { error }));
|
|
117
114
|
});
|
|
118
115
|
})
|
|
119
116
|
.catch((error) => {
|
|
@@ -5,9 +5,9 @@ const generateJsonResponse = require("./common/helper/generateJsonResponse");
|
|
|
5
5
|
const { thisOrDefault } = require("./common/helper");
|
|
6
6
|
const indexQuery = require("./common/db/common/indexQuery");
|
|
7
7
|
const validateSiteAccess = require("./common/helper/auth/validateSiteAccess");
|
|
8
|
+
const validateMasterAuth = require("./common/helper/auth/validateMasterAuth");
|
|
8
9
|
const checkUpdateSource = require("./helper/checkUpdateSource");
|
|
9
|
-
const
|
|
10
|
-
const filterOnAudienceType = require("./common/helper/audience/filterOnAudienceType");
|
|
10
|
+
const filterByAudienceType = require("./common/helper/audience/filterByAudienceType");
|
|
11
11
|
const { values } = require("./feature.config");
|
|
12
12
|
|
|
13
13
|
module.exports.getRecentNewsletterEntries = (event, context, callback) => {
|
|
@@ -36,66 +36,65 @@ module.exports.getRecentNewsletterEntries = (event, context, callback) => {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
validateSiteAccess(event, site)
|
|
39
|
-
.then((authorised) => {
|
|
39
|
+
.then(async (authorised) => {
|
|
40
40
|
if (!authorised) {
|
|
41
41
|
return callback(
|
|
42
42
|
null,
|
|
43
43
|
generateJsonResponse(422, { fail: true, error: "not authorised" })
|
|
44
44
|
);
|
|
45
45
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
46
|
+
|
|
47
|
+
const canManage = await validateMasterAuth(event, "newsletter", site);
|
|
48
|
+
|
|
49
|
+
const query = {
|
|
50
|
+
IndexName: "NewsletterEntriesSiteTimestampIndex",
|
|
51
|
+
KeyConditionExpression:
|
|
52
|
+
"Site = :site and UnixTimestampReverse > :maxTime",
|
|
53
|
+
ExpressionAttributeValues: {
|
|
54
|
+
":site": site,
|
|
55
|
+
":maxTime": maxTime,
|
|
56
|
+
},
|
|
57
|
+
Limit: limit,
|
|
58
|
+
};
|
|
59
|
+
const hqQuery = _.cloneDeep(query);
|
|
60
|
+
hqQuery.ExpressionAttributeValues[":site"] = "hq";
|
|
61
|
+
console.log("running query");
|
|
62
|
+
console.log(query);
|
|
63
|
+
const promises = [];
|
|
64
|
+
promises.push(indexQuery(values.tableNameNewsletterEntries, query));
|
|
65
|
+
if (!params.noHQ) {
|
|
66
|
+
promises.push(indexQuery(values.tableNameNewsletterEntries, hqQuery));
|
|
67
|
+
}
|
|
68
|
+
Promise.all(promises)
|
|
69
|
+
.then(async (responses) => {
|
|
70
|
+
console.log("successful query");
|
|
71
|
+
const result = [];
|
|
72
|
+
responses.forEach((data) => {
|
|
73
|
+
result.push.apply(result, data.Items);
|
|
74
|
+
});
|
|
75
|
+
let filteredResult = _.filter(result, (entry) => {
|
|
76
|
+
return !entry.Private && (!tvMode || entry.TVMode);
|
|
77
|
+
});
|
|
78
|
+
if (!canManage) {
|
|
79
|
+
filteredResult = await filterByAudienceType(
|
|
80
|
+
filteredResult,
|
|
81
|
+
event.headers.authkey,
|
|
82
|
+
site
|
|
67
83
|
);
|
|
68
84
|
}
|
|
69
|
-
|
|
70
|
-
.
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
responses.forEach((data) => {
|
|
74
|
-
result.push.apply(result, data.Items);
|
|
75
|
-
});
|
|
76
|
-
const filteredResult = filterOnAudienceType(
|
|
77
|
-
_.filter(result, (entry) => {
|
|
78
|
-
return !entry.Private && (!tvMode || entry.TVMode);
|
|
79
|
-
}),
|
|
80
|
-
types
|
|
81
|
-
);
|
|
82
|
-
const sortedResult = _.take(
|
|
83
|
-
_.sortBy(filteredResult, "UnixTimestampReverse"),
|
|
84
|
-
limit
|
|
85
|
-
);
|
|
85
|
+
const sortedResult = _.take(
|
|
86
|
+
_.sortBy(filteredResult, "UnixTimestampReverse"),
|
|
87
|
+
limit
|
|
88
|
+
);
|
|
86
89
|
|
|
87
|
-
|
|
90
|
+
checkUpdateSource(sortedResult);
|
|
88
91
|
|
|
89
|
-
|
|
90
|
-
})
|
|
91
|
-
.catch((error) => {
|
|
92
|
-
console.log("query failed");
|
|
93
|
-
console.log(error);
|
|
94
|
-
callback(null, generateJsonResponse(200, { error }));
|
|
95
|
-
});
|
|
92
|
+
callback(null, generateJsonResponse(200, sortedResult));
|
|
96
93
|
})
|
|
97
94
|
.catch((error) => {
|
|
98
|
-
|
|
95
|
+
console.log("query failed");
|
|
96
|
+
console.log(error);
|
|
97
|
+
callback(null, generateJsonResponse(200, { error }));
|
|
99
98
|
});
|
|
100
99
|
})
|
|
101
100
|
.catch((error) => {
|
package/package-lock.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plusscommunities/pluss-newsletter-aws",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.5",
|
|
4
4
|
"lockfileVersion": 1,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"dependencies": {
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
}
|
|
14
14
|
},
|
|
15
15
|
"@plusscommunities/pluss-core-aws": {
|
|
16
|
-
"version": "1.
|
|
17
|
-
"resolved": "https://registry.npmjs.org/@plusscommunities/pluss-core-aws/-/pluss-core-aws-1.
|
|
18
|
-
"integrity": "sha512-
|
|
16
|
+
"version": "1.2.6",
|
|
17
|
+
"resolved": "https://registry.npmjs.org/@plusscommunities/pluss-core-aws/-/pluss-core-aws-1.2.6.tgz",
|
|
18
|
+
"integrity": "sha512-GCBa9UaJCdQ3qyDL8KwgT8f4DwG7voomKdBYUs5DpyDspQvuKt+vrlsJ2d2xrzGLNlrKxw6aL9wcWjCM+nrbBA==",
|
|
19
19
|
"requires": {
|
|
20
20
|
"@aws/dynamodb-auto-marshaller": "^0.7.1",
|
|
21
21
|
"amazon-cognito-identity-js": "^2.0.19",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@plusscommunities/pluss-newsletter-aws-sharing",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.5",
|
|
4
4
|
"description": "Extension package to enable newsletter on Pluss Communities Platform",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"gc": "node ../../tools/gc ./",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"license": "ISC",
|
|
23
23
|
"dependencies": {
|
|
24
24
|
"@aws/dynamodb-auto-marshaller": "^0.7.1",
|
|
25
|
-
"@plusscommunities/pluss-core-aws": "^1.
|
|
25
|
+
"@plusscommunities/pluss-core-aws": "^1.2.6",
|
|
26
26
|
"amazon-cognito-identity-js": "^2.0.19",
|
|
27
27
|
"axios": "^0.18.0",
|
|
28
28
|
"expo-server-sdk": "^3.0.1",
|