- Move workspace_id after required fields in both dataclass and create()
- Fix indentation in create() method body
- Add missing timezone import in generation_task.py
- Add voice extraction and deduplication functionality
- Add dedup.py for video deduplication
- Add voice_extraction.py task for worker
- Resolve CI/CD and deploy workflow conflicts with develop version
- Keep new voice dedup features from feature branch
- Resolve CI/CD and deploy workflow conflicts with develop version
- Resolve database and dependencies conflicts with develop version
- Keep new edit plan generator and API functionality from feature branch
BREAKING CHANGES:
- Removed Workspace, WorkspaceMember, WorkspaceInvitation entities
- Project now has owner_user_id instead of workspace_id
- Added shared_users list to Project for collaboration
- Subscription/quota moved from Workspace to User level
Changes:
- packages/domain/entities.py: Removed Workspace entities, updated Project
- packages/adapters/sqlalchemy_impl/models.py: Updated models
- packages/application/: Removed workspace use cases, updated other use cases
- packages/ports/: Removed workspace repository interfaces
- apps/api/: Updated routes, schemas, dependencies, router
- alembic/versions/007_remove_workspace_concept.py: Database migration
New APIs:
- POST /projects/{id}/share: Share project with user
- DELETE /projects/{id}/share/{user_id}: Unshare project
- P1-1: CORS configuration security - use DEBUG mode to differentiate
production vs development CORS settings
- P1-2: Implement token refresh logic in RefreshTokenUseCase
- Add get_session_by_refresh_token to SessionStore
- Verify session validity and expiry
- Generate new access token on refresh
- P1-3: Fix database connection leak in worker ingest task
- Add proper try-except-finally block
- Ensure db.close() is always called
- P1-4: Implement real media metadata extraction
- Use ffprobe for video metadata
- Use Pillow for image metadata
- Return empty dict on failure (no mock data)