|
@@ -172,28 +172,31 @@ export class ProductService {
|
|
|
): Promise<Translated<Product> | undefined> {
|
|
): Promise<Translated<Product> | undefined> {
|
|
|
const qb = this.connection.getRepository(ctx, Product).createQueryBuilder('product');
|
|
const qb = this.connection.getRepository(ctx, Product).createQueryBuilder('product');
|
|
|
FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, {
|
|
FindOptionsUtils.applyFindManyOptionsOrConditionsToQueryBuilder(qb, {
|
|
|
- relations: (relations && false) || this.relations,
|
|
|
|
|
|
|
+ relations: relations ? [...new Set(this.relations.concat(relations))] : this.relations,
|
|
|
});
|
|
});
|
|
|
// tslint:disable-next-line:no-non-null-assertion
|
|
// tslint:disable-next-line:no-non-null-assertion
|
|
|
FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);
|
|
FindOptionsUtils.joinEagerRelations(qb, qb.alias, qb.expressionMap.mainAlias!.metadata);
|
|
|
const translationQb = this.connection
|
|
const translationQb = this.connection
|
|
|
.getRepository(ctx, ProductTranslation)
|
|
.getRepository(ctx, ProductTranslation)
|
|
|
- .createQueryBuilder('product_translation')
|
|
|
|
|
- .select('product_translation.baseId')
|
|
|
|
|
- .andWhere('product_translation.slug = :slug', { slug });
|
|
|
|
|
|
|
+ .createQueryBuilder('_product_translation')
|
|
|
|
|
+ .select('_product_translation.baseId')
|
|
|
|
|
+ .andWhere('_product_translation.slug = :slug', { slug });
|
|
|
|
|
|
|
|
- return qb
|
|
|
|
|
- .leftJoin('product.channels', 'channel')
|
|
|
|
|
|
|
+ const translationsAlias = relations?.includes('translations' as any)
|
|
|
|
|
+ ? 'product__translations'
|
|
|
|
|
+ : 'product_translations';
|
|
|
|
|
+ qb.leftJoin('product.channels', 'channel')
|
|
|
.andWhere('product.id IN (' + translationQb.getQuery() + ')')
|
|
.andWhere('product.id IN (' + translationQb.getQuery() + ')')
|
|
|
.setParameters(translationQb.getParameters())
|
|
.setParameters(translationQb.getParameters())
|
|
|
.andWhere('product.deletedAt IS NULL')
|
|
.andWhere('product.deletedAt IS NULL')
|
|
|
.andWhere('channel.id = :channelId', { channelId: ctx.channelId })
|
|
.andWhere('channel.id = :channelId', { channelId: ctx.channelId })
|
|
|
.addSelect(
|
|
.addSelect(
|
|
|
// tslint:disable-next-line:max-line-length
|
|
// tslint:disable-next-line:max-line-length
|
|
|
- `CASE product_translations.languageCode WHEN '${ctx.languageCode}' THEN 2 WHEN '${ctx.channel.defaultLanguageCode}' THEN 1 ELSE 0 END`,
|
|
|
|
|
|
|
+ `CASE ${translationsAlias}.languageCode WHEN '${ctx.languageCode}' THEN 2 WHEN '${ctx.channel.defaultLanguageCode}' THEN 1 ELSE 0 END`,
|
|
|
'sort_order',
|
|
'sort_order',
|
|
|
)
|
|
)
|
|
|
- .orderBy('sort_order', 'DESC')
|
|
|
|
|
|
|
+ .orderBy('sort_order', 'DESC');
|
|
|
|
|
+ return qb
|
|
|
.getOne()
|
|
.getOne()
|
|
|
.then(product =>
|
|
.then(product =>
|
|
|
product
|
|
product
|