import { Injectable } from '@nestjs/common'; import { ObjectType, RowModelRequest, TermMethodSchema, UserProfile, } from '@nice/common'; import { date, z } from 'zod'; import { RowCacheService } from '../base/row-cache.service'; import { isFieldCondition } from '../base/sql-builder'; @Injectable() export class TermRowService extends RowCacheService { constructor() { super(ObjectType.TERM, false); } createUnGroupingRowSelect( requset: z.infer, ): string[] { const result = super .createUnGroupingRowSelect(requset) .concat([ `${this.tableName}.name AS name`, `${this.tableName}.order AS order`, `${this.tableName}.has_children AS has_children`, `${this.tableName}.parent_id AS parent_id`, `${this.tableName}.domain_id AS domain_id`, `taxonomy.name AS taxonomy_name`, `taxonomy.id AS taxonomy_id`, ]); return result; } createJoinSql(request?: RowModelRequest): string[] { return [ `LEFT JOIN taxonomy ON ${this.tableName}.taxonomy_id = taxonomy.id`, ]; } protected createGetRowsFilters( request: z.infer, staff: UserProfile, ) { const condition = super.createGetRowsFilters(request); const { parentId, domainId, includeDeleted = false, taxonomyId } = request; if (isFieldCondition(condition)) { return; } if (request.groupKeys.length === 0) { if (parentId) { condition.AND.push({ field: `${this.tableName}.parent_id`, value: parentId, op: 'equals', }); } else if (parentId === null) { condition.AND.push({ field: `${this.tableName}.parent_id`, op: 'blank', }); } } if (domainId) { condition.AND.push({ field: `${this.tableName}.domain_id`, value: domainId, op: 'equals', }); } else if (domainId === null) { condition.AND.push({ field: `${this.tableName}.domain_id`, op: 'blank', }); } if (taxonomyId) { condition.AND.push({ field: `${this.tableName}.taxonomy_id`, value: taxonomyId, op: 'equals', }); } if (!includeDeleted) { condition.AND.push({ field: `${this.tableName}.deleted_at`, type: 'date', op: 'blank', }); } return condition; } }