generated from coulomb/repo-seed
Implements the full governance layer: - Schema: requirements, decision_records, policy_references, implementation_change_references; requirement_candidates gets requirement_id back-reference - RequirementsController (index/show; promotion-only create) - DecisionRecordsController (CRUD + policy/impl ref management) - GovernanceDashboardAction on HubsController (AutoRefresh) - PromoteToRequirementAction + LinkToDecisionAction on candidates - Outcome immutability enforced at controller level (fill excludes outcome) - Full six-outcome vocabulary with Tailwind color roles - Integration tests for all Phase 3 paths - FrontController: registers Phase 2 missing controllers + all Phase 3 - SCOPE.md + docs/phase3-summary.md updated Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
96 lines
3.9 KiB
Haskell
96 lines
3.9 KiB
Haskell
module Web.Types where
|
|
|
|
import IHP.Prelude
|
|
import IHP.ModelSupport
|
|
import IHP.LoginSupport.Types
|
|
import Generated.Types
|
|
|
|
-- | Authentication type alias
|
|
type CurrentUserRecord = User
|
|
|
|
instance HasNewSessionUrl User where
|
|
newSessionUrl _ = "/NewSession"
|
|
|
|
-- Controllers
|
|
|
|
data WebApplication = WebApplication deriving (Eq, Show)
|
|
|
|
data HubsController
|
|
= HubsAction
|
|
| NewHubAction
|
|
| ShowHubAction { hubId :: !(Id Hub) }
|
|
| CreateHubAction
|
|
| EditHubAction { hubId :: !(Id Hub) }
|
|
| UpdateHubAction { hubId :: !(Id Hub) }
|
|
| DeleteHubAction { hubId :: !(Id Hub) }
|
|
| TriageDashboardAction { hubId :: !(Id Hub) }
|
|
| GovernanceDashboardAction { hubId :: !(Id Hub) }
|
|
deriving (Eq, Show, Data)
|
|
|
|
data WidgetsController
|
|
= WidgetsAction
|
|
| NewWidgetAction
|
|
| ShowWidgetAction { widgetId :: !(Id Widget) }
|
|
| CreateWidgetAction
|
|
| EditWidgetAction { widgetId :: !(Id Widget) }
|
|
| UpdateWidgetAction { widgetId :: !(Id Widget) }
|
|
deriving (Eq, Show, Data)
|
|
|
|
data InteractionEventsController
|
|
= CreateInteractionEventAction { widgetId :: !(Id Widget) }
|
|
deriving (Eq, Show, Data)
|
|
|
|
data AnnotationsController
|
|
= WidgetAnnotationsAction { widgetId :: !(Id Widget) }
|
|
| ShowAnnotationAction { annotationId :: !(Id Annotation) }
|
|
| NewAnnotationAction { widgetId :: !(Id Widget) }
|
|
| CreateAnnotationAction { widgetId :: !(Id Widget) }
|
|
| EscalateAnnotationAction { annotationId :: !(Id Annotation) }
|
|
deriving (Eq, Show, Data)
|
|
|
|
data AnnotationThreadsController
|
|
= WidgetAnnotationThreadsAction { widgetId :: !(Id Widget) }
|
|
| ShowAnnotationThreadAction { annotationThreadId :: !(Id AnnotationThread) }
|
|
| NewAnnotationThreadAction { widgetId :: !(Id Widget) }
|
|
| CreateAnnotationThreadAction { widgetId :: !(Id Widget) }
|
|
| AssignAnnotationToThreadAction { annotationId :: !(Id Annotation) }
|
|
deriving (Eq, Show, Data)
|
|
|
|
data RequirementCandidatesController
|
|
= RequirementCandidatesAction
|
|
| ShowRequirementCandidateAction { requirementCandidateId :: !(Id RequirementCandidate) }
|
|
| NewRequirementCandidateAction
|
|
| CreateRequirementCandidateAction
|
|
| EditRequirementCandidateAction { requirementCandidateId :: !(Id RequirementCandidate) }
|
|
| UpdateRequirementCandidateAction { requirementCandidateId :: !(Id RequirementCandidate) }
|
|
| UpdateTriageStatusAction { requirementCandidateId :: !(Id RequirementCandidate) }
|
|
| AssignReviewerAction { requirementCandidateId :: !(Id RequirementCandidate) }
|
|
| MyQueueAction
|
|
| PromoteToRequirementAction { requirementCandidateId :: !(Id RequirementCandidate) }
|
|
| LinkToDecisionAction { requirementCandidateId :: !(Id RequirementCandidate) }
|
|
deriving (Eq, Show, Data)
|
|
|
|
data RequirementsController
|
|
= RequirementsAction
|
|
| ShowRequirementAction { requirementId :: !(Id Requirement) }
|
|
deriving (Eq, Show, Data)
|
|
|
|
data DecisionRecordsController
|
|
= DecisionRecordsAction
|
|
| ShowDecisionRecordAction { decisionRecordId :: !(Id DecisionRecord) }
|
|
| NewDecisionRecordAction
|
|
| CreateDecisionRecordAction
|
|
| EditDecisionRecordAction { decisionRecordId :: !(Id DecisionRecord) }
|
|
| UpdateDecisionRecordAction { decisionRecordId :: !(Id DecisionRecord) }
|
|
| AddPolicyReferenceAction { decisionRecordId :: !(Id DecisionRecord) }
|
|
| DeletePolicyReferenceAction { policyReferenceId :: !(Id PolicyReference) }
|
|
| AddImplementationRefAction { decisionRecordId :: !(Id DecisionRecord) }
|
|
| DeleteImplementationRefAction { implementationChangeReferenceId :: !(Id ImplementationChangeReference) }
|
|
deriving (Eq, Show, Data)
|
|
|
|
data SessionsController
|
|
= NewSessionAction
|
|
| CreateSessionAction
|
|
| DeleteSessionAction
|
|
deriving (Eq, Show, Data)
|