В моем проекте Nest.js у меня есть следующий шаблон в моих сущностях:
@Entity
class ArticleEntity {
@PrimaryGeneratedColumn()
id: number;
@Column({type: 'jsonb'})
title: {[locale: string]: string};
}
Затем я бы хотел вызвать метод извлечения с параметром locale
и после загрузки запустить хук, который заменит объект в title
строковым значением под переданным ключом locale
. Я не знаю, как это сделать, потому что у меня нет опыта работы с хуками TypeORM, а также потому, что форма ArticleEntity уже определена классом, а поле title
имеет тип {[locale: string]: string}
, а не string
.
Я делал это ранее в Sequelize, и это выглядело так:
// in Article
Article.beforeFind('chooseLocale', (options) => {
const locale = options.locale || 'en';
delete options.locale;
if (locale !== 'any') {
options.attributes = {
exclude: ['title'],
include: [
[sequelize.literal(`"title" ->> '${locale}'`), 'title'],
]
};
}
return options;
});
... хотя, очевидно, что JavaScript, а не TypeScript будет жаловаться на несоответствие типов:)
Я даже не уверен, должен ли я в TypeORM действительно использовать ловушку или какие-либо другие способы получения данных. Я хотел бы, чтобы все методы извлечения работали правильно. Есть ли способ?