angular-t9n
Version:
A translation tool for Angular i18n
64 lines (57 loc) • 1.92 kB
text/typescript
import { Controller, Get, NotFoundException, Param, Query } from '@nestjs/common';
import { LinkHelper } from '../link-helper';
import {
PaginationResponse,
QueryParams,
SourceUnitResponse,
TargetUnitResponse,
TranslationSource,
TranslationSourceUnit,
} from '../models';
import { TranslationTargetRegistry } from '../persistence';
export class SourceUnitsController {
constructor(
private _translationSource: TranslationSource,
private _translationTargetRegistry: TranslationTargetRegistry,
private _linkHelper: LinkHelper,
) {}
getPagination(
queryParams: QueryParams,
): PaginationResponse<TranslationSourceUnit, SourceUnitResponse> {
return new PaginationResponse({
query: queryParams,
entries: this._translationSource.units,
responseMapper: (unit) => {
const sourceUnit = new SourceUnitResponse(unit, this._linkHelper);
sourceUnit._embedded = this._createEmbeddedObject(unit);
return sourceUnit;
},
urlFactory: (query) => this._linkHelper.sourceUnits(query),
});
}
getSourceUnit( id: string): SourceUnitResponse {
const unit = this._translationSource.unitMap.get(id);
if (!unit) {
throw new NotFoundException('Source unit does not exist');
}
const sourceUnit = new SourceUnitResponse(unit, this._linkHelper);
sourceUnit._embedded = this._createEmbeddedObject(unit);
return sourceUnit;
}
private _createEmbeddedObject(unit: TranslationSourceUnit) {
return this._translationTargetRegistry.values().reduce(
(current, next) =>
Object.assign(current, {
[next.language]: new TargetUnitResponse(
next,
next.unitMap.get(unit.id)!,
this._linkHelper,
),
}),
{} as { [language: string]: TargetUnitResponse },
);
}
}