summaryrefslogtreecommitdiff
path: root/lib/approval-log
diff options
context:
space:
mode:
authorjoonhoekim <26rote@gmail.com>2025-11-05 16:46:43 +0900
committerjoonhoekim <26rote@gmail.com>2025-11-05 16:46:43 +0900
commita2c78d3a00c569a37ab93f65b58a11ba3519b596 (patch)
tree1909ff3d52bb6f17a5b376d332255291cc71ecf5 /lib/approval-log
parent208ed7ff11d0f822d3d243c5833d31973904349e (diff)
(김준회) 실사의뢰/실사재의뢰 누락된 userId 추가해서 pendingActions에 추가하도록 변경
Diffstat (limited to 'lib/approval-log')
-rw-r--r--lib/approval-log/service.ts59
-rw-r--r--lib/approval-log/table/approval-log-table-column.tsx10
2 files changed, 68 insertions, 1 deletions
diff --git a/lib/approval-log/service.ts b/lib/approval-log/service.ts
index 4d1ad7f8..5690e0f9 100644
--- a/lib/approval-log/service.ts
+++ b/lib/approval-log/service.ts
@@ -13,6 +13,7 @@ import {
import db from '@/db/db';
import { approvalLogs } from '@/db/schema/knox/approvals';
+import { pendingActions } from '@/db/schema/knox/pending-actions';
import { filterColumns } from '@/lib/filter-columns';
// ---------------------------------------------
@@ -198,3 +199,61 @@ export async function getApprovalLogListAction(input: ListInput) {
};
}
}
+
+// ----------------------------------------------------
+// Get approval log detail with pending action
+// ----------------------------------------------------
+export type PendingAction = typeof pendingActions.$inferSelect;
+
+export interface ApprovalLogDetail {
+ approvalLog: ApprovalLog;
+ pendingAction: PendingAction | null;
+}
+
+export async function getApprovalLogDetail(apInfId: string): Promise<ApprovalLogDetail | null> {
+ try {
+ // approvalLog 조회
+ const approvalLog = await getApprovalLog(apInfId);
+ if (!approvalLog) {
+ return null;
+ }
+
+ // pendingAction 조회
+ const [pendingAction] = await db
+ .select()
+ .from(pendingActions)
+ .where(eq(pendingActions.apInfId, apInfId))
+ .limit(1);
+
+ return {
+ approvalLog,
+ pendingAction: pendingAction || null,
+ };
+ } catch (error) {
+ console.error('Error fetching approval log detail:', error);
+ return null;
+ }
+}
+
+// ----------------------------------------------------
+// Server Action for getting approval log detail
+// ----------------------------------------------------
+export async function getApprovalLogDetailAction(apInfId: string) {
+ try {
+ const data = await getApprovalLogDetail(apInfId);
+ if (!data) {
+ return {
+ success: false,
+ error: '결재 로그를 찾을 수 없습니다.',
+ data: null,
+ };
+ }
+ return { success: true, data };
+ } catch (error) {
+ return {
+ success: false,
+ error: error instanceof Error ? error.message : '결재 로그 상세 조회에 실패했습니다.',
+ data: null,
+ };
+ }
+}
diff --git a/lib/approval-log/table/approval-log-table-column.tsx b/lib/approval-log/table/approval-log-table-column.tsx
index a77ed0d3..747ce5ce 100644
--- a/lib/approval-log/table/approval-log-table-column.tsx
+++ b/lib/approval-log/table/approval-log-table-column.tsx
@@ -15,6 +15,7 @@ import {
DropdownMenuItem,
DropdownMenuTrigger,
} from "@/components/ui/dropdown-menu"
+import { useParams, useRouter } from "next/navigation"
interface GetColumnsProps {
setRowAction: React.Dispatch<React.SetStateAction<{
@@ -24,6 +25,12 @@ interface GetColumnsProps {
}
export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef<ApprovalLog>[] {
+ // eslint-disable-next-line react-hooks/rules-of-hooks
+ const router = useRouter();
+ // eslint-disable-next-line react-hooks/rules-of-hooks
+ const params = useParams();
+ const lng = params.lng as string;
+
return [
{
id: "select",
@@ -248,6 +255,7 @@ export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef<Approva
{
id: "actions",
cell: ({ row }) => {
+ const apInfId = row.original.apInfId;
return (
<DropdownMenu>
<DropdownMenuTrigger asChild>
@@ -262,7 +270,7 @@ export function getColumns({ setRowAction }: GetColumnsProps): ColumnDef<Approva
<DropdownMenuContent align="end" className="w-40">
<DropdownMenuItem
onClick={() => {
- setRowAction({ type: "view", row });
+ router.push(`/${lng}/evcp/approval/log/${apInfId}`);
}}
>
<Eye className="mr-2 size-4" aria-hidden="true" />