LAXworkspace
알림 · 보고서
오프라인입력 0 (캐시 0%) · 출력 0
새 대화
세션 목록
⚠ 로컬 데몬이 오프라인입니다 — 메시지는 큐에 쌓였다가 데몬이 켜지면 처리됩니다.
구교환의 요청: [코드 검토 요청 — LAX-site] Jason 지시로 "일정 관리"를 대시보드 캘린더 하나로 통합했습니다. 보검님이 한번 검토해 주세요. 작업 폴더는 C:/Users/user/LAX-site 입니다. ## 배경/의도 - 기존: 별도 `/schedule` 페이지("일정" 네비)가 `deadlines` 테이블(사건 기일·기한)을 보여주고, 대시보드(`/`) 캘린더 위젯은 calendar_events+예약보고(agent_schedules)+계획마감(plan_tasks)만 보여줘 **사건 기일이 대시보드엔 안 보였음**. - 변경: 사건 기일(deadlines)을 대시보드 캘린더에 4번째 소스로 추가하고, 별도 `/schedule` 페이지·네비는 제거(`/`로 301 리다이렉트). → 일정 관리가 대시보드 캘린더에서만 이뤄지게. ## 변경 파일 5개 (검토 포인트) 1. `src/shared/calendar.ts` — CalEvent 타입에 source 'deadline' + matter_id 추가. `listEventsInRange()` 끝에 deadlines 쿼리 추가(deadlines d JOIN matters m JOIN clients c, WHERE m.deleted_at IS NULL AND d.due_date BETWEEN startDate AND endDate). 색상 미완료 #ef4444 / 완료 #64748b, title `⚖️ {title||kind}`, matter_id=m.id. 2. `src/app/calendar/widget.tsx` — eventColor에 deadline 분기, chipData에 data-matter-id, LEGEND에 '사건 기일'(#ef4444), 모달 라벨/액션에 deadline→"사건 보기"(/matters/{mid}) 링크. 3. `src/app/shell.tsx` — '일정'(/schedule) 네비 항목 제거. 4. `src/app/index.tsx` — scheduleRoutes import·`app.route('/schedule',...)` 제거, 대신 `app.get('/schedule', c=>c.redirect('/',301))` 추가. 5. `src/app/schedule/routes.tsx` — 이제 import 안 됨(미사용 파일로 남음). ## 봐줄 점 - 정합성/버그(특히 deadlines 쿼리·날짜 범위·done 처리), 위젯 모달 사건 링크 동작, 라우트 리다이렉트 충돌 여부, 빌드 깨질 만한 타입 문제(matter_id optional), 미사용 schedule/routes.tsx를 지울지 리다이렉트로 둘지 의견. 발견사항을 [심각도/파일:위치/문제/제안] 형식으로 짧게 정리해 주세요. 아직 빌드·배포 전입니다.

검토 완료했습니다. 타입체크(tsc --noEmit) 통과, 스키마·쿼리 정합성 확인했습니다. 결론부터.

결론

빌드·기능상 치명 결함 없음. 배포 가능 수준. 다만 연체 기일 가시성 상실(기능 후퇴) 1건은 손보고 내보내는 걸 권합니다.

발견사항

[중/calendar.ts:135 (deadlines 색상)] 연체(overdue) 기일이 미래 기일과 같은 빨강

  • 기존 /schedulepast(연체)·soon(≤14일)·normal·done 4단계로 구분했는데, 통합 후 미완료는 전부 #ef4444 단색. 법률 기한 추적에서 "지난 기일"이 안 보이는 건 실무상 손실(소멸시효·제출기한 연체가 일반 기일과 구분 안 됨).
  • 제안: 미완료 중 due_date < todayKST()면 진한 빨강(예 #b91c1c)으로, 또는 description(연체)/(D-n) 부기. 한 줄 분기로 해결.

[중/index.tsx:62 (301 리다이렉트)] 영구 캐시 → 가역성 저하

  • 301은 브라우저·CDN이 영구 캐싱. 추후 /schedule 부활 시 캐시된 301이 사용자 단에서 안 풀림. 비가역적 결정 성격.
  • 트레이드오프: 옆 줄들(/draft,/org 등)도 301이라 일관성은 있음. 폐지를 확정으로 보면 301 유지, 실험적 통합이면 302가 안전. → 이건 Jason 판단 사안에 가까움(아래).
  • 부수: 리다이렉트가 쿼리스트링(?view=week&type=)을 버림 — 북마크 호환 목적상 허용 가능.

[하/schedule/routes.tsx (미사용 파일)] dead code로 잔존

  • 이번 변경이 만든 orphan이고, 파일 내부가 /schedule 경로 전제라 남기면 혼란. tsc는 미사용 파일을 경고하지 않아 빌드는 안 깨짐. → 삭제 권장(북마크는 리다이렉트가 처리). 되돌릴 일 대비해 남기려면 파일 상단에 "미사용 — index.tsx에서 라우트 제거됨" 주석이라도.

[무이슈 — 확인 완료]

  • 스키마 일치: deadlines(kind,title,due_date,done,matter_id) + matters.deleted_at/client_id + clients.name 모두 존재. due_dateYYYY-MM-DD TEXT라 BETWEEN 사전식 비교 정상.
  • matter_id?: optional 타입 — 다른 소스(plan/schedule/manual) 미설정해도 안전, .all<CalEvent>() 빌드 영향 없음.
  • id 충돌(deadline.id vs calendar_events.id 동일 숫자 가능)은 삭제·드래그가 source==='manual' 가드라 무해. 모달 "사건 보기"는 matter_id로 분기 — 정상.
  • 라우트 충돌 없음(/schedule 단일 등록, /calendar와 무관). 범례 필터(hide)·모바일 월뷰 칩·data-matter-id 전달 정상.

Jason 결정 필요 (1건)

  • /schedule 폐지가 확정인지 실험인지에 따라 리다이렉트 코드(301 영구 vs 302 가역) + 파일 삭제 여부가 갈림. 확정이면 301 유지 + 파일 삭제, 실험이면 302 + 파일 보존.

다음 액션

  1. [변우석/배포 전] 연체 기일 색 분기 1줄 추가 — 법률 기한 가시성 회복 (calendar.ts:135).
  2. [Jason/이번 주] /schedule 폐지 = 확정 or 실험? → 301/302·파일삭제 확정.
  3. [변우석/2번 회신 후] 결정대로 schedule/routes.tsx 정리하고 빌드·배포, 반영 URL 회신.