diff options
Diffstat (limited to 'lib/evaluation-submit')
| -rw-r--r-- | lib/evaluation-submit/service.ts | 26 |
1 files changed, 14 insertions, 12 deletions
diff --git a/lib/evaluation-submit/service.ts b/lib/evaluation-submit/service.ts index 023961de..a16a365a 100644 --- a/lib/evaluation-submit/service.ts +++ b/lib/evaluation-submit/service.ts @@ -1,14 +1,11 @@ 'use server' import db from "@/db/db"; -import { +import { reviewerEvaluations, reviewerEvaluationsView, reviewerEvaluationDetails, regEvalCriteriaDetails, - regEvalCriteriaView, - NewReviewerEvaluationDetail, - ReviewerEvaluationDetail, evaluationTargetReviewers, evaluationTargets, regEvalCriteria, @@ -16,7 +13,7 @@ import { reviewerEvaluationAttachments, users } from "@/db/schema"; -import { and, inArray, asc, desc, eq, ilike, or, SQL, count , sql, avg, isNotNull} from "drizzle-orm"; +import { and, inArray, asc, desc, eq, ilike, or, SQL, count , sql} from "drizzle-orm"; import { filterColumns } from "@/lib/filter-columns"; import { DEPARTMENT_CATEGORY_MAPPING, EvaluationFormData, GetSHIEvaluationsSubmitSchema, REVIEWER_TYPES, ReviewerType } from "./validation"; import { AttachmentInfo, EvaluationQuestionItem } from "@/types/evaluation-form"; @@ -52,7 +49,12 @@ function calculateReviewerType(division: string, materialType: string): Reviewer * reviewerType에 따라 해당하는 점수 필드를 가져옵니다 */ function getScoreByReviewerType( - detailRecord: any, + detailRecord: { + scoreEquipShip: string | null; + scoreEquipMarine: string | null; + scoreBulkShip: string | null; + scoreBulkMarine: string | null; + }, reviewerType: ReviewerType ): number | null { let score: string | null = null; @@ -267,7 +269,7 @@ export async function getEvaluationFormData(reviewerEvaluationId: number): Promi category: regEvalCriteria.category, }) .from(reviewerEvaluationAttachments) - .innerJoin( + .leftJoin( reviewerEvaluationDetails, eq(reviewerEvaluationAttachments.reviewerEvaluationDetailId, reviewerEvaluationDetails.id) ) @@ -358,7 +360,7 @@ export async function getEvaluationFormData(reviewerEvaluationId: number): Promi // 📎 첨부파일 정보 추가 attachments: questionAttachments, attachmentCount: questionAttachments.length, - attachmentTotalSize: questionAttachments.reduce((sum, att) => sum + att.fileSize, 0), + attachmentTotalSize: questionAttachments.reduce((sum, att) => sum + (att.fileSize || 0), 0), }); } @@ -414,7 +416,7 @@ export async function getEvaluationFormData(reviewerEvaluationId: number): Promi const questions: EvaluationQuestionItem[] = []; questionsMap.forEach(question => { // 현재 선택된 답변 찾기 (실제 응답이 있는 경우에만) - let selectedResponse = null; + let selectedResponse: any = null; for (const option of question.availableOptions) { const response = existingResponsesMap.get(option.detailId); if (response) { @@ -426,7 +428,7 @@ export async function getEvaluationFormData(reviewerEvaluationId: number): Promi if (selectedResponse) { question.responseId = selectedResponse.id; - question.currentScore = selectedResponse.score ? Number(selectedResponse.score) : null; + question.currentScore = selectedResponse.score; question.currentComment = selectedResponse.comment; } // ✅ else 케이스: 아직 답변하지 않은 상태 (모든 값이 null) @@ -437,7 +439,7 @@ export async function getEvaluationFormData(reviewerEvaluationId: number): Promi // 📎 11. 전체 첨부파일 통계 계산 const attachmentStats = { totalFiles: attachmentsData.length, - totalSize: attachmentsData.reduce((sum, att) => sum + att.fileSize, 0), + totalSize: attachmentsData.reduce((sum, att) => sum + (att.fileSize || 0), 0), questionsWithAttachments: attachmentsByQuestion.size + variableTypeAttachments.size, filesByCategory: Object.fromEntries(attachmentsByCategory), }; @@ -598,7 +600,7 @@ export async function updateEvaluationResponse( await db.transaction(async (tx) => { // 1. 선택된 답변 옵션의 정보 조회 (variable 타입이 아닌 경우) - let selectedDetail = null; + let selectedDetail: any = null; let score: number; if (selectedDetailId !== -1) { |
