Skip to content

Commit

Permalink
WIP, changes to actually make it work on the dummy service
Browse files Browse the repository at this point in the history
  • Loading branch information
daneryl committed Sep 27, 2024
1 parent 05cd042 commit 3102087
Show file tree
Hide file tree
Showing 12 changed files with 208 additions and 173 deletions.
9 changes: 9 additions & 0 deletions ATSemanticConfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"active": true,
"templates": [
{
"template": "Document",
"properties": ["text to translate"]
}
]
}
2 changes: 2 additions & 0 deletions app/api/eventListeners.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { EventsBus } from './eventsbus';
import { AutomaticTranslationFactory } from './externalIntegrations.v2/automaticTranslation/AutomaticTranslationFactory';
import { registerEventListeners as registerSegmentationListeners } from './services/pdfsegmentation/eventListeners';
import { Suggestions } from './suggestions/suggestions';

const registerEventListeners = (eventsBus: EventsBus) => {
Suggestions.registerEventListeners(eventsBus);
registerSegmentationListeners(eventsBus);
AutomaticTranslationFactory.defaultATEntityCreationListener(eventsBus).start();
};

export { registerEventListeners };
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import { DefaultTransactionManager } from 'api/common.v2/database/data_source_defaults';
import { getConnection } from 'api/common.v2/database/getConnectionForCurrentTenant';
import { DefaultEntitiesDataSource } from 'api/entities.v2/database/data_source_defaults';
import { EventsBus } from 'api/eventsbus';
import { TaskManager } from 'api/services/tasksmanager/TaskManager';
import { DefaultSettingsDataSource } from 'api/settings.v2/database/data_source_defaults';
import { DefaultTemplatesDataSource } from 'api/templates.v2/database/data_source_defaults';
import { MongoTemplatesDataSource } from 'api/templates.v2/database/MongoTemplatesDataSource';
import { ATEntityCreationListener } from './adapters/driving/ATEntityCreationListener';
import { GenerateAutomaticTranslationsCofig } from './GenerateAutomaticTranslationConfig';
import { AJVATConfigValidator } from './infrastructure/AJVATConfigValidator';
import { AJVTranslationResultValidator } from './infrastructure/AJVTranslationResultValidator';
Expand Down Expand Up @@ -53,6 +55,13 @@ const AutomaticTranslationFactory = {
new AJVEntityInputValidator()
);
},

defaultATEntityCreationListener(eventsBus: EventsBus) {
return new ATEntityCreationListener(
// AutomaticTranslationFactory.defaultRequestEntityTranslation(),
eventsBus
);
},
};

export { AutomaticTranslationFactory };
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export type ATTaskMessage = {
};

