@puls-atlas/cli
Version:
The Puls Atlas CLI tool for managing Atlas projects
84 lines • 2.38 kB
JavaScript
import inquirer from 'inquirer';
import { Firestore } from '@google-cloud/firestore';
import { getRequiredFirebasercProjects } from '../../utils/firebase.js';
import { logger } from '../../utils/logger.js';
const DEFAULT_ROLES = [{
id: 'admin',
data: {
value: 'admin',
label: {
'nl-BE': 'Beheerder',
'en-US': 'Administrator'
}
}
}, {
id: 'user',
data: {
value: 'user',
label: {
'nl-BE': 'Gebruiker',
'en-US': 'User'
}
}
}];
const createFirestoreClient = options => new Firestore(options);
export const confirmCreateDefaultRoles = async ({
createFirestoreClientImpl = createFirestoreClient,
loggerImpl = logger,
projectId,
promptImpl = inquirer.prompt
}) => {
const {
shouldCreate
} = await promptImpl([{
type: 'confirm',
name: 'shouldCreate',
default: true,
message: 'Do you want to add the default `admin` and `user` role to the `roles` collection ' + `in project ${projectId}?`
}]);
if (!shouldCreate) {
return 'skipped';
}
const spinner = loggerImpl.spinner(`Adding default roles in project ${projectId}...`);
const firestore = createFirestoreClientImpl({
projectId
});
const rolesCollection = firestore.collection('roles');
const batch = firestore.batch();
for (const role of DEFAULT_ROLES) {
batch.set(rolesCollection.doc(role.id), role.data);
}
try {
await batch.commit();
spinner.succeed(`Default roles added successfully in project ${projectId}.`);
return 'created';
} catch (error) {
spinner.fail(`Failed to add default roles in project ${projectId}: ${error.message}`);
throw error;
}
};
export default async (dependencies = {}) => {
const {
createFirestoreClient: createFirestoreClientImpl = createFirestoreClient,
getRequiredFirebasercProjects: getRequiredFirebasercProjectsImpl = getRequiredFirebasercProjects,
logger: loggerImpl = logger,
prompt: promptImpl = inquirer.prompt
} = dependencies;
const {
developmentProjectId,
productionProjectId
} = getRequiredFirebasercProjectsImpl();
await confirmCreateDefaultRoles({
createFirestoreClientImpl,
loggerImpl,
projectId: developmentProjectId,
promptImpl
});
await confirmCreateDefaultRoles({
createFirestoreClientImpl,
loggerImpl,
projectId: productionProjectId,
promptImpl
});
return true;
};