From cc3c5fab060717f3d1816e8efe555fca91ab6603 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9F=D0=B5=D1=80=D0=B2=D0=BE=D0=B2=20=D0=90=D1=80=D1=82?= =?UTF-8?q?=D0=B5=D0=BC?= Date: Wed, 1 Jul 2026 21:50:05 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20dto=20=D0=B8?= =?UTF-8?q?=20sql=20=D0=B8=D0=BD=D1=81=D1=82=D1=80=D1=83=D0=BA=D1=86=D0=B8?= =?UTF-8?q?=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=BD=D0=BE=D0=B2=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=B1=D0=B0=D0=B7=D1=8B=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85?= =?UTF-8?q?=20cloud-beta.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/edge/dto/edge-response.dto.ts | 2 -- src/edge/edge.mapper.ts | 2 -- src/edge/edge.repository.ts | 6 ++---- src/edge/edge.types.ts | 2 -- src/tag/dto/get-tags.dto.ts | 4 ---- src/tag/dto/tag-response.dto.ts | 1 - src/tag/tag.mapper.ts | 1 - src/tag/tag.repository.ts | 25 +++++++------------------ src/tag/tag.service.ts | 3 +-- src/tag/tag.types.ts | 1 - 10 files changed, 10 insertions(+), 37 deletions(-) diff --git a/src/edge/dto/edge-response.dto.ts b/src/edge/dto/edge-response.dto.ts index 76bdb4d..d38b54e 100644 --- a/src/edge/dto/edge-response.dto.ts +++ b/src/edge/dto/edge-response.dto.ts @@ -2,8 +2,6 @@ export type EdgeItemDto = { id: string; name: string; parentId: string | null; - tagIds: string[]; - tagCount: number; }; export type EdgeResponseDto = { diff --git a/src/edge/edge.mapper.ts b/src/edge/edge.mapper.ts index 0ce411f..3230f9e 100644 --- a/src/edge/edge.mapper.ts +++ b/src/edge/edge.mapper.ts @@ -8,8 +8,6 @@ export function createEdgeResponse(rows: EdgeRow[]): EdgeResponseDto { id: row.id, name: row.name, parentId: row.parent_id, - tagIds: row.tag_ids ?? [], - tagCount: row.tag_count, })), }; } diff --git a/src/edge/edge.repository.ts b/src/edge/edge.repository.ts index 077180d..dc476b8 100644 --- a/src/edge/edge.repository.ts +++ b/src/edge/edge.repository.ts @@ -6,16 +6,14 @@ import { EdgeRow } from './edge.types'; export class EdgeRepository { constructor(private readonly db: DbService) {} - /** Читает каталог edge без расчетов по текущим значениям. */ + /** Reads the edge catalog. */ async findAll(parentId: string | null, search: string | null): Promise { const result = await this.db.query( ` SELECT e.id, e.name, - e.parent_id, - e.tag_ids, - cardinality(e.tag_ids)::integer AS tag_count + e.parent_id FROM edge AS e WHERE ($1::varchar IS NULL OR e.parent_id = $1::varchar) AND ( diff --git a/src/edge/edge.types.ts b/src/edge/edge.types.ts index 9d3d41d..2d34e88 100644 --- a/src/edge/edge.types.ts +++ b/src/edge/edge.types.ts @@ -2,6 +2,4 @@ export type EdgeRow = { id: string; name: string; parent_id: string | null; - tag_ids: string[]; - tag_count: number; }; diff --git a/src/tag/dto/get-tags.dto.ts b/src/tag/dto/get-tags.dto.ts index ae8e5b6..6988a40 100644 --- a/src/tag/dto/get-tags.dto.ts +++ b/src/tag/dto/get-tags.dto.ts @@ -1,10 +1,6 @@ import { IsOptional, IsString } from 'class-validator'; export class GetTagsDto { - @IsOptional() - @IsString() - edge?: string; - @IsOptional() @IsString() search?: string; diff --git a/src/tag/dto/tag-response.dto.ts b/src/tag/dto/tag-response.dto.ts index d9f9f8a..3bfba5e 100644 --- a/src/tag/dto/tag-response.dto.ts +++ b/src/tag/dto/tag-response.dto.ts @@ -6,7 +6,6 @@ export type TagItemDto = { max: number | null; comment: string; unitOfMeasurement: string; - edgeIds: string[]; precision: number | null; }; diff --git a/src/tag/tag.mapper.ts b/src/tag/tag.mapper.ts index 0729650..d54e855 100644 --- a/src/tag/tag.mapper.ts +++ b/src/tag/tag.mapper.ts @@ -12,7 +12,6 @@ export function createTagResponse(rows: TagRow[]): TagResponseDto { max: row.max, comment: row.comment, unitOfMeasurement: row.unit_of_measurement, - edgeIds: row.edge_ids ?? [], precision: row.precision, })), }; diff --git a/src/tag/tag.repository.ts b/src/tag/tag.repository.ts index ea79e46..0378fc5 100644 --- a/src/tag/tag.repository.ts +++ b/src/tag/tag.repository.ts @@ -6,8 +6,8 @@ import { TagRow } from './tag.types'; export class TagRepository { constructor(private readonly db: DbService) {} - /** Читает метаданные тегов с учетом связей из tag.edge_ids и edge.tag_ids. */ - async findAll(edge: string | null, search: string | null): Promise { + /** Reads the tag catalog. */ + async findAll(search: string | null): Promise { const result = await this.db.query( ` SELECT @@ -18,31 +18,20 @@ export class TagRepository { t.max, t.comment, t.unit_of_measurement, - t.edge_ids, t.precision FROM tag AS t WHERE ( - $1::varchar IS NULL - OR $1::varchar = ANY(t.edge_ids) - OR EXISTS ( - SELECT 1 - FROM edge AS e - WHERE e.id = $1::varchar - AND t.id = ANY(e.tag_ids) - ) + $1::text IS NULL + OR t.id ILIKE $1::text + OR t.name ILIKE $1::text + OR t.comment ILIKE $1::text ) - AND ( - $2::text IS NULL - OR t.id ILIKE $2::text - OR t.name ILIKE $2::text - OR t.comment ILIKE $2::text - ) ORDER BY NULLIF(t.tag_group, '') ASC NULLS LAST, t.name ASC, t.id ASC `, - [edge, search], + [search], ); return result.rows; diff --git a/src/tag/tag.service.ts b/src/tag/tag.service.ts index 440d26c..0575d21 100644 --- a/src/tag/tag.service.ts +++ b/src/tag/tag.service.ts @@ -10,9 +10,8 @@ export class TagService { /** Нормализует фильтры и возвращает метаданные тегов для UI. */ async findAll(query: GetTagsDto): Promise { - const edge = query.edge ?? null; const search = query.search ? `%${query.search}%` : null; - const rows = await this.repository.findAll(edge, search); + const rows = await this.repository.findAll(search); return createTagResponse(rows); } } diff --git a/src/tag/tag.types.ts b/src/tag/tag.types.ts index 751f007..618ae5d 100644 --- a/src/tag/tag.types.ts +++ b/src/tag/tag.types.ts @@ -6,6 +6,5 @@ export type TagRow = { max: number | null; comment: string; unit_of_measurement: string; - edge_ids: string[]; precision: number | null; };