summaryrefslogtreecommitdiff
path: root/lib/pq/service.ts
diff options
context:
space:
mode:
Diffstat (limited to 'lib/pq/service.ts')
-rw-r--r--lib/pq/service.ts81
1 files changed, 64 insertions, 17 deletions
diff --git a/lib/pq/service.ts b/lib/pq/service.ts
index 5870a77f..172542a3 100644
--- a/lib/pq/service.ts
+++ b/lib/pq/service.ts
@@ -18,7 +18,7 @@ import { vendorRegularRegistrations } from "@/db/schema/vendorRegistrations";
import { saveFile, saveDRMFile } from "@/lib/file-stroage";
import { GetVendorsSchema } from "../vendors/validations";
import { selectVendors } from "../vendors/repository";
-import { projects, users } from "@/db/schema";
+import { projects, users, roles, userRoles } from "@/db/schema";
import { headers } from 'next/headers';
import { getServerSession } from "next-auth/next"
import { authOptions } from "@/app/api/auth/[...nextauth]/route"
@@ -1763,8 +1763,20 @@ export async function getPQSubmissions(input: GetPQSubmissionsSchema) {
// 7) 정렬 및 페이징 처리된 데이터 조회
const orderByColumns = input.sort.map((sort) => {
- const column = sort.id as keyof typeof vendorPQSubmissions.$inferSelect;
- return sort.desc ? desc(vendorPQSubmissions[column]) : asc(vendorPQSubmissions[column]);
+ const column = sort.id;
+
+ // JOIN된 테이블의 컬럼인 경우 적절한 테이블 참조
+ if (column === 'vendorName') {
+ return sort.desc ? desc(vendors.vendorName) : asc(vendors.vendorName);
+ } else if (column === 'projectName') {
+ return sort.desc ? desc(projects.name) : asc(projects.name);
+ } else if (column === 'requesterName') {
+ return sort.desc ? desc(users.name) : asc(users.name);
+ } else {
+ // vendorPQSubmissions 테이블의 컬럼인 경우
+ const dbColumn = column as keyof typeof vendorPQSubmissions.$inferSelect;
+ return sort.desc ? desc(vendorPQSubmissions[dbColumn]) : asc(vendorPQSubmissions[dbColumn]);
+ }
});
if (orderByColumns.length === 0) {
@@ -2818,40 +2830,75 @@ function getInvestigationMethodLabel(method: string): string {
}
}
+// export async function getQMManagers() {
+// try {
+// // QM 부서 사용자만 필터링 (department 필드가 있다고 가정)
+// // 또는 QM 역할을 가진 사용자만 필터링 (role 필드가 있다고 가정)
+// const qmUsers = await db
+// .select({
+// id: users.id,
+// name: users.name,
+// email: users.email,
+// })
+// .from(users)
+// // .where(
+// // // 필요에 따라 조건 조정 (예: QM 부서 또는 특정 역할만)
+// // // eq(users.department, "QM") 또는
+// // // eq(users.role, "QM_MANAGER")
+// // // 테스트를 위해 모든 사용자 반환도 가능
+// // eq(users.active, true)
+// // )
+// .orderBy(users.name)
+
+// return {
+// data: qmUsers,
+// success: true
+// }
+// } catch (error) {
+// console.error("QM 담당자 목록 조회 오류:", error)
+// return {
+// data: [],
+// success: false,
+// error: error instanceof Error ? error.message : "QM 담당자 목록을 가져오는 중 오류가 발생했습니다."
+// }
+// }
+// }
export async function getQMManagers() {
try {
- // QM 부서 사용자만 필터링 (department 필드가 있다고 가정)
- // 또는 QM 역할을 가진 사용자만 필터링 (role 필드가 있다고 가정)
+ // QM 역할이 할당된 사용자들을 조회
const qmUsers = await db
.select({
id: users.id,
name: users.name,
email: users.email,
+ employeeNumber: users.employeeNumber,
+ deptName: users.deptName,
+ isActive: users.isActive,
})
.from(users)
- // .where(
- // // 필요에 따라 조건 조정 (예: QM 부서 또는 특정 역할만)
- // // eq(users.department, "QM") 또는
- // // eq(users.role, "QM_MANAGER")
- // // 테스트를 위해 모든 사용자 반환도 가능
- // eq(users.active, true)
- // )
+ .innerJoin(userRoles, eq(users.id, userRoles.userId))
+ .innerJoin(roles, eq(userRoles.roleId, roles.id))
+ .where(
+ and(
+ ilike(roles.name, "%QM%"), // "QM"이 포함된 역할명
+ eq(users.isActive, true) // 활성 사용자만
+ )
+ )
.orderBy(users.name)
- return {
+ return {
data: qmUsers,
- success: true
+ success: true
}
} catch (error) {
console.error("QM 담당자 목록 조회 오류:", error)
- return {
+ return {
data: [],
success: false,
- error: error instanceof Error ? error.message : "QM 담당자 목록을 가져오는 중 오류가 발생했습니다."
+ error: error instanceof Error ? error.message : "QM 담당자 목록을 가져오는 중 오류가 발생했습니다."
}
}
}
-
export async function getFactoryLocationAnswer(vendorId: number, projectId: number | null = null) {
try {
// 1. "Location of Factory" 체크포인트를 가진 criteria 찾기