LinkDesk/frontend/docs/project-settings-implementa...

9.3 KiB

Project Settings Interface Implementation

Overview

This document describes the implementation of the comprehensive project settings interface with tabbed navigation for managing episodes, task templates, and upload locations.

Features Implemented

1. Tabbed Interface

The project settings page now includes a tabbed interface with six sections:

  • General: Basic project information (name, code, client, type, status, dates)
  • Episodes: Episode management for organizing shots
  • Team: Project member management with department roles
  • Technical: Technical specifications (frame rate, storage paths, delivery specs)
  • Tasks: Default task templates for assets and shots
  • Storage: Upload location configuration

2. Episode Management Section

Location: frontend/src/components/settings/EpisodeManagementSection.vue

Features:

  • View all episodes in a table format with episode number, name, status, shot count, and description
  • Create new episodes with name, episode number, description, and status
  • Edit existing episodes
  • Delete episodes (with protection for episodes containing shots)
  • Sort episodes by episode number
  • Visual status indicators with color-coded badges
  • Inline actions for edit and delete

Episode Statuses:

  • Planning (secondary badge)
  • In Progress (default badge)
  • On Hold (outline badge)
  • Completed (success badge)
  • Cancelled (destructive badge)

Validation:

  • Cannot delete episodes that contain shots
  • Episode number must be unique within the project
  • All fields validated before submission

3. Default Task Templates Editor

Location: frontend/src/components/settings/DefaultTaskTemplatesEditor.vue

Features:

  • Configure default tasks for each asset category:
    • Characters: modeling, surfacing, rigging
    • Props: modeling, surfacing
    • Sets: modeling, surfacing
    • Vehicles: modeling, surfacing, rigging
  • Configure default tasks for shots:
    • Layout, Animation, Simulation, Lighting, Compositing
  • Enable/disable individual tasks per category
  • Preview section showing how templates will be applied
  • Reset to defaults button
  • Save/cancel actions

Default Templates:

{
  assetTemplates: {
    characters: ['modeling', 'surfacing', 'rigging'],
    props: ['modeling', 'surfacing'],
    sets: ['modeling', 'surfacing'],
    vehicles: ['modeling', 'surfacing', 'rigging']
  },
  shotTemplates: ['layout', 'animation', 'simulation', 'lighting', 'compositing']
}

4. Upload Location Configuration

Location: frontend/src/components/settings/UploadLocationConfig.vue

Features:

  • Configure custom upload data location for the project
  • File path input with validation
  • Clear button to reset to default
  • Example paths for Windows, Linux/Mac, and Network locations
  • Info box explaining the configuration
  • Save/cancel actions

Example Paths:

  • Windows: D:\Projects\ProjectName\Uploads
  • Linux/Mac: /mnt/storage/projects/project-name/uploads
  • Network: \\server\projects\project-name\uploads

Backend Implementation

Database Schema Changes

Added new columns to the projects table:

ALTER TABLE projects ADD COLUMN upload_data_location TEXT;
ALTER TABLE projects ADD COLUMN asset_task_templates TEXT;
ALTER TABLE projects ADD COLUMN shot_task_templates TEXT;
ALTER TABLE projects ADD COLUMN enabled_asset_tasks TEXT;
ALTER TABLE projects ADD COLUMN enabled_shot_tasks TEXT;

Migration Script: backend/migrate_project_settings.py

API Endpoints

Get Project Settings

GET /projects/{project_id}/settings

Response:

{
  "upload_data_location": "/mnt/projects/project-name/uploads",
  "asset_task_templates": {
    "characters": ["modeling", "surfacing", "rigging"],
    "props": ["modeling", "surfacing"],
    "sets": ["modeling", "surfacing"],
    "vehicles": ["modeling", "surfacing", "rigging"]
  },
  "shot_task_templates": ["layout", "animation", "simulation", "lighting", "compositing"],
  "enabled_asset_tasks": {},
  "enabled_shot_tasks": []
}

Update Project Settings

PUT /projects/{project_id}/settings

Request Body:

{
  "upload_data_location": "/mnt/projects/project-name/uploads",
  "asset_task_templates": {
    "characters": ["modeling", "surfacing", "rigging"]
  },
  "shot_task_templates": ["layout", "animation", "lighting"]
}

Response: Same as GET response

