liquid-funding/app/actions/pledges.js

57 lines
1.8 KiB
JavaScript

import { pick } from 'ramda'
import { Q } from '@nozbe/watermelondb'
import database from '../db'
import { getLatestProfileEvents } from './lpEvents'
import { formatFundProfileEvent } from '../utils/events'
const createPledge = (pledge, data) => {
const { id, owner, amount, token, commitTime, nDelegates, pledgeState, intendedProject } = data
pledge.pledgeId = id
pledge.owner = Number(owner)
pledge.amount = Number(amount)
pledge.token = token
pledge.commitTime = Number(commitTime)
pledge.nDelegates = Number(nDelegates)
pledge.pledgeState = pledgeState
pledge.intendedProject = Number(intendedProject)
pledge.profile.set(Number(id))
}
const pledgesCollection = database.collections.get('pledges')
export const addPledge = async data => {
return await database.action(async () => {
const res = await pledgesCollection.create(pledge => createPledge(pledge, data))
return res
})
}
export const batchAddPledges = async profiles => {
const batch = profiles.map(data => {
return pledgesCollection.prepareCreate(pledge => createPledge(pledge, data))
})
console.log({batch})
return await database.action(async () => await database.batch(...batch))
}
export const addFormattedProfiles = async () => {
const allProfiles = await getAllProfiles()
const allEventIds = allProfiles.map(p => p.eventId)
const events = await getLatestProfileEvents(allEventIds)
const formattedEvents = await Promise.all(
events.map(formatFundProfileEvent)
)
await batchAddPledges(formattedEvents)
}
export const getAllProfiles = async () => {
const events = await pledgesCollection.query().fetch()
return events
}
export const getPledgeById = async id => {
const event = await pledgesCollection.query(
Q.where('id_profile', id)
).fetch()
return event
}