sendInterestingMarketsEmail

This commit is contained in:
mantikoros 2022-08-19 12:17:03 -05:00
parent 3f2c9d4b68
commit 02d96399d8
2 changed files with 26 additions and 32 deletions

View File

@ -392,65 +392,56 @@ export const sendNewAnswerEmail = async (
)
}
export const sendSixContractsEmail = async (
export const sendInterestingMarketsEmail = async (
user: User,
privateUser: PrivateUser,
contractsToSend: Contract[]
contractsToSend: Contract[],
deliveryTime?: string
) => {
const emailType = 'weekly-trending'
const unsubscribeUrl = `${UNSUBSCRIBE_ENDPOINT}?id=${privateUser.id}&type=${emailType}`
if (
!privateUser ||
!privateUser.email ||
privateUser?.unsubscribedFromWeeklyTrendingEmails
)
return
const emailType = 'weekly-trending'
const unsubscribeUrl = `${UNSUBSCRIBE_ENDPOINT}?id=${privateUser.id}&type=${emailType}`
const { name } = user
const firstName = name.split(' ')[0]
await sendTemplateEmail(
privateUser.email,
contractsToSend[0].question + ' and 5 more questions for you.',
// used to be 3 and I can't change the template name!
'3-trending-markets',
'Interesting markets on Manifold',
'interesting-markets',
{
name: firstName,
unsubscribeLink: unsubscribeUrl,
question1Title: contractsToSend[0].question,
question1Description: getTextDescription(contractsToSend[0]),
question1Link: contractUrl(contractsToSend[0]),
question1ImgSrc: imageSourceUrl(contractsToSend[0]),
question2Title: contractsToSend[1].question,
question2Description: getTextDescription(contractsToSend[1]),
question2Link: contractUrl(contractsToSend[1]),
question2ImgSrc: imageSourceUrl(contractsToSend[1]),
question3Title: contractsToSend[2].question,
question3Description: getTextDescription(contractsToSend[2]),
question3Link: contractUrl(contractsToSend[2]),
question3ImgSrc: imageSourceUrl(contractsToSend[2]),
question4Title: contractsToSend[3].question,
question4Description: getTextDescription(contractsToSend[3]),
question4Link: contractUrl(contractsToSend[3]),
question4ImgSrc: imageSourceUrl(contractsToSend[3]),
question5Title: contractsToSend[4].question,
question5Description: getTextDescription(contractsToSend[4]),
question5Link: contractUrl(contractsToSend[4]),
question5ImgSrc: imageSourceUrl(contractsToSend[4]),
question6Title: contractsToSend[5].question,
question6Description: getTextDescription(contractsToSend[5]),
question6Link: contractUrl(contractsToSend[5]),
question6ImgSrc: imageSourceUrl(contractsToSend[5]),
unsubscribeLink: unsubscribeUrl,
}
},
deliveryTime ? { 'o:deliverytime': deliveryTime } : undefined
)
}
function getTextDescription(contract: Contract) {
const { description } = contract
let text = ''
if (typeof description === 'string') text = description
else text = richTextToString(description)
if (text.length > 300) {
return text.substring(0, 300) + '...'
}
return text
}
function contractUrl(contract: Contract) {
return `https://manifold.markets/${contract.creatorUsername}/${contract.slug}`
}

View File

@ -2,9 +2,9 @@ import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
import { Contract } from '../../common/contract'
import { getPrivateUser, getValues, isProd, log } from './utils'
import { getPrivateUser, getUser, getValues, isProd, log } from './utils'
import { filterDefined } from '../../common/util/array'
import { sendSixContractsEmail } from './emails'
import { sendInterestingMarketsEmail } from './emails'
import { createRNG, shuffle } from '../../common/util/random'
import { DAY_MS } from '../../common/util/time'
@ -17,7 +17,7 @@ export const weeklyMarketsEmails = functions
const firestore = admin.firestore()
async function getTrendingContracts() {
export async function getTrendingContracts() {
return await getValues<Contract>(
firestore
.collection('contracts')
@ -26,7 +26,7 @@ async function getTrendingContracts() {
.where('visibility', '==', 'public')
.orderBy('closeTime', 'asc')
.orderBy('popularityScore', 'desc')
.limit(50)
.limit(15)
)
}
@ -67,7 +67,10 @@ async function sendTrendingMarketsEmailsToAllUsers() {
numEmailsToSend
)
await sendSixContractsEmail(privateUser, contractsToSend)
const user = await getUser(privateUser.id)
if (!user) continue
await sendInterestingMarketsEmail(user, privateUser, contractsToSend)
}
}