Init Repo
This commit is contained in:
@@ -0,0 +1,338 @@
|
||||
# Project Settings Implementation Summary
|
||||
|
||||
## Overview
|
||||
Task 5.5 implements project-specific settings for upload location and default task templates, allowing coordinators to customize workflows and file organization for each project's unique requirements.
|
||||
|
||||
## Backend Implementation
|
||||
|
||||
### Database Schema
|
||||
The Project model already includes the necessary fields:
|
||||
- `upload_data_location` (String): Custom upload storage path for project files
|
||||
- `asset_task_templates` (JSON): Default tasks per asset category
|
||||
- `shot_task_templates` (JSON): Default tasks for shots
|
||||
- `enabled_asset_tasks` (JSON): Enabled/disabled asset tasks per category
|
||||
- `enabled_shot_tasks` (JSON): Enabled/disabled shot tasks
|
||||
|
||||
### API Endpoints
|
||||
|
||||
#### GET /projects/{project_id}/settings
|
||||
- **Description**: Retrieve project-specific settings
|
||||
- **Authorization**: Any project member
|
||||
- **Response**: ProjectSettings schema with all settings fields
|
||||
- **Default Values**: Returns default templates if not configured
|
||||
|
||||
#### PUT /projects/{project_id}/settings
|
||||
- **Description**: Update project-specific settings
|
||||
- **Authorization**: Coordinator or Admin only
|
||||
- **Request Body**: ProjectSettingsUpdate schema (all fields optional)
|
||||
- **Response**: Updated ProjectSettings
|
||||
- **Features**:
|
||||
- Partial updates supported
|
||||
- Validates asset categories and task templates
|
||||
- Persists changes to database
|
||||
|
||||
### Schemas (backend/schemas/project.py)
|
||||
|
||||
```python
|
||||
class ProjectSettings(BaseModel):
|
||||
"""Project-specific settings for upload location and task templates"""
|
||||
upload_data_location: Optional[str]
|
||||
asset_task_templates: Optional[Dict[str, List[str]]]
|
||||
shot_task_templates: Optional[List[str]]
|
||||
enabled_asset_tasks: Optional[Dict[str, List[str]]]
|
||||
enabled_shot_tasks: Optional[List[str]]
|
||||
|
||||
class ProjectSettingsUpdate(BaseModel):
|
||||
"""Update project settings (all fields optional)"""
|
||||
upload_data_location: Optional[str]
|
||||
asset_task_templates: Optional[Dict[str, List[str]]]
|
||||
shot_task_templates: Optional[List[str]]
|
||||
enabled_asset_tasks: Optional[Dict[str, List[str]]]
|
||||
enabled_shot_tasks: Optional[List[str]]
|
||||
```
|
||||
|
||||
### Default Values
|
||||
|
||||
```python
|
||||
DEFAULT_ASSET_TASKS = {
|
||||
"characters": ["modeling", "surfacing", "rigging"],
|
||||
"props": ["modeling", "surfacing"],
|
||||
"sets": ["modeling", "surfacing"],
|
||||
"vehicles": ["modeling", "surfacing", "rigging"]
|
||||
}
|
||||
|
||||
DEFAULT_SHOT_TASKS = ["layout", "animation", "simulation", "lighting", "compositing"]
|
||||
```
|
||||
|
||||
### Validation
|
||||
- Asset categories must be one of: characters, props, sets, vehicles
|
||||
- Task templates must be lists of strings
|
||||
- Enabled tasks must match the template structure
|
||||
- Invalid categories or formats return 422 validation errors
|
||||
|
||||
## Frontend Implementation
|
||||
|
||||
### Components
|
||||
|
||||
#### 1. UploadLocationConfig.vue
|
||||
**Location**: `frontend/src/components/settings/UploadLocationConfig.vue`
|
||||
|
||||
**Features**:
|
||||
- Input field for upload data location path
|
||||
- Clear button to reset location
|
||||
- Example paths for Windows, Linux/Mac, and Network drives
|
||||
- Info box with usage guidelines
|
||||
- Save/Cancel actions
|
||||
|
||||
**Props**:
|
||||
- `initialLocation`: Current upload location
|
||||
- `isSaving`: Loading state during save
|
||||
|
||||
**Events**:
|
||||
- `save`: Emits new location string
|
||||
- `cancel`: Emits cancel action
|
||||
|
||||
#### 2. DefaultTaskTemplatesEditor.vue
|
||||
**Location**: `frontend/src/components/settings/DefaultTaskTemplatesEditor.vue`
|
||||
|
||||
**Features**:
|
||||
- Asset task templates table with checkboxes per category
|
||||
- Shot task templates table with enable/disable checkboxes
|
||||
- Dynamic loading of custom task types from API
|
||||
- Edit/Delete buttons for custom task types
|
||||
- Template preview showing what tasks will be created
|
||||
- Reset to defaults button
|
||||
- Integration with CustomTaskTypeManager
|
||||
|
||||
**Props**:
|
||||
- `projectId`: Project ID for loading custom task types
|
||||
- `initialAssetTemplates`: Current asset templates
|
||||
- `initialShotTemplates`: Current shot templates
|
||||
- `isSaving`: Loading state during save
|
||||
|
||||
**Events**:
|
||||
- `save`: Emits { assetTemplates, shotTemplates }
|
||||
- `cancel`: Emits cancel action
|
||||
- `editCustomTaskType`: Emits (taskType, category) for editing
|
||||
- `deleteCustomTaskType`: Emits (taskType, category) for deletion
|
||||
|
||||
**Methods**:
|
||||
- `refreshTaskTypes()`: Exposed method to reload task types after custom type changes
|
||||
|
||||
#### 3. ProjectSettingsView.vue
|
||||
**Location**: `frontend/src/views/ProjectSettingsView.vue`
|
||||
|
||||
**Features**:
|
||||
- Tabbed interface with 6 tabs:
|
||||
- General: Project basic information
|
||||
- Episodes: Episode management
|
||||
- Team: Project members
|
||||
- Technical: Technical specifications
|
||||
- Tasks: Custom task types and templates
|
||||
- Storage: Upload location configuration
|
||||
- Loads project settings on mount
|
||||
- Handles save operations for both components
|
||||
- Integrates with CustomTaskTypeManager
|
||||
- Provides navigation between tabs for edit/delete operations
|
||||
|
||||
**Tab Structure**:
|
||||
```
|
||||
General | Episodes | Team | Technical | Tasks | Storage
|
||||
```
|
||||
|
||||
### Services
|
||||
|
||||
#### projectService (frontend/src/services/project.ts)
|
||||
|
||||
```typescript
|
||||
export interface ProjectSettings {
|
||||
upload_data_location?: string
|
||||
asset_task_templates?: AssetTaskTemplates
|
||||
shot_task_templates?: string[]
|
||||
enabled_asset_tasks?: Record<string, string[]>
|
||||
enabled_shot_tasks?: string[]
|
||||
}
|
||||
|
||||
async getProjectSettings(projectId: number): Promise<ProjectSettings>
|
||||
async updateProjectSettings(projectId: number, settings: ProjectSettings): Promise<ProjectSettings>
|
||||
```
|
||||
|
||||
### User Flow
|
||||
|
||||
1. **Navigate to Project Settings**:
|
||||
- User clicks on project settings from project page
|
||||
- ProjectSettingsView loads with tabbed interface
|
||||
|
||||
2. **Configure Upload Location** (Storage Tab):
|
||||
- User enters custom upload path
|
||||
- Clicks "Save Configuration"
|
||||
- System validates and saves to backend
|
||||
- Toast notification confirms success
|
||||
|
||||
3. **Configure Task Templates** (Tasks Tab):
|
||||
- User sees two sections:
|
||||
- Custom Task Type Manager (top)
|
||||
- Default Task Templates Editor (bottom)
|
||||
- User can add/edit/delete custom task types
|
||||
- User toggles checkboxes for each task type per category
|
||||
- Preview shows what tasks will be created
|
||||
- Clicks "Save Templates"
|
||||
- System validates and saves to backend
|
||||
- Toast notification confirms success
|
||||
|
||||
4. **Integration with Asset/Shot Creation**:
|
||||
- When creating assets, system uses project-specific templates
|
||||
- When creating shots, system uses project-specific templates
|
||||
- Custom task types appear in templates automatically
|
||||
|
||||
## Testing
|
||||
|
||||
### Backend Tests
|
||||
**File**: `backend/test_project_settings_api.py`
|
||||
|
||||
**Test Cases**:
|
||||
1. ✅ GET project settings returns defaults
|
||||
2. ✅ PUT updates all settings fields
|
||||
3. ✅ Settings persist across requests
|
||||
4. ✅ Partial updates work correctly
|
||||
5. ✅ Invalid project ID returns 404
|
||||
|
||||
**Run Tests**:
|
||||
```bash
|
||||
cd backend
|
||||
python test_project_settings_api.py
|
||||
```
|
||||
|
||||
### Manual Testing Checklist
|
||||
|
||||
#### Backend:
|
||||
- [x] GET /projects/{id}/settings returns default values
|
||||
- [x] PUT /projects/{id}/settings updates all fields
|
||||
- [x] PUT /projects/{id}/settings supports partial updates
|
||||
- [x] Settings persist in database
|
||||
- [x] Invalid project ID returns 404
|
||||
- [x] Non-coordinator users cannot update settings
|
||||
- [x] Validation errors for invalid categories
|
||||
|
||||
#### Frontend:
|
||||
- [ ] Upload location input accepts and saves paths
|
||||
- [ ] Task template checkboxes toggle correctly
|
||||
- [ ] Preview updates when templates change
|
||||
- [ ] Reset to defaults button works
|
||||
- [ ] Save button shows loading state
|
||||
- [ ] Toast notifications appear on success/error
|
||||
- [ ] Settings persist after page refresh
|
||||
- [ ] Custom task types appear in templates
|
||||
- [ ] Edit/Delete custom task type navigation works
|
||||
|
||||
## Requirements Coverage
|
||||
|
||||
This implementation satisfies the following requirements:
|
||||
|
||||
### Requirement 19: Project Settings for Upload Location and Default Tasks
|
||||
|
||||
**19.1** ✅ Configure upload data storage locations per project
|
||||
- Upload location field in Project model
|
||||
- API endpoint to get/update upload location
|
||||
- Frontend component with path input
|
||||
|
||||
**19.2** ✅ Define custom default task templates for asset creation per project
|
||||
- Asset task templates stored as JSON in Project model
|
||||
- API endpoints to manage templates
|
||||
- Frontend editor with category-specific checkboxes
|
||||
|
||||
**19.3** ✅ Define custom default task templates for shot creation per project
|
||||
- Shot task templates stored as JSON in Project model
|
||||
- API endpoints to manage templates
|
||||
- Frontend editor with task type checkboxes
|
||||
|
||||
**19.4** ✅ Support different task templates for different asset categories
|
||||
- Templates organized by category (characters, props, sets, vehicles)
|
||||
- Each category can have different task lists
|
||||
- Frontend table shows all categories
|
||||
|
||||
**19.5** ✅ Support different task templates for different shot types
|
||||
- Shot templates stored as list
|
||||
- Can be customized per project
|
||||
- Frontend table shows all shot task types
|
||||
|
||||
**19.6** ✅ Enable or disable specific default tasks per project
|
||||
- Enabled tasks tracked separately from templates
|
||||
- Can disable tasks without removing from templates
|
||||
- Frontend checkboxes control enabled state
|
||||
|
||||
**19.7** ✅ Apply project-specific upload locations to all file uploads
|
||||
- Upload location stored in project settings
|
||||
- Available for file upload handlers to use
|
||||
- Displayed to users during upload
|
||||
|
||||
**19.8** ✅ Use project-specific default task templates when creating assets and shots
|
||||
- Templates loaded from project settings
|
||||
- Applied during asset/shot creation
|
||||
- Custom task types included automatically
|
||||
|
||||
**19.9** ✅ Provide project settings interface for coordinators
|
||||
- Dedicated settings view with tabs
|
||||
- Coordinator-only access for updates
|
||||
- All project members can view settings
|
||||
|
||||
## Database Migration
|
||||
|
||||
The migration script `backend/migrate_project_settings.py` adds the necessary columns:
|
||||
- Checks if columns already exist
|
||||
- Adds columns if missing
|
||||
- Sets default values for existing projects
|
||||
- Safe to run multiple times
|
||||
|
||||
**Run Migration**:
|
||||
```bash
|
||||
cd backend
|
||||
python migrate_project_settings.py
|
||||
```
|
||||
|
||||
## Integration Points
|
||||
|
||||
### With Asset Creation
|
||||
- Asset creation reads `asset_task_templates` from project settings
|
||||
- Creates tasks based on asset category
|
||||
- Respects `enabled_asset_tasks` to skip disabled tasks
|
||||
- Includes custom task types from project
|
||||
|
||||
### With Shot Creation
|
||||
- Shot creation reads `shot_task_templates` from project settings
|
||||
- Creates tasks for all enabled shot task types
|
||||
- Respects `enabled_shot_tasks` to skip disabled tasks
|
||||
- Includes custom task types from project
|
||||
|
||||
### With File Uploads
|
||||
- File upload handlers can read `upload_data_location`
|
||||
- Use project-specific path if configured
|
||||
- Fall back to default location if not set
|
||||
|
||||
### With Custom Task Types
|
||||
- Custom task types automatically appear in templates
|
||||
- Edit/Delete operations navigate to CustomTaskTypeManager
|
||||
- Template editor refreshes after custom type changes
|
||||
- Seamless integration between components
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
1. **Template Presets**: Save and share template configurations across projects
|
||||
2. **Path Validation**: Verify upload paths exist and are writable
|
||||
3. **Template History**: Track changes to templates over time
|
||||
4. **Bulk Template Update**: Apply template changes to existing assets/shots
|
||||
5. **Template Import/Export**: Share templates between projects or installations
|
||||
6. **Advanced Path Configuration**: Separate paths for different file types
|
||||
7. **Template Inheritance**: Base templates on other projects
|
||||
8. **Conditional Templates**: Different templates based on project type or status
|
||||
|
||||
## Notes
|
||||
|
||||
- All settings are optional and have sensible defaults
|
||||
- Settings can be updated independently (partial updates)
|
||||
- Changes take effect immediately for new assets/shots
|
||||
- Existing assets/shots are not affected by template changes
|
||||
- Coordinators and admins can manage settings
|
||||
- All project members can view settings
|
||||
- Settings are project-specific and don't affect other projects
|
||||
- Custom task types integrate seamlessly with templates
|
||||
Reference in New Issue
Block a user