{"running":null,"status":"tracked","retry":null,"issue_id":"5ad4e135-ac6f-47d8-851a-c167c33c1bfa","workspace":{"path":"/Users/julian/.codex/worktrees/symphony/TEC-30","host":null},"attempts":{"current_retry_attempt":0,"restart_count":0},"issue_identifier":"TEC-30","last_error":null,"logs":{"codex_session_logs":[]},"recent_events":[],"tracked":{"priority":"Low","state":"Ready for Verify","title":"발주서 임시저장 시 기존 항목 덮어쓰기 지원","url":"https://linear.app/tonextchapter/issue/TEC-30/발주서-임시저장-시-기존-항목-덮어쓰기-지원","updated_at":"2026-04-09 02:12 UTC","detail":{"ready_for_verify":"없음","agent_analysis":"없음","decision_needed":"없음","human_notes":"없음","human_review_entry":null,"ready_for_verify_test_urls":[],"release":"없음","review_updates":"없음","rework_request":"없음","slack_request":"발주서를 임시 저장할 때 기존 저장 항목을 덮어쓸 수 있는 기능이 필요합니다. 저장 목록이 많아져서 기존 항목을 선택해 덮어쓰기할 수 있으면 좋겠다는 요청입니다.\n\n![image.png](https://uploads.linear.app/7c52ab50-7609-4512-9c46-3c8e24ee8e67/b6d18970-a74a-4ca8-afa1-6b666f77bef6/82703fa9-4cf5-46a9-bcb0-8cefcc08ae36)\n\n# Agent Analysis\n\n## 요청 요약\n\n* 발주서 생성 모달의 임시저장 기능에서 새 이름 저장만 가능해서 저장본이 계속 쌓이고 있습니다.\n* 기존 저장본을 선택해서 같은 슬롯을 덮어쓸 수 있게 바꾸면 됩니다.\n\n## 기대 동작\n\n* `/po-dashboard-products` 발주서 생성 모달에서 기존 임시저장 항목을 선택하면 그 항목 기준으로 덮어쓰기 저장을 할 수 있어야 합니다.\n* 새로 저장할 때는 지금처럼 신규 항목으로 저장되면 됩니다.\n* 덮어쓰기 후 목록, 선택값, 이후 불러오기 동작은 최신 상태로 자연스럽게 이어져야 합니다.\n\n## 관련 화면/경로\n\n* 화면: `/po-dashboard-products` 발주서 생성 모달\n* 프론트: `web/src/app/(pages)/(nextcentury)/(century)/po-dashboard-products/component/modal/PoDashboardCreatePoModal.tsx`\n* API: `web/src/app/api/nextcentury/screens/century/po-dashboard/commands/route.ts`\n* 스키마: `web/src/lib/schema/nextcentury/century/po-dashboard.schema.ts`\n* 서비스/리포: `web/src/server/services/nextcentury/century/century-po-dashboard.service.ts`, `web/src/server/services/nextcentury/century/century-po-dashboard.repo.server.ts`\n\n## 재현 방법 또는 근거\n\n* 현재 프론트 저장 버튼은 선택된 임시저장과 무관하게 `insertStagedPoData`만 호출합니다.\n* 프론트에서 같은 이름이면 막고, 백엔드도 `tblStagedPOData`에서 같은 이름이 있으면 저장을 거절합니다.\n* 그래서 기존 저장본을 선택해도 덮어쓰기 경로가 아예 없습니다.\n* Retool 원본도 `INSERT` 기반이라 기존 이름 덮어쓰기까지는 지원하지 않았습니다.\n\n## 완료 조건\n\n* 선택된 임시저장 항목을 기준으로 덮어쓰기 저장이 가능해야 합니다.\n* 덮어쓰기 시 확인 문구와 성공 메시지가 신규 저장과 구분돼야 합니다.\n* 백엔드는 임시저장 row update 경로를 지원하고, 자기 자신 제외 이름 중복 검사를 해야 합니다.\n* 기존 신규 저장, 목록 조회, 불러오기 흐름은 그대로 유지돼야 합니다.\n\n## 애매한 지점\n\n* 같은 이름을 새로 입력했을 때 자동으로 덮어쓸지, 아니면 사용자가 기존 항목을 명시적으로 선택했을 때만 덮어쓸지 판단 포인트가 있었어요. 이번 요청 문구가 \"기존 항목을 선택해 덮어쓰기\"에 가깝고, 실수로 저장본을 날리면 바로 운영 불편으로 이어질 수 있어서 선택된 항목 기준으로만 덮어쓰는 게 더 안전하다고 봤어요. 그래서 이번 수정은 `선택된 임시저장 + 저장 버튼`일 때만 overwrite 모드로 처리하는 걸로 충분하다고 판단했어요. 나중에 같은 이름 입력만으로도 덮어쓰기하고 싶어지면, 그때는 별도 UX 합의 후 완화하면 됩니다.\n\n# Decision Needed\n\n없음\n\n# Rework 요청\n\n없음\n\n# 리뷰에서 반영한 것\n\n## 2026-04-09\n\n* 신규 저장 직후 저장본이 자동 선택돼서 다음 저장이 바로 덮어쓰기로 바뀌는 함정이 있었는데, 신규 저장 후에는 선택값을 비워서 의도치 않은 overwrite를 막아뒀어요.\n* 기존 저장본 이름을 바꿔서 덮어쓸 때 확인 문구가 헷갈릴 수 있어서, 기존 이름이랑 새 이름이 같이 보이게 정리했어요.\n\n# Ready for Verify\n\n## 2026-04-09\n\n* self-review result summary: 현재 diff랑 temp save 저장/불러오기 주변 코드 같이 봤는데 이번 변경 범위에서 크게 걸리는 건 없었어요.\n* test urls: `/po-dashboard-products`\n* verify focus: 발주서 생성 모달에서 기존 임시저장 하나를 선택하고 `덮어쓰기 저장`을 누르면 overwrite 확인 문구가 뜨고, 저장 후 다시 불러오면 최신 내용이 보여야 해요.\n* verify focus: 기존 임시저장을 선택한 뒤 이름을 바꿔 저장하면 확인 문구에 기존 이름과 새 이름이 같이 보이고, 목록 이름도 새 값으로 바뀌어야 해요.\n* verify focus: 새 이름으로 `임시저장`하면 저장 후 선택값이 비워져서 다음 저장이 자동 덮어쓰기로 바뀌지 않아야 해요.\n\n# 검증 히스토리\n\n## 2026-04-09 11:11\n\n* 리뷰에서 반영한 것: 신규 저장 뒤 자동 overwrite로 넘어가던 흐름을 끊었어요.\n* 리뷰에서 반영한 것: overwrite rename 확인 문구에 기존 이름과 새 이름을 같이 보여주게 했어요.\n* Ready for Verify: 현재 diff랑 temp save 저장/불러오기 주변 코드 같이 봤는데 이번 범위에서 크게 걸리는 건 없었어요.\n* 검증: `pnpm exec biome lint \"src/app/(pages)/(nextcentury)/(century)/po-dashboard-products/component/modal/PoDashboardCreatePoModal.tsx\" \"src/app/api/nextcentury/screens/century/po-dashboard/commands/route.ts\" \"src/lib/schema/nextcentury/century/po-dashboard.schema.ts\" \"src/server/services/nextcentury/century/century-po-dashboard.repo.server.ts\" \"src/server/services/nextcentury/century/century-po-dashboard.service.ts\"` 통과.\n* 검증: `pnpm typecheck` 통과.\n* 검증: `git diff --check` 통과.\n* 검증 메모: 로컬 `http://localhost:3000` 서버가 떠 있지 않아서 브라우저 확인은 이번 턴에 못 했어요.","verify_history":"없음"}}}