Authorization

  • Coordinators and Admins can modify project settings
  • Artists and Directors can view project settings (read-only)
  • Artists can only access settings for projects they are members of

Frontend Service Layer

Project Service Updates

Location: frontend/src/services/project.ts

Added new methods:

async getProjectSettings(projectId: number): Promise<ProjectSettings>
async updateProjectSettings(projectId: number, settings: ProjectSettings): Promise<ProjectSettings>

Types:

interface AssetTaskTemplates {
  characters: string[]
  props: string[]
  sets: string[]
  vehicles: string[]
}

interface ProjectSettings {
  upload_data_location?: string
  asset_task_templates?: AssetTaskTemplates
  shot_task_templates?: string[]
  enabled_asset_tasks?: Record<string, string[]>
  enabled_shot_tasks?: string[]
}

User Experience

Navigation Flow

  1. User navigates to Project Settings from the project detail page
  2. Settings page loads with tabbed interface
  3. User can switch between tabs to manage different aspects
  4. Changes are saved per section with immediate feedback
  5. Toast notifications confirm successful saves

Episode Management Flow

  1. User clicks "Episodes" tab
  2. View list of existing episodes sorted by episode number
  3. Click "New Episode" to create a new episode
  4. Fill in episode details (number, name, description, status)
  5. Click "Create Episode" to save
  6. Episode appears in the list immediately
  7. Edit or delete episodes using action buttons
  8. Cannot delete episodes with shots (protection)

Task Templates Flow

  1. User clicks "Tasks" tab
  2. View current task templates for assets and shots
  3. Check/uncheck tasks to enable/disable them
  4. Preview section shows how templates will be applied
  5. Click "Reset to Defaults" to restore default templates
  6. Click "Save Templates" to apply changes
  7. Toast notification confirms save

Upload Location Flow

  1. User clicks "Storage" tab
  2. View current upload location (if set)
  3. Enter new file path or clear existing path
  4. View example paths for reference
  5. Click "Save Configuration" to apply
  6. Toast notification confirms save

Requirements Satisfied

This implementation satisfies the following requirements from the spec:

Requirement 3 (Episode Management in Settings)

  • 3.1: Episode management within project settings page
  • 3.2: Episodes management section in project settings
  • 3.3: Create new episodes with name, number, and status
  • 3.4: Edit existing episode details
  • 3.5: Delete episodes with no associated shots
  • 3.6: Prevent deletion of episodes with shots
  • 3.7: Display episode list with status and shot count
  • 3.8: Support episode statuses (planning, in_progress, on_hold, completed, cancelled)
  • 3.9: Sort episodes by episode number

Requirement 19 (Project Settings)

  • 19.1: Configure upload data storage locations per project
  • 19.2: Define custom default task templates for assets per project
  • 19.3: Define custom default task templates for shots per project
  • 19.4: Support different task templates for different asset categories
  • 19.5: Support different task templates for different shot types
  • 19.6: Enable or disable specific default tasks per project
  • 19.7: Apply project-specific upload locations to all file uploads
  • 19.8: Use project-specific default task templates when creating assets and shots
  • 19.9: Provide project settings interface for coordinators

Testing

Manual Testing Checklist

  • Navigate to project settings page
  • Switch between all tabs
  • Create a new episode
  • Edit an existing episode
  • Try to delete an episode with shots (should fail)
  • Delete an episode without shots (should succeed)
  • Modify asset task templates
  • Modify shot task templates
  • Reset templates to defaults
  • Save task templates
  • Configure upload location
  • Clear upload location
  • Save upload location
  • Verify all changes persist after page reload

API Testing

Run the test script:

cd backend
python test_project_settings.py

Future Enhancements

  1. Task Template Presets: Save and load custom template presets
  2. Bulk Episode Operations: Create multiple episodes at once
  3. Episode Templates: Define episode templates with default shots
  4. Storage Validation: Validate that storage paths exist and are writable
  5. Task Dependencies: Define task dependencies in templates
  6. Custom Task Types: Allow creation of custom task types per project
  7. Template Inheritance: Inherit templates from parent projects or global defaults

Notes

  • Episode management is now centralized in project settings instead of a separate page
  • This provides a better user experience with all project configuration in one place
  • The tabbed interface makes it easy to navigate between different settings sections
  • All changes are saved immediately with visual feedback
  • The implementation follows the existing patterns in the codebase