summaryrefslogtreecommitdiff
path: root/lib/rfq-last/service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/rfq-last/service.ts')
-rw-r--r--lib/rfq-last/service.ts97
1 files changed, 97 insertions, 0 deletions
diff --git a/lib/rfq-last/service.ts b/lib/rfq-last/service.ts
index f600d04b..50a5c64c 100644
--- a/lib/rfq-last/service.ts
+++ b/lib/rfq-last/service.ts
@@ -934,6 +934,103 @@ export async function getRfqVendorAttachments(rfqId: number) {
}
}
+/**
+ * 특정 RFQ의 특정 벤더가 제출한 모든 응답의 첨부파일 조회, 추후 협력업체가 제출한 첨부파일 히스토리 조회용으로 사용
+ */
+export async function getVendorResponseAttachments(rfqId: number, vendorId: number) {
+ try {
+ if (!rfqId || rfqId <= 0 || !vendorId || vendorId <= 0) {
+ return {
+ success: false,
+ error: "유효하지 않은 RFQ ID 또는 벤더 ID입니다",
+ data: []
+ }
+ }
+
+ // 먼저 해당 rfq에 연결된 벤더의 모든응답들을 찾기
+ const vendorResponses = await db
+ .select({
+ id: rfqLastVendorResponses.id,
+ status: rfqLastVendorResponses.status,
+ responseVersion: rfqLastVendorResponses.responseVersion,
+ })
+ .from(rfqLastVendorResponses)
+ .where(
+ and(
+ eq(rfqLastVendorResponses.rfqsLastId, rfqId),
+ eq(rfqLastVendorResponses.vendorId, vendorId)
+ )
+ )
+
+ if (vendorResponses.length === 0) {
+ return {
+ success: true,
+ data: []
+ }
+ }
+
+ const responseIds = vendorResponses.map(r => r.id)
+
+ // 해당 응답들의 모든 첨부파일 조회
+ const data = await db
+ .select({
+ // 첨부파일 메인 정보
+ id: rfqLastVendorAttachments.id,
+ vendorResponseId: rfqLastVendorAttachments.vendorResponseId,
+ attachmentType: rfqLastVendorAttachments.attachmentType,
+ documentNo: rfqLastVendorAttachments.documentNo,
+
+ // 파일 정보
+ fileName: rfqLastVendorAttachments.fileName,
+ originalFileName: rfqLastVendorAttachments.originalFileName,
+ filePath: rfqLastVendorAttachments.filePath,
+ fileSize: rfqLastVendorAttachments.fileSize,
+ fileType: rfqLastVendorAttachments.fileType,
+
+ // 파일 설명
+ description: rfqLastVendorAttachments.description,
+
+ // 유효기간
+ validFrom: rfqLastVendorAttachments.validFrom,
+ validTo: rfqLastVendorAttachments.validTo,
+
+ // 업로드 정보
+ uploadedBy: rfqLastVendorAttachments.uploadedBy,
+ uploadedAt: rfqLastVendorAttachments.uploadedAt,
+
+ // 업로더 정보
+ uploadedByName: users.name,
+
+ // 응답 정보
+ responseStatus: rfqLastVendorResponses.status,
+ responseVersion: rfqLastVendorResponses.responseVersion,
+ })
+ .from(rfqLastVendorAttachments)
+ .leftJoin(
+ rfqLastVendorResponses,
+ eq(rfqLastVendorAttachments.vendorResponseId, rfqLastVendorResponses.id)
+ )
+ .leftJoin(users, eq(rfqLastVendorAttachments.uploadedBy, users.id))
+ .where(inArray(rfqLastVendorAttachments.vendorResponseId, responseIds))
+ .orderBy(
+ desc(rfqLastVendorAttachments.uploadedAt),
+ rfqLastVendorAttachments.attachmentType
+ )
+
+ return {
+ data,
+ success: true
+ }
+ } catch (err) {
+ console.error("getVendorResponseAttachments error:", err)
+ return {
+ data: [],
+ success: false,
+ error: "첨부파일 조회 중 오류가 발생했습니다"
+ }
+ }
+}
+
// 벤더 추가 액션