sendInterestingMarketsEmail
This commit is contained in:
parent
3f2c9d4b68
commit
02d96399d8
|
@ -392,65 +392,56 @@ export const sendNewAnswerEmail = async (
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export const sendSixContractsEmail = async (
|
export const sendInterestingMarketsEmail = async (
|
||||||
|
user: User,
|
||||||
privateUser: PrivateUser,
|
privateUser: PrivateUser,
|
||||||
contractsToSend: Contract[]
|
contractsToSend: Contract[],
|
||||||
|
deliveryTime?: string
|
||||||
) => {
|
) => {
|
||||||
const emailType = 'weekly-trending'
|
|
||||||
const unsubscribeUrl = `${UNSUBSCRIBE_ENDPOINT}?id=${privateUser.id}&type=${emailType}`
|
|
||||||
if (
|
if (
|
||||||
!privateUser ||
|
!privateUser ||
|
||||||
!privateUser.email ||
|
!privateUser.email ||
|
||||||
privateUser?.unsubscribedFromWeeklyTrendingEmails
|
privateUser?.unsubscribedFromWeeklyTrendingEmails
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
const emailType = 'weekly-trending'
|
||||||
|
const unsubscribeUrl = `${UNSUBSCRIBE_ENDPOINT}?id=${privateUser.id}&type=${emailType}`
|
||||||
|
|
||||||
|
const { name } = user
|
||||||
|
const firstName = name.split(' ')[0]
|
||||||
|
|
||||||
await sendTemplateEmail(
|
await sendTemplateEmail(
|
||||||
privateUser.email,
|
privateUser.email,
|
||||||
contractsToSend[0].question + ' and 5 more questions for you.',
|
'Interesting markets on Manifold',
|
||||||
// used to be 3 and I can't change the template name!
|
'interesting-markets',
|
||||||
'3-trending-markets',
|
|
||||||
{
|
{
|
||||||
|
name: firstName,
|
||||||
|
unsubscribeLink: unsubscribeUrl,
|
||||||
|
|
||||||
question1Title: contractsToSend[0].question,
|
question1Title: contractsToSend[0].question,
|
||||||
question1Description: getTextDescription(contractsToSend[0]),
|
|
||||||
question1Link: contractUrl(contractsToSend[0]),
|
question1Link: contractUrl(contractsToSend[0]),
|
||||||
question1ImgSrc: imageSourceUrl(contractsToSend[0]),
|
question1ImgSrc: imageSourceUrl(contractsToSend[0]),
|
||||||
question2Title: contractsToSend[1].question,
|
question2Title: contractsToSend[1].question,
|
||||||
question2Description: getTextDescription(contractsToSend[1]),
|
|
||||||
question2Link: contractUrl(contractsToSend[1]),
|
question2Link: contractUrl(contractsToSend[1]),
|
||||||
question2ImgSrc: imageSourceUrl(contractsToSend[1]),
|
question2ImgSrc: imageSourceUrl(contractsToSend[1]),
|
||||||
question3Title: contractsToSend[2].question,
|
question3Title: contractsToSend[2].question,
|
||||||
question3Description: getTextDescription(contractsToSend[2]),
|
|
||||||
question3Link: contractUrl(contractsToSend[2]),
|
question3Link: contractUrl(contractsToSend[2]),
|
||||||
question3ImgSrc: imageSourceUrl(contractsToSend[2]),
|
question3ImgSrc: imageSourceUrl(contractsToSend[2]),
|
||||||
question4Title: contractsToSend[3].question,
|
question4Title: contractsToSend[3].question,
|
||||||
question4Description: getTextDescription(contractsToSend[3]),
|
|
||||||
question4Link: contractUrl(contractsToSend[3]),
|
question4Link: contractUrl(contractsToSend[3]),
|
||||||
question4ImgSrc: imageSourceUrl(contractsToSend[3]),
|
question4ImgSrc: imageSourceUrl(contractsToSend[3]),
|
||||||
question5Title: contractsToSend[4].question,
|
question5Title: contractsToSend[4].question,
|
||||||
question5Description: getTextDescription(contractsToSend[4]),
|
|
||||||
question5Link: contractUrl(contractsToSend[4]),
|
question5Link: contractUrl(contractsToSend[4]),
|
||||||
question5ImgSrc: imageSourceUrl(contractsToSend[4]),
|
question5ImgSrc: imageSourceUrl(contractsToSend[4]),
|
||||||
question6Title: contractsToSend[5].question,
|
question6Title: contractsToSend[5].question,
|
||||||
question6Description: getTextDescription(contractsToSend[5]),
|
|
||||||
question6Link: contractUrl(contractsToSend[5]),
|
question6Link: contractUrl(contractsToSend[5]),
|
||||||
question6ImgSrc: imageSourceUrl(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) {
|
function contractUrl(contract: Contract) {
|
||||||
return `https://manifold.markets/${contract.creatorUsername}/${contract.slug}`
|
return `https://manifold.markets/${contract.creatorUsername}/${contract.slug}`
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,9 +2,9 @@ import * as functions from 'firebase-functions'
|
||||||
import * as admin from 'firebase-admin'
|
import * as admin from 'firebase-admin'
|
||||||
|
|
||||||
import { Contract } from '../../common/contract'
|
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 { filterDefined } from '../../common/util/array'
|
||||||
import { sendSixContractsEmail } from './emails'
|
import { sendInterestingMarketsEmail } from './emails'
|
||||||
import { createRNG, shuffle } from '../../common/util/random'
|
import { createRNG, shuffle } from '../../common/util/random'
|
||||||
import { DAY_MS } from '../../common/util/time'
|
import { DAY_MS } from '../../common/util/time'
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ export const weeklyMarketsEmails = functions
|
||||||
|
|
||||||
const firestore = admin.firestore()
|
const firestore = admin.firestore()
|
||||||
|
|
||||||
async function getTrendingContracts() {
|
export async function getTrendingContracts() {
|
||||||
return await getValues<Contract>(
|
return await getValues<Contract>(
|
||||||
firestore
|
firestore
|
||||||
.collection('contracts')
|
.collection('contracts')
|
||||||
|
@ -26,7 +26,7 @@ async function getTrendingContracts() {
|
||||||
.where('visibility', '==', 'public')
|
.where('visibility', '==', 'public')
|
||||||
.orderBy('closeTime', 'asc')
|
.orderBy('closeTime', 'asc')
|
||||||
.orderBy('popularityScore', 'desc')
|
.orderBy('popularityScore', 'desc')
|
||||||
.limit(50)
|
.limit(15)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,10 @@ async function sendTrendingMarketsEmailsToAllUsers() {
|
||||||
numEmailsToSend
|
numEmailsToSend
|
||||||
)
|
)
|
||||||
|
|
||||||
await sendSixContractsEmail(privateUser, contractsToSend)
|
const user = await getUser(privateUser.id)
|
||||||
|
if (!user) continue
|
||||||
|
|
||||||
|
await sendInterestingMarketsEmail(user, privateUser, contractsToSend)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user