forked from digital-telepresence/dtp-sites
Rob Colbert
2 years ago
116 changed files with 279 additions and 317 deletions
@ -1,22 +1 @@ |
|||
Want to tune in live |
|||
Want chat |
|||
|
|||
Most Recent Episode |
|||
Featured Clips |
|||
|
|||
Replays |
|||
About |
|||
Contact Us |
|||
Forum |
|||
|
|||
Suggestion Box |
|||
- "I want to see [name] on the show as a guest" |
|||
|
|||
Merch Store |
|||
- T-shirt |
|||
- Hat |
|||
- Tumbler / coffee mug |
|||
|
|||
Opie & Anthony (Cumia) |
|||
|
|||
restream.io |
|||
2022-03-03: Forked from dtp-sites to become new base for all DTP web apps |
@ -1,113 +0,0 @@ |
|||
// newsletter.js
|
|||
// Copyright (C) 2021 Digital Telepresence, LLC
|
|||
// License: Apache-2.0
|
|||
|
|||
'use strict'; |
|||
|
|||
const DTP_COMPONENT_NAME = 'newsletter'; |
|||
|
|||
const path = require('path'); |
|||
require('dotenv').config({ path: path.resolve(__dirname, '..', '..', '.env') }); |
|||
|
|||
const mongoose = require('mongoose'); |
|||
|
|||
const { SitePlatform, SiteLog } = require(path.join(__dirname, '..', '..', 'lib', 'site-lib')); |
|||
|
|||
module.pkg = require(path.resolve(__dirname, '..', '..', 'package.json')); |
|||
module.config = { |
|||
componentName: DTP_COMPONENT_NAME, |
|||
root: path.resolve(__dirname, '..', '..'), |
|||
}; |
|||
|
|||
module.log = new SiteLog(module, module.config.componentName); |
|||
|
|||
module.sendNewsletter = async (job) => { |
|||
|
|||
module.log.info('newsletter email job received', { data: job.data }); |
|||
|
|||
const NewsletterRecipient = mongoose.model('NewsletterRecipient'); |
|||
|
|||
try { |
|||
/* |
|||
* Create one Bull Queue job per email to be delivered. |
|||
*/ |
|||
await NewsletterRecipient |
|||
.find({ 'flags.isVerified': true, 'flags.isOptIn': true, 'flags.isRejected': false }) |
|||
.lean() |
|||
.cursor() |
|||
.eachAsync(async (recipient) => { |
|||
try { |
|||
const jobData = { |
|||
newsletterId: job.data.newsletterId, |
|||
recipient: recipient.address, |
|||
}; |
|||
const jobOptions = { |
|||
attempts: 3, |
|||
}; |
|||
await module.jobQueue.add('email-send', jobData, jobOptions); |
|||
} catch (error) { |
|||
module.log.error('failed to create newsletter email job'); |
|||
// but continue
|
|||
} |
|||
}, { parallel: 4 }); |
|||
} catch (error) { |
|||
module.log('failed to send newsletter', { newsletterId: job.data.newsletterId, error }); |
|||
throw error; // throw error to Bull so it can report in job reports
|
|||
} |
|||
}; |
|||
|
|||
module.sendNewsletterEmail = async (job) => { |
|||
const { newsletter: newsletterService, email: emailService } = module.services; |
|||
const { newsletterId, recipient } = job.data; |
|||
try { |
|||
|
|||
let newsletter = module.newsletters[newsletterId]; |
|||
|
|||
if (!newsletter) { |
|||
newsletter = await newsletterService.getById(newsletterId); |
|||
module.newsletters[newsletterId] = newsletter; //TODO: clean up memory leak of newsletter (remove when all emails are sent)
|
|||
} |
|||
|
|||
if (!newsletter) { |
|||
throw new Error('newsletter not found'); |
|||
} |
|||
|
|||
const response = await emailService.send({ |
|||
from: '[email protected]', |
|||
to: recipient, |
|||
subject: newsletter.title, |
|||
html: newsletter.content.html, |
|||
text: newsletter.content.text, |
|||
}); |
|||
|
|||
job.log(`newsletter email sent: ${response}`); |
|||
} catch (error) { |
|||
module.error('failed to send newsletter email', { newsletterId, recipient, error }); |
|||
throw error; // throw error to Bull so it can report in job reports
|
|||
} |
|||
}; |
|||
|
|||
(async ( ) => { |
|||
try { |
|||
/* |
|||
* Platform startup |
|||
*/ |
|||
await SitePlatform.startPlatform(module); |
|||
|
|||
const { jobQueue: jobQueueService } = module.services; |
|||
|
|||
module.jobQueue = await jobQueueService.getJobQueue('newsletter', { |
|||
attempts: 3, |
|||
}); |
|||
module.jobQueue.process('email', module.sendNewsletter); |
|||
module.jobQueue.process('email-send', module.sendNewsletterEmail); |
|||
|
|||
/* |
|||
* Worker startup |
|||
*/ |
|||
module.log.info(`${module.pkg.name} v${module.pkg.version} Newsletter worker started`); |
|||
} catch (error) { |
|||
module.log.error('failed to start Newsletter worker', { error }); |
|||
process.exit(-1); |
|||
} |
|||
})(); |
@ -1,11 +1,11 @@ |
|||
// job-queues.js
|
|||
// Copyright (C) 2021 Digital Telepresence, LLC
|
|||
// Copyright (C) 2022 DTP Technologies, LLC
|
|||
// License: Apache-2.0
|
|||
|
|||
'use strict'; |
|||
|
|||
module.exports = { |
|||
// 'dvr-ingest': {
|
|||
// 'queue-name': {
|
|||
// attempts: 3,
|
|||
// },
|
|||
}; |
@ -0,0 +1,13 @@ |
|||
// site.js
|
|||
// Copyright (C) 2022 DTP Technologies, LLC
|
|||
// License: Apache 2.0
|
|||
|
|||
'use strict'; |
|||
|
|||
module.exports = { |
|||
name: process.env.DTP_SITE_NAME, |
|||
description: process.env.DTP_SITE_DESCRIPTION, |
|||
domain: process.env.DTP_SITE_DOMAIN, |
|||
domainKey: process.env.DTP_SITE_DOMAIN_KEY, |
|||
company: process.env.DTP_SITE_COMPANY || 'Digital Telepresence, LLC', |
|||
}; |
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue