'use server' import db from '@/db/db' import { projects } from '@/db/schema' import { eq, and, inArray } from 'drizzle-orm' /** * 프로젝트 ID로 프로젝트 코드 조회 */ export async function getProjectCodeById(projectId: number): Promise { try { const result = await db .select({ code: projects.code }) .from(projects) .where(eq(projects.id, projectId)) .limit(1) return result[0]?.code || null } catch (error) { console.error('Failed to get project code by id:', error) return null } } /** * 프로젝트 코드와 이름으로 프로젝트 ID 조회 */ export async function getProjectIdByCodeAndName( projectCode: string, projectName: string ): Promise { try { if (!projectCode || !projectName) { return null } const result = await db .select({ id: projects.id }) .from(projects) .where( and( eq(projects.code, projectCode.trim()), eq(projects.name, projectName.trim()) ) ) .limit(1) return result[0]?.id || null } catch (error) { console.error('Failed to get project id by code and name:', error) return null } } /** * 여러 프로젝트 ID로 프로젝트 코드 맵 조회 (성능 최적화) */ export async function getProjectCodesByIds( projectIds: number[] ): Promise> { try { if (projectIds.length === 0) { return new Map() } const uniqueIds = [...new Set(projectIds.filter(id => id != null))] if (uniqueIds.length === 0) { return new Map() } const result = await db .select({ id: projects.id, code: projects.code }) .from(projects) .where(inArray(projects.id, uniqueIds)) const map = new Map() result.forEach((project) => { map.set(project.id, project.code) }) return map } catch (error) { console.error('Failed to get project codes by ids:', error) return new Map() } }