Skip to content

Commit

Permalink
feat: seed roles and accounts
Browse files Browse the repository at this point in the history
  • Loading branch information
Arun-KumarH committed Jun 21, 2024
1 parent 6449662 commit e432d98
Show file tree
Hide file tree
Showing 5 changed files with 78 additions and 12 deletions.
File renamed without changes.
24 changes: 24 additions & 0 deletions data/seed_data/seed-roles.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
[
{
"id": "superadministrator-r-id",
"name": "Superadmininistrator",
"description": "Has read and write access across all orgnizational scopes",
"assignable_by_roles": [
"superadministrator-r-id"
],
"meta": {
"owners": [
{
"id": "urn:restorecommerce:acs:names:ownerIndicatoryEntity",
"value": "urn:restorecommerce:acs:model:organization.Organization",
"attributes": [
{
"id": "urn:restorecommerce:acs:names:ownerInstance",
"value": "system"
}
]
}
]
}
}
]
4 changes: 4 additions & 0 deletions src/service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3092,6 +3092,10 @@ export class RoleService extends ServiceBase<RoleListResponse, RoleList> impleme
await this.redisClient.quit();
}

superUpsert(request: RoleList, context: any): Promise<DeepPartial<RoleListResponse>> {
return super.upsert(request, context);
}

async create(request: RoleList, context: any): Promise<DeepPartial<RoleListResponse>> {
if (!request || !request.items || request?.items?.length == 0) {
return returnOperationStatus(400, 'No role was provided for creation');
Expand Down
57 changes: 46 additions & 11 deletions src/worker.ts
Original file line number Diff line number Diff line change
Expand Up @@ -203,15 +203,15 @@ export class Worker {
}
}
if (externalJobFiles && externalJobFiles.length > 0) {
externalJobFiles.forEach( async (externalFile) => {
if (externalFile.endsWith('.js') || externalFile.endsWith('.cjs') ) {
externalJobFiles.forEach(async (externalFile) => {
if (externalFile.endsWith('.js') || externalFile.endsWith('.cjs')) {
let require_dir = './jobs/';
if (process.env.EXTERNAL_JOBS_REQUIRE_DIR) {
require_dir = process.env.EXTERNAL_JOBS_REQUIRE_DIR;
}
// check for double default
let fileImport = await import(require_dir + externalFile);
if(fileImport?.default?.default) {
if (fileImport?.default?.default) {
(async () => (await import(require_dir + externalFile)).default.default(cfg, logger, events, runWorker))().catch(err => {
this.logger.error(`Error scheduling external job ${externalFile}`, { err: err.message });
});
Expand Down Expand Up @@ -349,10 +349,50 @@ export class Worker {
})
} as BindConfig<HealthDefinition>);

// Import static seed roles
const seedDataConfig = this.cfg.get('seed_data');
if (seedDataConfig) {
const entities = Object.keys(seedDataConfig);
for (let entity of entities) {
const filePath = seedDataConfig[entity];
await new Promise<void>((resolve, reject) => {
fs.readFile(filePath, (err, data) => {
if (err) {
this.logger.error(`Failed loading seed ${entity} file`, err);
reject(err);
return;
}
let seedData;
try {
seedData = JSON.parse(data.toString());
} catch(err) {
this.logger.error(`Error parsing seed ${entity} file`, err);
reject(err);
return;
}
this.logger.info(`Loaded ${seedData?.length} seed ${entity}`);
const service = entity === 'user' ? this.userService : this.roleService;

service.superUpsert({ items: seedData }, undefined)
.then(() => {
this.logger.info(`Seed ${entity} upserted successfully`);
resolve();
})
.catch( (err: any) => {
this.logger.error(`Failed upserting seed ${entity} file`, err);
reject(err);
});
});
}).catch((err) => {
this.logger.error(`Failed upserting seed ${entity} file`, err);
});
}
}

// Import static seed accounts
const seedAccountFile = this.cfg.get('seed_account_file');
if (seedAccountFile) {
this.logger.info('Loading seed account file:', seedAccountFile);
this.logger.info('Loading seed account file', { seedAccountFile });
await new Promise<void>((resolve, reject) => {
fs.readFile(seedAccountFile, (err, data) => {
if (err) {
Expand All @@ -374,13 +414,8 @@ export class Worker {
items: seedAccounts,
}), undefined)
.then(() => {
this.logger.info('Loading default seed account token into redis');

const token = defaultSeedAccount.tokens.find((t: any) => t.default_technical_token).token;

cis.redisClient.set('default_account_api_token', token)
.then(() => resolve())
.catch(reject);
this.logger.info('Seed accounts upserted successfully');
resolve();
})
.catch(err => {
this.logger.error('Failed upserting seed account file:', err);
Expand Down
5 changes: 4 additions & 1 deletion test/cfg/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -373,5 +373,8 @@
}
}
},
"seed_account_file": "./test/seed-accounts.json"
"seed_data": {
"users": "./data/seed_data/seed-accounts.json",
"roles": "./data/seed_data/seed-roles.json"
}
}

0 comments on commit e432d98

Please sign in to comment.