export class RequestEntityTranslation {
static SERVICE_NAME = 'AutomaticTranslation';
static SERVICE_NAME = 'translations';

private taskManager: TaskManager<ATTaskMessage>;

Expand Down Expand Up @@ -74,12 +74,10 @@ export class RequestEntityTranslation {
}

await this.taskManager.startTask({
params: {
key: [getTenant().name, entity.sharedId, commonPropName],
text: entity[commonPropName],
language_from: languageFrom,
languages_to: languagesTo,
},
key: [getTenant().name, entity.sharedId, commonPropId.toString()],
text: entity[commonPropName],
language_from: languageFrom,
languages_to: languagesTo,
});
});
atTemplateConfig?.properties.forEach(async propId => {
Expand All @@ -94,12 +92,10 @@ export class RequestEntityTranslation {

if (entity.metadata[propName]?.[0].value) {
await this.taskManager.startTask({
params: {
key: [getTenant().name, entity.sharedId, propName],
text: entity.metadata[propName][0].value,
language_from: languageFrom,
languages_to: languagesTo,
},
key: [getTenant().name, entity.sharedId, propId],
text: entity.metadata[propName][0].value,
language_from: languageFrom,
languages_to: languagesTo,
});
}
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,30 @@
import { EntityCreatedEvent } from 'api/entities/events/EntityCreatedEvent';
import { EventsBus } from 'api/eventsbus';
import { RequestEntityTranslation } from '../../RequestEntityTranslation';
import { permissionsContext } from 'api/permissions/permissionsContext';
import { AutomaticTranslationFactory } from '../../AutomaticTranslationFactory';

export class ATEntityCreationListener {
private requestEntityTranslation: RequestEntityTranslation;

private eventBus: EventsBus;

constructor(requestEntityTranslation: RequestEntityTranslation, eventBus: EventsBus) {
this.requestEntityTranslation = requestEntityTranslation;
private ATFactory: typeof AutomaticTranslationFactory;

constructor(
eventBus: EventsBus,
ATFactory: typeof AutomaticTranslationFactory = AutomaticTranslationFactory
) {
this.eventBus = eventBus;
this.ATFactory = ATFactory;
}

start() {
this.eventBus.on(EntityCreatedEvent, async event => {
permissionsContext.setCommandContext();
const entityFrom = event.entities.find(e => e.language === event.targetLanguageKey) || {};

entityFrom._id = entityFrom._id?.toString();
entityFrom.template = entityFrom.template?.toString();

await this.requestEntityTranslation.execute(entityFrom);
await this.ATFactory.defaultRequestEntityTranslation().execute(entityFrom);
});
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,10 @@ import { ATTranslationResultValidator } from '../../contracts/ATTranslationResul
import { AJVTranslationResultValidator } from '../../infrastructure/AJVTranslationResultValidator';
import { InvalidATServerResponse } from '../../errors/generateATErrors';
import { AutomaticTranslationFactory } from '../../AutomaticTranslationFactory';
import { permissionsContext } from 'api/permissions/permissionsContext';

export class ATServiceListener {
static SERVICE_NAME = 'AutomaticTranslation';
static SERVICE_NAME = 'translations';

private taskManager: TaskManager;

Expand All @@ -20,6 +21,7 @@ export class ATServiceListener {
}

await tenants.run(async () => {
permissionsContext.setCommandContext();
await ATFactory.defaultSaveEntityTranslations().execute(result);
}, result.key[0]);
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,35 @@ import { testingEnvironment } from 'api/utils/testingEnvironment';
import { AutomaticTranslationFactory } from 'api/externalIntegrations.v2/automaticTranslation/AutomaticTranslationFactory';
import { getFixturesFactory } from 'api/utils/fixturesFactory';
import { ATEntityCreationListener } from '../ATEntityCreationListener';
import { tenants } from 'api/tenants';

const factory = getFixturesFactory();

const prepareATFactory = (executeSpy: jest.Mock<any, any, any>) => {
// @ts-ignore
const ATFactory: typeof AutomaticTranslationFactory = {
defaultRequestEntityTranslation() {
return { execute: executeSpy } as unknown as RequestEntityTranslation;
},
};

return ATFactory;
};

describe('ATEntityCreationListener', () => {
let listener: ATEntityCreationListener;
const eventBus: EventsBus = new EventsBus();
let requestEntityTranslation: RequestEntityTranslation;
let executeSpy: jest.Mock<any, any, any>;

beforeEach(async () => {
await testingEnvironment.setUp({
settings: [{ features: { automaticTranslation: { active: true } } }],
});
await testingEnvironment.setTenant('tenant');

requestEntityTranslation = AutomaticTranslationFactory.defaultRequestEntityTranslation();
jest.spyOn(requestEntityTranslation, 'execute');
executeSpy = jest.fn();

listener = new ATEntityCreationListener(requestEntityTranslation, eventBus);
listener = new ATEntityCreationListener(eventBus, prepareATFactory(executeSpy));
listener.start();
});

Expand All @@ -38,9 +49,11 @@ describe('ATEntityCreationListener', () => {
targetLanguageKey: 'en',
});

await eventBus.emit(entityCreationEvent);
await tenants.run(async () => {
await eventBus.emit(entityCreationEvent);
}, 'tenant');

expect(requestEntityTranslation.execute).toHaveBeenCalledWith(entityEn);
expect(executeSpy).toHaveBeenCalledWith(entityEn);
});
});
});
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ describe('ATServiceListener', () => {
await redisSMQ.createQueueAsync({ qname: queueName });
};

await recreateQueue('AutomaticTranslation_results').catch(error => {
await recreateQueue(`${ATServiceListener.SERVICE_NAME}_results`).catch(error => {
throw error;
});

Expand Down Expand Up @@ -85,7 +85,7 @@ describe('ATServiceListener', () => {
executeSpy.mockClear();

await redisSMQ.sendMessageAsync({
qname: 'AutomaticTranslation_results',
qname: `${ATServiceListener.SERVICE_NAME}_results`,
message: JSON.stringify(message),
});

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -87,21 +87,17 @@ describe('RequestEntityTranslation', () => {
expect(taskManager.startTask).toHaveBeenCalledTimes(2);

expect(taskManager.startTask).toHaveBeenCalledWith({
params: {
key: ['tenant', 'entity1', 'title'],
text: 'entity1',
language_from: 'en',
languages_to: ['es'],
},
key: ['tenant', 'entity1', factory.commonPropertiesTitleId('template1').toString()],
text: 'entity1',
language_from: 'en',
languages_to: ['es'],
});

expect(taskManager.startTask).toHaveBeenCalledWith({
params: {
key: ['tenant', 'entity1', 'text1'],
text: 'original text1',
language_from: 'en',
languages_to: ['es'],
},
key: ['tenant', 'entity1', factory.property('text1')._id?.toString()],
text: 'original text1',
language_from: 'en',
languages_to: ['es'],
});
});

Expand Down
1 change: 1 addition & 0 deletions app/api/utils/handleError.js
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ const prettifyError = (error, { req = {}, uncaught = false } = {}) => {
}

if (error instanceof Ajv.ValidationError) {
console.log(util.inspect(error));
result = { code: 422, message: error.message, validations: error.errors, logLevel: 'debug' };
}

Expand Down
Loading

0 comments on commit 3102087

Please sign in to comment.