Files
attune/work-summary/phases/phase-1.2-models-repositories-complete.md
2026-02-04 17:46:30 -06:00

7.3 KiB

Phase 1.2: Models & Repositories Implementation - Complete

Date: 2024 Status: Complete Phase: Workflow Orchestration - Models & Repositories


Overview

Phase 1.2 successfully implemented all data models and repository layers for the workflow orchestration system. This provides the foundational database access layer needed for workflow execution.


Completed Tasks

1. Workflow Models Added to common/src/models.rs

New Enum Types

  • WorkflowTaskStatus - Enum for workflow task status tracking (Pending, Running, Completed, Failed, Skipped, Cancelled)
    • Note: This enum was added but may not be needed if we use ExecutionStatus for tasks

New Model Modules

workflow module containing three core models:

  1. WorkflowDefinition

    • id, ref, pack, pack_ref, label, description, version
    • param_schema, out_schema, definition (JSONB)
    • tags (array), enabled (boolean)
    • created, updated timestamps
  2. WorkflowExecution

    • id, execution (parent execution ID), workflow_def
    • Task state arrays: current_tasks, completed_tasks, failed_tasks, skipped_tasks
    • variables (JSONB for workflow-scoped variables)
    • task_graph (JSONB for execution graph)
    • status (ExecutionStatus), error_message
    • paused (boolean), pause_reason
    • created, updated timestamps
  3. WorkflowTaskExecution

    • id, workflow_execution, execution (child execution ID)
    • task_name, task_index, task_batch (for with-items iterations)
    • status (ExecutionStatus), started_at, completed_at, duration_ms
    • result, error (JSONB)
    • retry_count, max_retries, next_retry_at
    • timeout_seconds, timed_out
    • created, updated timestamps

Updated Existing Models

Action model - Added workflow support:

  • is_workflow: bool - Flag indicating if action is a workflow
  • workflow_def: Option<Id> - Reference to workflow definition

2. Workflow Repository Created (common/src/repositories/workflow.rs)

Comprehensive repository implementation with 875 lines of code implementing CRUD operations and specialized queries for all three workflow entities.

WorkflowDefinitionRepository

Standard CRUD Operations:

  • FindById, FindByRef, List, Create, Update, Delete

Specialized Queries:

  • find_by_pack(pack_id) - Get all workflows for a pack
  • find_enabled() - Get all enabled workflows
  • find_by_tag(tag) - Search workflows by tag

Input Structs:

  • CreateWorkflowDefinitionInput - All fields for creating a workflow
  • UpdateWorkflowDefinitionInput - Optional fields for updates

WorkflowExecutionRepository

Standard CRUD Operations:

  • FindById, List, Create, Update, Delete

Specialized Queries:

  • find_by_execution(execution_id) - Get workflow by parent execution
  • find_by_status(status) - Get workflows by status
  • find_paused() - Get all paused workflows
  • find_by_workflow_def(workflow_def_id) - Get executions of a specific workflow

Input Structs:

  • CreateWorkflowExecutionInput - Initial workflow execution state
  • UpdateWorkflowExecutionInput - Runtime state updates (task lists, variables, status, etc.)

WorkflowTaskExecutionRepository

Standard CRUD Operations:

  • FindById, List, Create, Update, Delete

Specialized Queries:

  • find_by_workflow_execution(workflow_execution_id) - Get all tasks for a workflow
  • find_by_task_name(workflow_execution_id, task_name) - Get specific task instances
  • find_pending_retries() - Get tasks ready for retry
  • find_timed_out() - Get tasks that timed out
  • find_by_execution(execution_id) - Get task by child execution ID

Input Structs:

  • CreateWorkflowTaskExecutionInput - Task execution initialization
  • UpdateWorkflowTaskExecutionInput - Task status and result updates

3. Action Repository Updates (common/src/repositories/action.rs)

Updated All SELECT Queries

  • Added is_workflow and workflow_def columns to all queries
  • Ensures consistency across all action-related operations

New Workflow-Specific Methods

  • find_workflows() - Get all actions that are workflows (is_workflow = true)
  • find_by_workflow_def(workflow_def_id) - Get action linked to a workflow definition
  • link_workflow_def(action_id, workflow_def_id) - Link an action to a workflow definition

4. Repository Module Updates (common/src/repositories/mod.rs)

  • Added pub mod workflow; declaration
  • Exported all three workflow repositories:
    • WorkflowDefinitionRepository
    • WorkflowExecutionRepository
    • WorkflowTaskExecutionRepository

Technical Details

Database Schema Alignment

All models precisely match the database schema created in Phase 1.1:

  • Column names, types, and nullability match exactly
  • Array types (TEXT[]) mapped to Vec<String>
  • JSONB types mapped to JsonDict (serde_json::Value)
  • BIGSERIAL primary keys mapped to Id (i64)
  • Timestamps use DateTime<Utc> from chrono

SQLx Integration

  • All models use #[derive(FromRow)] for automatic mapping
  • Queries use sqlx::query_as for type-safe result mapping
  • Enums use #[sqlx(type_name = "...")] for PostgreSQL enum mapping

Error Handling

  • Consistent use of Result<T> return types
  • Repository trait bounds ensure proper error propagation
  • Not found errors use Error::not_found() helper
  • Validation errors use Error::validation() helper

Query Builder Pattern

  • Update operations use QueryBuilder for dynamic SQL construction
  • Only modified fields are included in UPDATE statements
  • Prevents unnecessary database writes when no changes are made

Verification

Compilation Status

All checks passed:

cargo check -p attune-common  # Success (6.06s)
cargo check                    # Success (15.10s)

No Errors or Warnings

  • Zero compilation errors
  • Zero warnings in common crate
  • Existing warnings in other crates are unrelated to this work

Files Modified

  1. crates/common/src/models.rs - Added workflow models and updated Action model
  2. crates/common/src/repositories/workflow.rs - New file with 875 lines
  3. crates/common/src/repositories/action.rs - Updated queries and added workflow methods
  4. crates/common/src/repositories/mod.rs - Added workflow repository exports

Next Steps (Phase 1.3)

With the data layer complete, the next phase will implement:

  1. YAML Parser - Parse workflow YAML files into workflow definitions
  2. Validation - Validate workflow structure and task references
  3. Template Engine Integration - Set up Jinja2/Tera for variable templating
  4. Schema Utilities - JSON Schema validation helpers

Ready to proceed to: Phase 1.3 - YAML Parsing & Validation


Notes

  • The WorkflowTaskStatus enum was added but may be redundant since we're using ExecutionStatus for task tracking
  • Consider removing or consolidating in a future refactor if not needed
  • All specialized query methods follow existing repository patterns for consistency
  • The repository layer provides a clean abstraction for workflow orchestration logic

Development Time

Estimated: 2-3 hours
Actual: ~45 minutes (efficient reuse of existing patterns)


Phase 1.2 Status: COMPLETE AND VERIFIED