feat: share heaps and folders with other users, fix auth and vision pipeline
Sharing:
- New HeapShare and FolderShare models with read/write permissions
- Sharing API router (CRUD for heap and folder shares)
- Heap endpoints accept shared access (photo_ids, add/remove with write)
- Photo list drops user_id filter in shared context, adds owner_username
- Media serving (thumb/original/proxy) falls back to share check on 404
- ShareDialog component for managing shares from kebab menus
- HeapsPanel shows "Shared with me" section for shared heaps
- LeftSidebar shows "Shared with me" section for shared folders
- Owner badge on PhotoThumbnail for photos from other users
Auth:
- Access token default bumped to 1 year, refresh to 10 years
- Refresh token persisted in localStorage (survives page reload)
- Timer-based refresh replaced with 401 axios interceptor
Vision pipeline fixes:
- Bootstrap sets Redis ready key even on partial export failure
- Export functions run conditionally (only for actually missing models)
- _load_thumb handles multi-user path (/data/thumbs/{user_id}/{photo_id}/)
- can_access_photo_via_share uses single subquery instead of N+1 loop
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
21
frontend/src/hooks/useSharingQueries.ts
Normal file
21
frontend/src/hooks/useSharingQueries.ts
Normal file
@@ -0,0 +1,21 @@
|
||||
import { useQuery } from '@tanstack/react-query'
|
||||
import { sharing, type SharedHeap, type SharedFolder } from '../services/api'
|
||||
|
||||
export const SHARED_HEAPS_KEY = ['sharing', 'heaps'] as const
|
||||
export const SHARED_FOLDERS_KEY = ['sharing', 'folders'] as const
|
||||
|
||||
export function useSharedHeapsQuery() {
|
||||
return useQuery<SharedHeap[]>({
|
||||
queryKey: SHARED_HEAPS_KEY,
|
||||
queryFn: sharing.sharedHeaps,
|
||||
staleTime: 30_000,
|
||||
})
|
||||
}
|
||||
|
||||
export function useSharedFoldersQuery() {
|
||||
return useQuery<SharedFolder[]>({
|
||||
queryKey: SHARED_FOLDERS_KEY,
|
||||
queryFn: sharing.sharedFolders,
|
||||
staleTime: 30_000,
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user