69 lines
2.4 KiB
TypeScript
69 lines
2.4 KiB
TypeScript
import * as functions from 'firebase-functions'
|
|
import { getUser } from './utils'
|
|
import { createNotification } from './create-notification'
|
|
import { Contract } from '../../common/contract'
|
|
|
|
export const onUpdateContract = functions.firestore
|
|
.document('contracts/{contractId}')
|
|
.onUpdate(async (change, context) => {
|
|
const contract = change.after.data() as Contract
|
|
const { eventId } = context
|
|
|
|
const contractUpdater = await getUser(contract.creatorId)
|
|
if (!contractUpdater) throw new Error('Could not find contract updater')
|
|
|
|
const previousValue = change.before.data() as Contract
|
|
if (previousValue.isResolved !== contract.isResolved) {
|
|
let resolutionText = contract.resolution ?? contract.question
|
|
if (contract.outcomeType === 'FREE_RESPONSE') {
|
|
const answerText = contract.answers.find(
|
|
(answer) => answer.id === contract.resolution
|
|
)?.text
|
|
if (answerText) resolutionText = answerText
|
|
} else if (contract.outcomeType === 'BINARY') {
|
|
if (resolutionText === 'MKT' && contract.resolutionProbability)
|
|
resolutionText = `${contract.resolutionProbability}%`
|
|
else if (resolutionText === 'MKT') resolutionText = 'PROB'
|
|
} else if (contract.outcomeType === 'PSEUDO_NUMERIC') {
|
|
if (resolutionText === 'MKT' && contract.resolutionValue)
|
|
resolutionText = `${contract.resolutionValue}`
|
|
}
|
|
|
|
await createNotification(
|
|
contract.id,
|
|
'contract',
|
|
'resolved',
|
|
contractUpdater,
|
|
eventId,
|
|
resolutionText,
|
|
{ contract }
|
|
)
|
|
} else if (
|
|
previousValue.closeTime !== contract.closeTime ||
|
|
previousValue.description !== contract.description
|
|
) {
|
|
let sourceText = ''
|
|
if (previousValue.closeTime !== contract.closeTime && contract.closeTime)
|
|
sourceText = contract.closeTime.toString()
|
|
else {
|
|
const oldTrimmedDescription = previousValue.description.trim()
|
|
const newTrimmedDescription = contract.description.trim()
|
|
if (oldTrimmedDescription === '') sourceText = newTrimmedDescription
|
|
else
|
|
sourceText = newTrimmedDescription
|
|
.split(oldTrimmedDescription)[1]
|
|
.trim()
|
|
}
|
|
|
|
await createNotification(
|
|
contract.id,
|
|
'contract',
|
|
'updated',
|
|
contractUpdater,
|
|
eventId,
|
|
sourceText,
|
|
{ contract }
|
|
)
|
|
}
|
|
})
|