summaryrefslogtreecommitdiff
path: root/lib/vendors/service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/vendors/service.ts')
-rw-r--r--lib/vendors/service.ts66
1 files changed, 66 insertions, 0 deletions
diff --git a/lib/vendors/service.ts b/lib/vendors/service.ts
index 0c61c270..76193eb9 100644
--- a/lib/vendors/service.ts
+++ b/lib/vendors/service.ts
@@ -1983,6 +1983,72 @@ export async function rejectVendors(input: ApproveVendorsInput & { userId: numbe
*
* 예: PQ-240520-00001, PQ-240520-00002, ...
*/
+// 벤더의 연락처 조회 (간단 버전)
+// 추후 Pq요청 내 업체담당자 선택 기능
+export async function getVendorContactsSimple(vendorId: number) {
+ return unstable_cache(
+ async () => {
+ try {
+ const contacts = await db
+ .select({
+ id: vendorContacts.id,
+ contactName: vendorContacts.contactName,
+ contactPosition: vendorContacts.contactPosition,
+ contactEmail: vendorContacts.contactEmail,
+ contactPhone: vendorContacts.contactPhone,
+ isPrimary: vendorContacts.isPrimary,
+ createdAt: vendorContacts.createdAt,
+ })
+ .from(vendorContacts)
+ .where(eq(vendorContacts.vendorId, vendorId))
+ .orderBy(desc(vendorContacts.isPrimary), desc(vendorContacts.createdAt));
+
+ return { success: true, data: contacts };
+ } catch (error) {
+ logger.error('벤더 연락처 조회 실패:', error);
+ return { success: false, error: getErrorMessage(error) };
+ }
+ },
+ [`vendor-contacts-simple-${vendorId}`],
+ { revalidate: 300 } // 5분 캐시
+ )();
+}
+
+// 벤더의 PQ 히스토리 조회
+export async function getVendorPQHistory(vendorId: number) {
+ return unstable_cache(
+ async () => {
+ try {
+ const pqHistory = await db
+ .select({
+ id: vendorPQSubmissions.id,
+ pqNumber: vendorPQSubmissions.pqNumber,
+ type: vendorPQSubmissions.type,
+ projectId: vendorPQSubmissions.projectId,
+ status: vendorPQSubmissions.status,
+ dueDate: vendorPQSubmissions.dueDate,
+ createdAt: vendorPQSubmissions.createdAt,
+ updatedAt: vendorPQSubmissions.updatedAt,
+ projectCode: projects.code,
+ projectName: projects.name,
+ pqItems: vendorPQSubmissions.pqItems,
+ })
+ .from(vendorPQSubmissions)
+ .leftJoin(projects, eq(vendorPQSubmissions.projectId, projects.id))
+ .where(eq(vendorPQSubmissions.vendorId, vendorId))
+ .orderBy(desc(vendorPQSubmissions.createdAt));
+
+ return { success: true, data: pqHistory };
+ } catch (error) {
+ logger.error('벤더 PQ 히스토리 조회 실패:', error);
+ return { success: false, error: getErrorMessage(error) };
+ }
+ },
+ [`vendor-pq-history-${vendorId}`],
+ { revalidate: 300 } // 5분 캐시
+ )();
+}
+
export async function generatePQNumber(isProject: boolean = false) {
try {
// 현재 날짜 가져오기