mirror of
				https://github.com/HabitRPG/habitica.git
				synced 2025-10-30 20:52:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			108 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* eslint-disable import/no-commonjs */
 | |
| /*
 | |
| let migrationName = 'UserFromProdToTest';
 | |
| let authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
 | |
| let authorUuid = ''; // ... own data is done
 | |
| */
 | |
| 
 | |
| /*
 | |
|  * This migraition will copy user data from prod to test
 | |
|  */
 | |
| 
 | |
| import uniq from 'lodash/uniq';
 | |
| 
 | |
| const monk = require('monk'); // eslint-disable-line import/no-extraneous-dependencies
 | |
| 
 | |
| const testConnectionSting = ''; // FOR TEST DATABASE
 | |
| const usersTest = monk(testConnectionSting).get('users', { castIds: false });
 | |
| const groupsTest = monk(testConnectionSting).get('groups', { castIds: false });
 | |
| const challengesTest = monk(testConnectionSting).get('challenges', { castIds: false });
 | |
| const tasksTest = monk(testConnectionSting).get('tasks', { castIds: false });
 | |
| 
 | |
| const monk2 = require('monk'); // eslint-disable-line import/no-extraneous-dependencies
 | |
| 
 | |
| const liveConnectString = ''; // FOR TEST DATABASE
 | |
| const userLive = monk2(liveConnectString).get('users', { castIds: false });
 | |
| const groupsLive = monk2(liveConnectString).get('groups', { castIds: false });
 | |
| const challengesLive = monk2(liveConnectString).get('challenges', { castIds: false });
 | |
| const tasksLive = monk2(liveConnectString).get('tasks', { castIds: false });
 | |
| 
 | |
| // Variabls for updating
 | |
| /*
 | |
| let userIds = [
 | |
|   '206039c6-24e4-4b9f-8a31-61cbb9aa3f66',
 | |
| ];
 | |
| */
 | |
| 
 | |
| let groupIds = [];
 | |
| let challengeIds = [];
 | |
| let tasksIds = [];
 | |
| 
 | |
| async function processUsers () {
 | |
|   const userPromises = [];
 | |
|   // {_id: {$in: userIds}}
 | |
| 
 | |
|   return userLive.find({ guilds: 'b0764d64-8276-45a1-afa5-5ca9a5c64ca0' })
 | |
|     .each(user => {
 | |
|       if (user.guilds.length > 0) groupIds = groupIds.concat(user.guilds);
 | |
|       if (user.party._id) groupIds.push(user.party._id);
 | |
|       if (user.challenges.length > 0) challengeIds = challengeIds.concat(user.challenges);
 | |
|       if (user.tasksOrder.rewards.length > 0) tasksIds = tasksIds.concat(user.tasksOrder.rewards);
 | |
|       if (user.tasksOrder.todos.length > 0) tasksIds = tasksIds.concat(user.tasksOrder.todos);
 | |
|       if (user.tasksOrder.dailys.length > 0) tasksIds = tasksIds.concat(user.tasksOrder.dailys);
 | |
|       if (user.tasksOrder.habits.length > 0) tasksIds = tasksIds.concat(user.tasksOrder.habits);
 | |
| 
 | |
|       const userPromise = usersTest.update({ _id: user._id }, user, { upsert: true });
 | |
|       userPromises.push(userPromise);
 | |
|     }).then(() => Promise.all(userPromises))
 | |
|     .then(() => {
 | |
|       console.log('Done User');
 | |
|     });
 | |
| }
 | |
| 
 | |
| function processGroups () {
 | |
|   const promises = [];
 | |
|   const groupsToQuery = uniq(groupIds);
 | |
|   return groupsLive.find({ _id: { $in: groupsToQuery } })
 | |
|     .each(group => {
 | |
|       const promise = groupsTest.update({ _id: group._id }, group, { upsert: true });
 | |
|       promises.push(promise);
 | |
|     }).then(() => Promise.all(promises))
 | |
|     .then(() => {
 | |
|       console.log('Done Group');
 | |
|     });
 | |
| }
 | |
| 
 | |
| function processChallenges () {
 | |
|   const promises = [];
 | |
|   const challengesToQuery = uniq(challengeIds);
 | |
|   return challengesLive.find({ _id: { $in: challengesToQuery } })
 | |
|     .each(challenge => {
 | |
|       const promise = challengesTest.update({ _id: challenge._id }, challenge, { upsert: true });
 | |
|       promises.push(promise);
 | |
|     }).then(() => Promise.all(promises))
 | |
|     .then(() => {
 | |
|       console.log('Done Challenge');
 | |
|     });
 | |
| }
 | |
| 
 | |
| function processTasks () {
 | |
|   const promises = [];
 | |
|   const tasksToQuery = uniq(tasksIds);
 | |
|   return tasksLive.find({ _id: { $in: tasksToQuery } })
 | |
|     .each(task => {
 | |
|       const promise = tasksTest.update({ _id: task._id }, task, { upsert: true });
 | |
|       promises.push(promise);
 | |
|     }).then(() => Promise.all(promises))
 | |
|     .then(() => {
 | |
|       console.log('Done Tasks');
 | |
|     });
 | |
| }
 | |
| 
 | |
| export default async function prodToTest () {
 | |
|   await processUsers();
 | |
|   await processGroups();
 | |
|   await processChallenges();
 | |
|   await processTasks();
 | |
| }
 |