74 lines
3.1 KiB
Go
74 lines
3.1 KiB
Go
package models
|
|
|
|
import (
|
|
"encoding/json"
|
|
"time"
|
|
)
|
|
|
|
// ── Workflow ────────────────────────────────
|
|
|
|
// Workflow is a team-owned or global staged process definition.
|
|
type Workflow struct {
|
|
ID string `json:"id"`
|
|
TeamID *string `json:"team_id,omitempty"`
|
|
Name string `json:"name"`
|
|
Slug string `json:"slug"`
|
|
Description string `json:"description"`
|
|
Branding json.RawMessage `json:"branding"`
|
|
EntryMode string `json:"entry_mode"` // public_link | team_only
|
|
IsActive bool `json:"is_active"`
|
|
Version int `json:"version"`
|
|
OnComplete json.RawMessage `json:"on_complete,omitempty"`
|
|
Retention json.RawMessage `json:"retention"`
|
|
WebhookURL string `json:"webhook_url,omitempty"`
|
|
WebhookSecret string `json:"webhook_secret,omitempty"`
|
|
CreatedBy string `json:"created_by"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
UpdatedAt time.Time `json:"updated_at"`
|
|
|
|
// Joined data (not stored directly)
|
|
Stages []WorkflowStage `json:"stages,omitempty"`
|
|
}
|
|
|
|
// WorkflowPatch contains optional fields for updating a workflow.
|
|
type WorkflowPatch struct {
|
|
Name *string `json:"name,omitempty"`
|
|
Description *string `json:"description,omitempty"`
|
|
Branding *json.RawMessage `json:"branding,omitempty"`
|
|
EntryMode *string `json:"entry_mode,omitempty"`
|
|
IsActive *bool `json:"is_active,omitempty"`
|
|
OnComplete *json.RawMessage `json:"on_complete,omitempty"`
|
|
Retention *json.RawMessage `json:"retention,omitempty"`
|
|
WebhookURL *string `json:"webhook_url,omitempty"`
|
|
WebhookSecret *string `json:"webhook_secret,omitempty"`
|
|
}
|
|
|
|
// ── Workflow Stage ──────────────────────────
|
|
|
|
// WorkflowStage is an ordered step within a workflow definition.
|
|
type WorkflowStage struct {
|
|
ID string `json:"id"`
|
|
WorkflowID string `json:"workflow_id"`
|
|
Ordinal int `json:"ordinal"`
|
|
Name string `json:"name"`
|
|
PersonaID *string `json:"persona_id,omitempty"`
|
|
AssignmentTeamID *string `json:"assignment_team_id,omitempty"`
|
|
FormTemplate json.RawMessage `json:"form_template"`
|
|
HistoryMode string `json:"history_mode"` // full | summary | fresh
|
|
AutoTransition bool `json:"auto_transition"`
|
|
TransitionRules json.RawMessage `json:"transition_rules"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|
|
|
|
// ── Workflow Version (immutable snapshot) ───
|
|
|
|
// WorkflowVersion is an immutable snapshot of a workflow definition
|
|
// at a point in time. Active workflow instances run against a pinned version.
|
|
type WorkflowVersion struct {
|
|
ID string `json:"id"`
|
|
WorkflowID string `json:"workflow_id"`
|
|
VersionNumber int `json:"version_number"`
|
|
Snapshot json.RawMessage `json:"snapshot"`
|
|
CreatedAt time.Time `json:"created_at"`
|
|
}
|