Summary
프로젝트 생성/저장 시 사용자가 임의의 폴더(시스템 디렉터리, 드라이브 루트, 정션 등)를 그대로 지정할 수 있는 문제를 정비합니다. 기본 저장 위치를 제공하고 저장 시점의 폴더 안전성 검사를 추가하며, Qt 애플리케이션 메타데이터를 명시해 최근 목록 인덱스의 위치를 안정화합니다. 관련 정책은 docs에도 명문화합니다.
Parent Issue
#2
Area
Application
Target Sprint
Sprint 1
Scope
src/application/main.cpp에서 QCoreApplication::setOrganizationName / setApplicationName을 명시 설정해 QStandardPaths::AppDataLocation이 안정적인 경로를 가리키도록 합니다.
NewProjectWidget의 폴더 Browse 다이얼로그가 기본적으로 <Documents>/SafeCrowd Projects/ 아래에서 열리도록 하고, 프로젝트 이름이 입력된 상태에서는 해당 이름의 하위 폴더를 후보로 제안합니다.
ProjectPersistence::saveProject에 저장 전 폴더 안전성 검사를 추가합니다.
- 드라이브/볼륨 루트 거부 (
QDir::isRoot + QStorageInfo)
- 심볼릭 링크 / Windows 정션 거부
- 비어 있지 않으면서 SafeCrowd 프로젝트가 아닌 폴더 거부 (관리되는 파일 4종 외의 항목이 있을 때)
- 삭제 흐름과 공유 가능한 안전성 헬퍼로 정리해 중복을 제거합니다.
docs/UI.md에 저장 위치 정책(기본 위치, 폴더 요구사항, 최근 목록 인덱스 경로)을 추가합니다.
Acceptance Criteria
- 새 프로젝트 생성 화면의 Browse 버튼을 누르면
<Documents>/SafeCrowd Projects/ 위치가 시작점으로 표시됩니다(필요 시 자동 생성).
- 프로젝트 이름이 입력된 상태에서 Browse 후 새 폴더로 진입하지 않으면, 저장 시 자동으로 프로젝트 이름의 하위 폴더가 사용되거나 사용자에게 안내됩니다.
- 저장 시 다음 조건을 만족하지 않으면 명확한 메시지와 함께 거부됩니다.
- 드라이브/볼륨 루트가 아니어야 함
- 심볼릭 링크/정션이 아니어야 함
- 비어 있거나 기존 SafeCrowd 관리 파일만 있는 폴더여야 함
- 앱 실행 시
QStandardPaths::AppDataLocation이 SafeCrowd 조직/앱 이름을 따른 경로를 가리킵니다.
docs/UI.md에 저장 위치 정책 섹션이 존재합니다.
Architecture / Dependency Check
- 변경 범위는
src/application/과 docs/에 한정합니다.
domain / engine에 의존성을 추가하지 않습니다.
- include는
application/... 경로를 사용하며, Qt는 application 레이어 안에서만 사용합니다.
Verification Plan
cmake --preset windows-debug
cmake --build --preset build-debug
ctest --preset test-debug
- 수동 검증:
- 첫 실행 후 새 프로젝트 → Browse 시작 위치가
<Documents>/SafeCrowd Projects/인지 확인
- 프로젝트 이름 입력 후 저장 → 의도한 하위 폴더에 저장되고 최근 목록에 표시되는지 확인
- 드라이브 루트/정션/비관리 파일 포함 폴더에 저장 시도 → 거부 메시지 확인
%APPDATA%(Windows)에서 SafeCrowd/SafeCrowd/recent-projects.json이 생성되는지 확인
Dependencies / Blockers
Repository Checks
Summary
프로젝트 생성/저장 시 사용자가 임의의 폴더(시스템 디렉터리, 드라이브 루트, 정션 등)를 그대로 지정할 수 있는 문제를 정비합니다. 기본 저장 위치를 제공하고 저장 시점의 폴더 안전성 검사를 추가하며, Qt 애플리케이션 메타데이터를 명시해 최근 목록 인덱스의 위치를 안정화합니다. 관련 정책은 docs에도 명문화합니다.
Parent Issue
#2
Area
Application
Target Sprint
Sprint 1
Scope
src/application/main.cpp에서QCoreApplication::setOrganizationName/setApplicationName을 명시 설정해QStandardPaths::AppDataLocation이 안정적인 경로를 가리키도록 합니다.NewProjectWidget의 폴더 Browse 다이얼로그가 기본적으로<Documents>/SafeCrowd Projects/아래에서 열리도록 하고, 프로젝트 이름이 입력된 상태에서는 해당 이름의 하위 폴더를 후보로 제안합니다.ProjectPersistence::saveProject에 저장 전 폴더 안전성 검사를 추가합니다.QDir::isRoot+QStorageInfo)docs/UI.md에 저장 위치 정책(기본 위치, 폴더 요구사항, 최근 목록 인덱스 경로)을 추가합니다.Acceptance Criteria
<Documents>/SafeCrowd Projects/위치가 시작점으로 표시됩니다(필요 시 자동 생성).QStandardPaths::AppDataLocation이SafeCrowd조직/앱 이름을 따른 경로를 가리킵니다.docs/UI.md에 저장 위치 정책 섹션이 존재합니다.Architecture / Dependency Check
src/application/과docs/에 한정합니다.domain/engine에 의존성을 추가하지 않습니다.application/...경로를 사용하며, Qt는 application 레이어 안에서만 사용합니다.Verification Plan
cmake --preset windows-debugcmake --build --preset build-debugctest --preset test-debug<Documents>/SafeCrowd Projects/인지 확인%APPDATA%(Windows)에서SafeCrowd/SafeCrowd/recent-projects.json이 생성되는지 확인Dependencies / Blockers
Repository Checks