From b9a109073d11262dd7ed84e25ff3cd0144c0c391 Mon Sep 17 00:00:00 2001 From: dujinkim Date: Fri, 4 Jul 2025 00:21:05 +0000 Subject: (최겸) 0703 평가기준표 대표님 작업사항 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/evaluation-criteria/service.ts | 72 +++++++++++++++++++++++++++----------- 1 file changed, 51 insertions(+), 21 deletions(-) (limited to 'lib/evaluation-criteria/service.ts') diff --git a/lib/evaluation-criteria/service.ts b/lib/evaluation-criteria/service.ts index 8badc61f..e204579f 100644 --- a/lib/evaluation-criteria/service.ts +++ b/lib/evaluation-criteria/service.ts @@ -8,7 +8,7 @@ import { asc, desc, ilike, - or, + or,count, eq } from 'drizzle-orm'; import { countRegEvalCriteria, @@ -27,7 +27,7 @@ import { REG_EVAL_CRITERIA_CATEGORY2_ENUM, REG_EVAL_CRITERIA_CATEGORY_ENUM, REG_EVAL_CRITERIA_ITEM_ENUM, - regEvalCriteriaView, + regEvalCriteria, regEvalCriteriaDetails, // regEvalCriteriaView 대신 regEvalCriteria 사용 type NewRegEvalCriteria, type NewRegEvalCriteriaDetails, type RegEvalCriteria, @@ -42,24 +42,25 @@ import { type GetRegEvalCriteriaSchema } from './validations'; // ---------------------------------------------------------------------------------------------------- -/* FUNCTION FOR GETTING CRITERIA */ +/* FUNCTION FOR GETTING CRITERIA - 메인 기준 목록만 가져오기 */ async function getRegEvalCriteria(input: GetRegEvalCriteriaSchema) { try { const offset = (input.page - 1) * input.perPage; const advancedWhere = filterColumns({ - table: regEvalCriteriaView, + table: regEvalCriteria, // view 대신 메인 테이블 사용 filters: input.filters, joinOperator: input.joinOperator, }); - // Filtering + // Filtering - 메인 테이블 컬럼들 기준으로 검색 let globalWhere; if (input.search) { const s = `%${input.search}%`; globalWhere = or( - ilike(regEvalCriteriaView.category, s), - ilike(regEvalCriteriaView.item, s), - ilike(regEvalCriteriaView.classification, s), + ilike(regEvalCriteria.category, s), + ilike(regEvalCriteria.item, s), + ilike(regEvalCriteria.classification, s), + ilike(regEvalCriteria.range, s), // range 검색 추가 ); } const finalWhere = and(advancedWhere, globalWhere); @@ -68,20 +69,27 @@ async function getRegEvalCriteria(input: GetRegEvalCriteriaSchema) { const orderBy = input.sort.length > 0 ? input.sort.map((item) => { return item.desc - ? desc(regEvalCriteriaView[item.id]) - : asc(regEvalCriteriaView[item.id]); + ? desc(regEvalCriteria[item.id]) + : asc(regEvalCriteria[item.id]); }) - : [asc(regEvalCriteriaView.id)]; + : [asc(regEvalCriteria.id)]; - // Getting Data + // Getting Data - 메인 기준 데이터만 가져오기 const { data, total } = await db.transaction(async (tx) => { - const data = await selectRegEvalCriteria(tx, { - where: finalWhere, - orderBy, - offset, - limit: input.perPage, - }); - const total = await countRegEvalCriteria(tx, finalWhere); + const data = await tx + .select() + .from(regEvalCriteria) + .where(finalWhere) + .orderBy(...orderBy) + .offset(offset) + .limit(input.perPage); + + const totalResult = await tx + .select({ count: count() }) + .from(regEvalCriteria) + .where(finalWhere); + + const total = totalResult[0]?.count || 0; return { data, total }; }); @@ -105,6 +113,26 @@ async function getRegEvalCriteriaWithDetails(id: number) { } } +/* FUNCTION FOR GETTING CRITERIA DETAILS ONLY - 특정 기준의 상세 항목들만 가져오기 */ +async function getRegEvalCriteriaDetails(criteriaId: number) { + try { + + console.log(criteriaId,"criteriaId") + return await db.transaction(async (tx) => { + const details = await tx + .select() + .from(regEvalCriteriaDetails) + .where(eq(regEvalCriteriaDetails.criteriaId, criteriaId)) + .orderBy(asc(regEvalCriteriaDetails.orderIndex)); + + return details; + }); + } catch (err) { + console.error('Error in Getting Regular Evaluation Criteria Details: ', err); + return []; + } +} + // ---------------------------------------------------------------------------------------------------- /* FUNCTION FOR CREATING CRITERIA WITH DETAILS */ @@ -145,6 +173,9 @@ async function modifyRegEvalCriteriaWithDetails( ) { try { return await db.transaction(async (tx) => { + + console.log(id, criteriaData) + const modifiedCriteria = await updateRegEvalCriteria(tx, id, criteriaData); const originCriteria = await getRegEvalCriteriaWithDetails(id); const originCriteriaDetails = originCriteria?.criteriaDetails || []; @@ -214,8 +245,6 @@ async function removeRegEvalCriteriaDetails(id: number) { } } - - // ---------------------------------------------------------------------------------------------------- /* EXPORT */ @@ -224,6 +253,7 @@ export { modifyRegEvalCriteriaWithDetails, getRegEvalCriteria, getRegEvalCriteriaWithDetails, + getRegEvalCriteriaDetails, // 새로 추가 removeRegEvalCriteria, removeRegEvalCriteriaDetails, }; \ No newline at end of file -- cgit v1.2.3