Appearance
스토어 (Pinia) 개요
앱의 전역 상태는 Pinia 스토어로 관리됩니다. apps/web-ui/src/stores/ 아래에 정의되어 있습니다.
핵심 스토어
| 스토어 | 파일 | 역할 |
|---|---|---|
| auth | auth.ts | 로그인·로그아웃, 사용자 정보, 관리자 여부, 비밀번호 재설정, Supabase 세션 관리 |
| setup | setup.ts | 설치 마법사 진행 상태 (/setup), 백엔드 /setup/status 폴링 |
| settings | settings.ts | 전역 설정 (사이트명, 점검 모드 maintenanceMode, 커뮤니티 활성화 등) |
| roles | roles.ts | 역할별 관리자 메뉴 접근 제어 (canAccess(routeName, role)) |
| featureFlags | featureFlags.ts | 기능 플래그 |
| adminUI | adminUI.ts | 관리자 레이아웃 UI 상태 |
기능 빌더 / 페이지 콘텐츠
| 스토어 | 파일 | 역할 |
|---|---|---|
| featureBuilder | featureBuilder.ts | 빌더 카테고리, 그리드 레이아웃, slotProps, 홈 카드, 이벤트 규칙. 백엔드 사이트 설정 JSON에 저장 |
콘텐츠 / 운영
| 스토어 | 파일 | 역할 |
|---|---|---|
| notices | notices.ts | 공지사항 (목록, 팝업) — Supabase notices |
| banners | banners.ts | 배너 (점검, 이벤트) — Supabase banners |
| support | support.ts | 제보·문의 — Supabase support |
| changelog | changelog.ts | 변경 내역 — Supabase changelog |
| auditLog | auditLog.ts | 감사 로그 |
| i18nOverrides | i18nOverrides.ts | 다국어 오버라이드 (관리자 i18n에서 설정, ko/en) |
AI / 에이전트 / RAG / MCP
| 스토어 | 파일 | 역할 |
|---|---|---|
| agents | agents.ts | 에이전트 목록, 서버 실행 상태, 브리핑, SSE 스트림 |
| aiModelConfig | aiModelConfig.ts | LLM 모델 설정 (백엔드 /llm-models) |
| conversations | conversations.ts | 챗봇 대화 세션 |
| ragDocuments | ragDocuments.ts | RAG 문서 인덱싱·메타 |
| mcpServers | mcpServers.ts | MCP 서버 등록·연결 상태 |
| apiKeys | apiKeys.ts | OpenAI / Anthropic 등 외부 API 키 |
업무 기능
| 스토어 | 파일 | 역할 |
|---|---|---|
| tasks | tasks.ts | 태스크 관리 (/feature/tasks) — 보드/칸반, 백엔드 트리거 |
| projects | projects.ts | 프로젝트 메타 |
| documents | documents.ts | 문서 트리·콘텐츠 (/feature/docs, Tiptap + Yjs) |
| github | github.ts | GitHub 저장소·PR·이슈 연동 |
| gitea | gitea.ts | Gitea 저장소 연동 |
| notifications | notifications.ts | 알림 FAB·드로어 |
UX 헬퍼
| 스토어 | 파일 | 역할 |
|---|---|---|
| toast | toast.ts | 토스트 알림 (useToast 컴포저블과 연동) |
| loading | loading.ts | 전역 로딩 오버레이 |
| globalError | globalError.ts | 전역 에러 처리 |
auth 스토어 주요 기능
Supabase와 직접 연동하는 핵심 스토어입니다.
| 함수/상태 | 설명 |
|---|---|
user | 현재 로그인 사용자 (AuthUser 타입) |
isLoggedIn | 로그인 여부 |
isSupabaseReady | Supabase 환경변수 설정 여부 |
profileAvatarUrl | 아바타 URL (없으면 ui-avatars.com 기반 placeholder) |
sessionExpired | 세션 만료 여부 (만료 시 모달 표시) |
pendingPasswordRecovery | 비밀번호 재설정 링크로 진입한 경우 |
authReady | 초기 세션 복원 완료 Promise (라우터 가드가 await) |
initAuth() | 앱 시작 시 세션 복원 + onAuthStateChange 구독 |
restoreSession() | F5 새로고침 후 세션 복원 |
login(email, password) | Supabase signInWithPassword |
logout() | Presence 정리 후 Supabase signOut |
fetchRoleFromApp() | get_my_role RPC로 역할 조회 후 user에 반영 |
getAccessToken() | 현재 Supabase access_token 반환 (백엔드 호출 시 첨부) |
setNewPasswordAfterRecovery() | 비밀번호 재설정 완료 처리 |
featureBuilder 스토어 주요 기능
- 그리드 위젯 배열, 카테고리 메타,
getSlotProps/setSlotProps,getGridLayout/setGridLayout등 - 캔버스·설정 패널·실제 기능 페이지(
FeaturePageContent,DynamicFeaturePage)가 이 스토어를 구독 - 백엔드 사이트 설정 JSON으로 저장 (
lib/siteSettings.ts의saveSiteSettingJson()) — 스토리지 버전 v2 - 기본 카테고리:
chatbot,community,tasks,github,docs