| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- --- services/web/scripts/convert_archived_state.js
- +++ services/web/scripts/convert_archived_state.js
- @@ -6,62 +6,77 @@
- const { promiseMapWithLimit } = require('../app/src/util/promises')
- // $ node scripts/convert_archived_state.js FIRST,SECOND
- -const STAGE = process.argv.pop()
- -async function main() {
- - if (STAGE.includes('FIRST')) {
- - await batchedUpdate(
- - 'projects',
- - { archived: false },
- - {
- - $set: { archived: [] },
- - }
- - )
- +async function main(STAGE) {
- + for (const FIELD of ['archived', 'trashed']) {
- + if (STAGE.includes('FIRST')) {
- + await batchedUpdate(
- + 'projects',
- + { [FIELD]: false },
- + {
- + $set: { [FIELD]: [] },
- + }
- + )
- - console.error('Done, with first part')
- - }
- + console.error('Done, with first part for field:', FIELD)
- + }
- - if (STAGE.includes('SECOND')) {
- - await batchedUpdate('projects', { archived: true }, performUpdate, {
- - _id: 1,
- - owner_ref: 1,
- - collaberator_refs: 1,
- - readOnly_refs: 1,
- - tokenAccessReadAndWrite_refs: 1,
- - tokenAccessReadOnly_refs: 1,
- - })
- + if (STAGE.includes('SECOND')) {
- + await batchedUpdate(
- + 'projects',
- + { [FIELD]: true },
- + async function performUpdate(collection, nextBatch) {
- + await promiseMapWithLimit(
- + WRITE_CONCURRENCY,
- + nextBatch,
- + async project => {
- + try {
- + await upgradeFieldToArray({ collection, project, FIELD })
- + } catch (err) {
- + console.error(project._id, err)
- + throw err
- + }
- + }
- + )
- + },
- + {
- + _id: 1,
- + owner_ref: 1,
- + collaberator_refs: 1,
- + readOnly_refs: 1,
- + tokenAccessReadAndWrite_refs: 1,
- + tokenAccessReadOnly_refs: 1,
- + }
- + )
- - console.error('Done, with second part')
- + console.error('Done, with second part for field:', FIELD)
- + }
- }
- }
- -main()
- - .then(() => {
- - process.exit(0)
- - })
- - .catch(error => {
- - console.error({ error })
- - process.exit(1)
- - })
- -
- -async function performUpdate(collection, nextBatch) {
- - await promiseMapWithLimit(WRITE_CONCURRENCY, nextBatch, project =>
- - setArchived(collection, project)
- - )
- +module.exports = main
- +
- +if (require.main === module) {
- + main(process.argv.pop())
- + .then(() => {
- + process.exit(0)
- + })
- + .catch(error => {
- + console.error({ error })
- + process.exit(1)
- + })
- }
- -async function setArchived(collection, project) {
- - const archived = calculateArchivedArray(project)
- -
- +async function upgradeFieldToArray({ collection, project, FIELD }) {
- return collection.updateOne(
- { _id: project._id },
- {
- - $set: { archived },
- + $set: { [FIELD]: getAllUserIds(project) },
- }
- )
- }
- -function calculateArchivedArray(project) {
- +function getAllUserIds(project) {
- return _.unionWith(
- [project.owner_ref],
- project.collaberator_refs,
- --- /dev/null
- +++ services/web/migrations/20221111111111_ce_sp_convert_archived_state.js
- @@ -0,0 +1,9 @@
- +const runScript = require('../scripts/convert_archived_state')
- +
- +exports.tags = ['server-ce', 'server-pro']
- +
- +exports.migrate = async () => {
- + await runScript('FIRST,SECOND')
- +}
- +
- +exports.rollback = async () => {}
|