123 lines
3.8 KiB
TypeScript
123 lines
3.8 KiB
TypeScript
import * as admin from 'firebase-admin'
|
|
import { Group } from 'common/group'
|
|
import { initAdmin } from 'functions/src/scripts/script-init'
|
|
import { log } from '../utils'
|
|
|
|
const getGroups = async () => {
|
|
const firestore = admin.firestore()
|
|
const groups = await firestore.collection('groups').get()
|
|
return groups.docs.map((doc) => doc.data() as Group)
|
|
}
|
|
|
|
// const createContractIdForGroup = async (
|
|
// groupId: string,
|
|
// contractId: string
|
|
// ) => {
|
|
// const firestore = admin.firestore()
|
|
// const now = Date.now()
|
|
// const contractDoc = await firestore
|
|
// .collection('groups')
|
|
// .doc(groupId)
|
|
// .collection('groupContracts')
|
|
// .doc(contractId)
|
|
// .get()
|
|
// if (!contractDoc.exists)
|
|
// await firestore
|
|
// .collection('groups')
|
|
// .doc(groupId)
|
|
// .collection('groupContracts')
|
|
// .doc(contractId)
|
|
// .create({
|
|
// contractId,
|
|
// createdTime: now,
|
|
// })
|
|
// }
|
|
|
|
// const createMemberForGroup = async (groupId: string, userId: string) => {
|
|
// const firestore = admin.firestore()
|
|
// const now = Date.now()
|
|
// const memberDoc = await firestore
|
|
// .collection('groups')
|
|
// .doc(groupId)
|
|
// .collection('groupMembers')
|
|
// .doc(userId)
|
|
// .get()
|
|
// if (!memberDoc.exists)
|
|
// await firestore
|
|
// .collection('groups')
|
|
// .doc(groupId)
|
|
// .collection('groupMembers')
|
|
// .doc(userId)
|
|
// .create({
|
|
// userId,
|
|
// createdTime: now,
|
|
// })
|
|
// }
|
|
|
|
// async function convertGroupFieldsToGroupDocuments() {
|
|
// const groups = await getGroups()
|
|
// for (const group of groups) {
|
|
// log('updating group', group.slug)
|
|
// const groupRef = admin.firestore().collection('groups').doc(group.id)
|
|
// const totalMembers = (await groupRef.collection('groupMembers').get()).size
|
|
// const totalContracts = (await groupRef.collection('groupContracts').get())
|
|
// .size
|
|
// if (
|
|
// totalMembers === group.memberIds?.length &&
|
|
// totalContracts === group.contractIds?.length
|
|
// ) {
|
|
// log('group already converted', group.slug)
|
|
// continue
|
|
// }
|
|
// const contractStart = totalContracts - 1 < 0 ? 0 : totalContracts - 1
|
|
// const membersStart = totalMembers - 1 < 0 ? 0 : totalMembers - 1
|
|
// for (const contractId of group.contractIds?.slice(
|
|
// contractStart,
|
|
// group.contractIds?.length
|
|
// ) ?? []) {
|
|
// await createContractIdForGroup(group.id, contractId)
|
|
// }
|
|
// for (const userId of group.memberIds?.slice(
|
|
// membersStart,
|
|
// group.memberIds?.length
|
|
// ) ?? []) {
|
|
// await createMemberForGroup(group.id, userId)
|
|
// }
|
|
// }
|
|
// }
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
async function updateTotalContractsAndMembers() {
|
|
const groups = await getGroups()
|
|
for (const group of groups) {
|
|
log('updating group total contracts and members', group.slug)
|
|
const groupRef = admin.firestore().collection('groups').doc(group.id)
|
|
const totalMembers = (await groupRef.collection('groupMembers').get()).size
|
|
const totalContracts = (await groupRef.collection('groupContracts').get())
|
|
.size
|
|
await groupRef.update({
|
|
totalMembers,
|
|
totalContracts,
|
|
})
|
|
}
|
|
}
|
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
async function removeUnusedMemberAndContractFields() {
|
|
const groups = await getGroups()
|
|
for (const group of groups) {
|
|
log('removing member and contract ids', group.slug)
|
|
const groupRef = admin.firestore().collection('groups').doc(group.id)
|
|
await groupRef.update({
|
|
memberIds: admin.firestore.FieldValue.delete(),
|
|
contractIds: admin.firestore.FieldValue.delete(),
|
|
})
|
|
}
|
|
}
|
|
|
|
if (require.main === module) {
|
|
initAdmin()
|
|
// convertGroupFieldsToGroupDocuments()
|
|
// updateTotalContractsAndMembers()
|
|
removeUnusedMemberAndContractFields()
|
|
}
|