Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 1 addition & 3 deletions src/resources/resources.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -228,9 +228,7 @@ export class ResourcesService {
resource.attrs = { ...resource.attrs, url: artifactName };
await this.resourceRepository.save(resource);

if (['text/plain', 'text/markdown'].includes(file.mimetype)) {
await WizardTask.reader.upsert(user, resource, this.taskRepository);
}
await WizardTask.reader.upsert(user, resource, this.taskRepository);

return resource;
}
Expand Down
36 changes: 36 additions & 0 deletions src/wizard/processors/collect.processor.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { ResourcesService } from 'src/resources/resources.service';
import { Task } from 'src/tasks/tasks.entity';
import { BadRequestException } from '@nestjs/common';
import { Processor } from 'src/wizard/processors/processor.abstract';

export class CollectProcessor extends Processor {
constructor(private readonly resourcesService: ResourcesService) {
super();
}

async process(task: Task): Promise<Record<string, any>> {
if (!task.payload?.resourceId) {
throw new BadRequestException('Invalid task payload');
}
const resourceId = task.payload.resourceId;
if (task.exception) {
await this.resourcesService.update(task.user, resourceId, {
namespaceId: task.namespace.id,
content: task.exception.error,
});
return {};
} else if (task.output) {
const { markdown, title, ...attrs } = task.output || {};
const resource = await this.resourcesService.get(resourceId);
const mergedAttrs = { ...(resource?.attrs || {}), ...attrs };
await this.resourcesService.update(task.user, resourceId, {
namespaceId: task.namespace.id,
name: title,
content: markdown,
attrs: mergedAttrs,
});
return { resourceId };
}
return {};
}
}
5 changes: 5 additions & 0 deletions src/wizard/processors/processor.abstract.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { Task } from 'src/tasks/tasks.entity';

export abstract class Processor {
abstract process(task: Task): Promise<Record<string, any>>;
}
12 changes: 12 additions & 0 deletions src/wizard/processors/reader.processor.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { CollectProcessor } from 'src/wizard/processors/collect.processor';
import { Task } from 'src/tasks/tasks.entity';

export class ReaderProcessor extends CollectProcessor {
async process(task: Task): Promise<Record<string, any>> {
if (task.output?.markdown) {
return await super.process(task);
} else {
return {};
}
}
}
43 changes: 5 additions & 38 deletions src/wizard/wizard.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,40 +16,9 @@ import { User } from 'src/user/user.entity';
import { TaskCallbackDto } from 'src/wizard/dto/task-callback.dto';
import { Observable, Subscriber } from 'rxjs';
import { ConfigService } from '@nestjs/config';

abstract class Processor {
abstract process(task: Task): Promise<Record<string, any>>;
}

class CollectProcessor extends Processor {
constructor(private readonly resourcesService: ResourcesService) {
super();
}

async process(task: Task): Promise<Record<string, any>> {
if (!task.payload?.resourceId) {
throw new BadRequestException('Invalid task payload');
}
const resourceId = task.payload.resourceId;
if (task.exception) {
await this.resourcesService.update(task.user, resourceId, {
namespaceId: task.namespace.id,
content: task.exception.error,
});
return {};
} else if (task.output) {
const { markdown, title, ...attrs } = task.output || {};
await this.resourcesService.update(task.user, resourceId, {
namespaceId: task.namespace.id,
name: title,
content: markdown,
attrs,
});
return { resourceId };
}
return {};
}
}
import { CollectProcessor } from 'src/wizard/processors/collect.processor';
import { ReaderProcessor } from 'src/wizard/processors/reader.processor';
import { Processor } from 'src/wizard/processors/processor.abstract';

@Injectable()
export class WizardService {
Expand All @@ -62,11 +31,9 @@ export class WizardService {
private readonly resourcesService: ResourcesService,
private readonly configService: ConfigService,
) {
const collectProcessor = new CollectProcessor(resourcesService);

this.processors = {
collect: collectProcessor,
file_reader: collectProcessor,
collect: new CollectProcessor(resourcesService),
file_reader: new ReaderProcessor(resourcesService),
};
const baseUrl = this.configService.get<string>('OBB_WIZARD_BASE_URL');
if (!baseUrl) {
Expand Down