- components/common/BaseModal.vue 신설: backdrop+헤더(제목/닫기)+본문/푸터 슬롯,
Teleport·ESC·바깥클릭 닫기 내장. 전역 .modal* 와 충돌 없게 bm- 접두 클래스 사용
- relay.css 에 .form-field/-label/-row/-input/-textarea/-select(+wrap/chev) 표준 추가
- 일정·카테고리 모달을 BaseModal + .form-* 로 전환(중복 모달/필드 CSS 제거,
푸터 버튼은 전역 .mbtn 사용)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 툴바 '오늘' 버튼 제거, 컨트롤 간격을 전역 .toolbar(0.625rem)와 통일
- 타임라인 레인 hover 편집/삭제 버튼 제거(카테고리 관리는 유형 필터에서)
- 유형 필터 버튼을 기존 DropdownSelect pill 디자인으로 통일 + 수량 뱃지 제거
- '새 일정' 버튼의 스코프 .btn 재정의 제거 → 전역 .btn primary 표준 사용
- 일정/카테고리 모달을 사이트 폼 모달 규격(rem + 멤버 초대 모달)으로 재정렬,
라벨 좌측정렬, 취소/저장 버튼을 전역 .mbtn 으로 통일
- 참석자 아바타를 공용 UserAvatar 방식(이미지/실루엣)으로 교체,
'전 직원' 표식 크기를 아바타와 동일(20px)하게 고정(루트 14px rem 보정)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
상단 nav 독립 메뉴 '일정' — 주간 타임라인(간트형) 캘린더.
카테고리=레인, 일정=막대(다중일 지원), 우측 상세 패널, 일정/카테고리 CRUD.
백엔드(Schedule 모듈):
- ScheduleCategory/ScheduleEvent 엔티티 + 참석자(다대다) + 작성자
- 카테고리/일정 CRUD, 기간 겹침 조회, 참석자 풀(전사 사용자)
- 기본 카테고리 12종 onModuleInit 멱등 시드
- 인증 사용자 누구나 관리(전역 일정, 글로벌 관리자 개념 없음)
- 운영 마이그레이션(AddSchedule) 추가, @nestjs/schedule 임포트는 CronModule 로 alias
프론트:
- /schedule 라우트 + 사이드바 nav 항목
- 주간 네비(이전/다음/오늘), 유형 필터·카테고리 관리 드롭다운
- 타임라인/상세 패널/일정 모달/카테고리 모달(hue 슬라이더)/참석자 멀티셀렉트
- schedule.store + useSchedule + scheduleDate 유틸
런타임 검증: dev 부팅·시드(12건)·라우트 매핑 정상, 인증 게이트(401),
일정 생성/조회/수정/삭제 + 참석자/전직원/다중일 스모크 전부 정상.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
활발한 프로젝트/업무에서 활동이 한 번에 전부 내려와 렌더링되던 문제 보완.
- 업무 상세 활동 탭: 최신 100건으로 조회 상한 추가(기존 무제한)
- 프로젝트 활동 피드: 200건 통째 조회 → 오프셋 페이지네이션 전환
- 컨트롤러 page/size 쿼리 지원, 서비스 findAndCount
- 프론트 스토어 누적 + hasMore/loadMore, 활동 페이지 "더 보기" 버튼
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
보고 제출 시 알림만 보내고 활동(activity)에는 적재되지 않아
프로젝트 활동 피드·업무 활동 탭에 표시되지 않던 누락을 보완.
- ActivityType/ApiActivityType 에 task.checkpoint_reported 추가
- submitCheckpointReport 에서 activity.record 호출
- 프론트 활동 렌더링 케이스(프로젝트 피드/업무 탭) 추가
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
보고 완료 상태에서 배지 클릭으로만 열리던 것을 명확히 — 배지 오른쪽에 보고서 아이콘 버튼 추가, 아이콘 클릭 시 보고 모달 오픈(열람 권한자만). 배지는 상태 표시 전용으로 변경.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
시안(진행 상태 보고서/받은 진행 보고) 기준으로 두 모달 전면 개편:
- 전체 탭 + 카테고리 탭(색상 dot·건수), 전체 탭에서 카테고리별 그룹 헤더로 묶음
- 작성(작업자): 항목별 상태색 드롭다운(StatusSelect, body Teleport), 보고 메모, 하단 상태 요약(대기/진행/완료 N)
- 열람(지시자·담당자): '진행 보고 도착' 태그 + 보고자 아바타/이름/점검일·시각, 읽기전용 상태 배지, 보고자 메모 박스
- 신규 StatusSelect 컴포넌트 추가, 기존 cp-modal/ws-* 스타일 정리, 미사용 DropdownSelect import 제거
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 상세 우측 상단 액션(수정 버튼 + 더보기 메뉴) 전체를 isIssuer 일 때만 노출
- 더보기 메뉴에서 업무 복제·링크 복사 제거, 업무 삭제만 유지
- 편집 화면(/edit) 진입을 지시자 본인만 허용(그 외 상세로 리다이렉트). 생성 모드는 기존대로 관리자만
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
보고서 작성 모달의 취소/보내기 버튼을 커스텀 소형 버튼 → 전역 .btn / .btn primary(height 2.25rem)로 교체해 다른 화면과 크기 통일.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
DropdownSelect 메뉴를 absolute → body Teleport + fixed 위치 계산으로 변경.
스크롤/overflow 컨테이너(보고 모달 등) 안에서도 메뉴가 잘리지 않음(스크롤·리사이즈 시 닫힘).
보고 열람/작성 모달 max-height 를 calc(100vh - 3rem) 로 확대.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
인라인 보고서 폼 제거 → '보고서 작성' 클릭 시 모달로 띄움.
모달 내 항목은 필수/관리/보안/부가 탭으로 구분해 항목별 상태를 선택하고 메모와 함께 전송.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
보고 '내용' 열람을 지시자 + 해당 업무 담당자로 제한:
- 백엔드 buildDetail: viewerId 기준으로 권한 없으면 checkpointReports 를 빈 배열로 응답(findOne 에 현재 사용자 전달). 점검일에는 reported 플래그를 두어 상태는 전원 공유
- 프론트: checkpointState 는 reported 플래그 기준, '보고 완료' 클릭(모달)은 지시자·담당자만. 그 외는 비클릭 상태 배지
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
하단 토글 목록 제거 → 상단 '보고 완료' 체크포인트 클릭 시 모달로 보고 내용 표시.
모달은 업무 생성의 카테고리 탭(필수/관리/보안/부가) 방식으로 항목을 구분해 보여준다.
보고 스냅샷에 category 추가(백엔드 엔티티/서비스 + 프론트 타입/뷰/스토어).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
- 해야 할 일 항목의 진행상태 배지 제거(진행상태는 중간 점검 보고/기록에서만 확인)
- 중간 점검 점검일 목록 간격 확대, 상태 배지·보고서 작성 버튼 크기 소폭 확대
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
진행 상태(미착수/진행중/완료)를 상시 토글 대신 '보고서'로 전환:
- 보고는 점검일 당일(KST)에만 가능, 지나면 누락 — 마감 전 상시 전송 제거
- 작업자가 점검일 당일 보고서 폼에서 항목별 상태 + 메모를 작성해 전송(상태는 보고에 포함)
- 지시자는 상세 화면에서 보고 기록을 접힌 목록으로 보고 클릭해 펼쳐 열람
- 체크리스트 항목은 마지막 보고 상태를 읽기 전용 배지로 표시(인라인 편집 제거)
- 상시 진행상태 갱신 엔드포인트/DTO 제거(work-status)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
작성/수정 화면: 중간 점검일 여러 개 입력(추가/삭제, 편집 모드 로드).
상세 화면: 체크리스트 항목별 작업자 진행상태(미착수/진행중/완료) 토글(담당자) + 비담당자 배지,
중간 점검 카드(점검일 목록, 점검일~마감 구간 '보고 보내기', 보고 메모, 보고 이력 스냅샷).
타입/컴포저블/스토어/뷰모델 + 알림(task.checkpoint_reported) 렌더 연동.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
비관리자가 URL 로 직접 진입해도 폼이 열리던 문제 수정 — 프로젝트 로드 후 canManage 가 아니면
경고 후 프로젝트 상세로 리다이렉트. 생성·수정 모두 백엔드 admin 전용과 일치시킨다.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
프로젝트 상세 업무 목록의 '새 업무' 버튼을 repo.canManage(관리자) 일 때만 표시.
업무 생성은 백엔드에서 이미 admin 전용이므로 UI 노출을 권한과 일치시킨다.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
새 탭으로 뜨는 인증 완료 화면을 간결하게 정리 — 상단 Relay 브랜드 표기와
'이 창에서 로그인하기' 버튼을 제거하고, 미사용이 된 RelayMark import·관련 CSS 정리.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
로그인 호출에 silent 옵션을 추가해 전역 에러 토스트를 끄고, 로그인 화면에서 에러를 직접 처리.
미인증(403)은 토스트 없이 인증 메일 발송 후 발송 완료 화면으로 이동하고, 그 외 자격 오류만 다이얼로그로 안내.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
로그인 화면 상단 인라인 재발송 배너를 제거하고, 미인증(403) 로그인 시도 시
인증 메일을 즉시 발송한 뒤 /signup?sent=<이메일> 의 '발송 완료' 화면으로 이동하도록 변경.
SignupPage 는 sent 쿼리로 진입하면 곧바로 발송 완료 단계를 표시한다.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
인증 미완료 상태에서 재가입/로그인이 모두 막혀 데드락되던 문제 해결.
- signup: 인증 완료 계정만 409로 거부하고, 미인증 로컬 계정은 입력값으로 갱신 후 인증 메일 재발송(중복 계정 생성 안 함)
- 로그인 화면: 미인증(403) 응답 시 '인증 메일 다시 보내기' 인라인 액션 노출
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
SMTP 미구현 상태에서 운영 환경의 isProd 분기가 인증/재설정 링크를 가려 사실상 인증 불가였던 제한 해제.
개발·운영 공통으로 전체 링크를 로그로 남긴다. 실 메일러 도입 시 토큰 노출 방지를 위해 반드시 제거 필요(주석 경고 명시).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
사이드바·인증 화면 'R' 텍스트 로고를 브랜드 더블 셰브론 마크(RelayMark)로 교체.
favicon을 SVG+PNG+ICO 세트와 웹 매니페스트로 정비(create-vue 기본 아이콘 대체), 가운데 셰브론을 키워 작은 크기 가독성 개선.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
프로젝트 목록·업무 목록·내 업무에 정렬/검색/프로젝트 필터를 백엔드 쿼리 파라미터로 추가(페이지네이션과 일관). 활동 멤버 필터는 전량 로드 피드 기준 클라이언트 처리.
모든 정렬/필터 및 멤버 초대 역할 선택을 네이티브 select → 공통 DropdownSelect 컴포넌트로 통일.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
업무 작성 화면의 .page max-width(77.5rem) override 제거 → 전역 기본값 67.5rem 상속.
프로젝트 목록·내 업무·상세 등 다른 화면과 동일한 너비로 정렬.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
상세 화면에서 첨부 업로드·삭제 UI/로직을 제거하고 목록 표시만 유지.
업로드는 작성·편집 화면에서만 가능하도록 일원화(미사용 스토어 액션·CSS 정리).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
이미 스키마가 존재하는 DB(과거 synchronize 로 생성·데이터 보존)에 배포해도
부팅이 실패하지 않도록, up() 진입 시 핵심 테이블(users) 존재를 확인해 DDL 을
건너뛰고 마이그레이션을 '적용됨'으로만 기록한다(데이터/스키마 보존). 빈 DB 는
기존대로 전체 스키마를 생성한다.
검증: 빈 DB 전체 생성 / 스키마 존재 DB(이력 없음) 건너뛰고 기록·데이터 보존 /
재실행 멱등(No migrations pending) 모두 확인.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
동작 방식(dev synchronize / 운영 migrationsRun 자동), 스크립트(generate/create/
run/revert), 새 마이그레이션 생성 절차(임시 DB diff), 기존 운영 DB 베이스라인 SQL 정리.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
운영(synchronize 비활성, migrationsRun 활성)에서 스키마를 구성할 마이그레이션이
전무해 신규 운영 DB 배포 시 테이블이 생성되지 않던 문제를 해결한다.
- data-source.ts(CLI 전용 DataSource) + package.json 마이그레이션 스크립트
(typeorm/migration:generate/create/run/revert) 추가
- 초기 마이그레이션(CreateInitialSchema) 생성 — 전체 스키마(users·projects·
project_members·tasks·task_assignees·checklist_items·comments·attachments·
activities·notifications·refresh_sessions·ai_conversations·ai_messages,
인덱스·FK 포함), uuid-ossp 확장 생성 보장
- 임시 빈 DB에 up/down 적용 검증, 현재 dev 스키마와 드리프트 없음(No changes) 확인
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>