remediation

package
v0.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 23, 2026 License: GPL-3.0 Imports: 5 Imported by: 0

Documentation

Overview

Package remediation provides domain models for remediation campaign management.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrCampaignNotFound = fmt.Errorf("%w: remediation campaign not found", shared.ErrNotFound)
)

Errors

Functions

This section is empty.

Types

type Campaign

type Campaign struct {
	// contains filtered or unexported fields
}

Campaign tracks a remediation effort across multiple findings.

func NewCampaign

func NewCampaign(tenantID shared.ID, name string, priority CampaignPriority) (*Campaign, error)

NewCampaign creates a new remediation campaign.

func ReconstituteCampaign

func ReconstituteCampaign(
	id, tenantID shared.ID,
	name, description string,
	status CampaignStatus, priority CampaignPriority,
	findingFilter map[string]any,
	findingCount, resolvedCount int, progress float64,
	riskBefore, riskAfter, riskReduction *float64,
	assignedTo, assignedTeam *shared.ID,
	startDate, dueDate, completedAt *time.Time,
	tags []string, createdBy *shared.ID,
	createdAt, updatedAt time.Time,
) *Campaign

ReconstituteCampaign creates from persisted data.

func (*Campaign) Activate

func (c *Campaign) Activate() error

Activate transitions to active status.

func (*Campaign) AllFindingsResolved added in v0.2.0

func (c *Campaign) AllFindingsResolved() bool

AllFindingsResolved reports whether every finding in the campaign is resolved (progress at 100%). A zero-finding campaign is NOT treated as complete — an empty campaign is a misconfiguration, not an accomplishment.

func (*Campaign) AssignedTeam

func (c *Campaign) AssignedTeam() *shared.ID

func (*Campaign) AssignedTo

func (c *Campaign) AssignedTo() *shared.ID

func (*Campaign) Cancel

func (c *Campaign) Cancel()

Cancel transitions to canceled.

func (*Campaign) Complete

func (c *Campaign) Complete() error

Complete transitions to completed.

func (*Campaign) CompletedAt

func (c *Campaign) CompletedAt() *time.Time

func (*Campaign) CreatedAt

func (c *Campaign) CreatedAt() time.Time

func (*Campaign) CreatedBy

func (c *Campaign) CreatedBy() *shared.ID

func (*Campaign) Description

func (c *Campaign) Description() string

func (*Campaign) DueDate

func (c *Campaign) DueDate() *time.Time

func (*Campaign) FindingCount

func (c *Campaign) FindingCount() int

func (*Campaign) FindingFilter

func (c *Campaign) FindingFilter() map[string]any

func (*Campaign) ID

func (c *Campaign) ID() shared.ID

Getters

func (*Campaign) IsOverdue

func (c *Campaign) IsOverdue() bool

IsOverdue returns true if past due date and not completed.

func (*Campaign) Name

func (c *Campaign) Name() string

func (*Campaign) Pause

func (c *Campaign) Pause() error

Pause transitions to paused.

func (*Campaign) Priority

func (c *Campaign) Priority() CampaignPriority

func (*Campaign) Progress

func (c *Campaign) Progress() float64

func (*Campaign) RecordRiskReduction

func (c *Campaign) RecordRiskReduction(before, after float64)

RecordRiskReduction records risk before/after for this campaign.

func (*Campaign) ResolvedCount

func (c *Campaign) ResolvedCount() int

func (*Campaign) RiskAfter

func (c *Campaign) RiskAfter() *float64

func (*Campaign) RiskBefore

func (c *Campaign) RiskBefore() *float64

func (*Campaign) RiskReduction

func (c *Campaign) RiskReduction() *float64

func (*Campaign) SetAssignment

func (c *Campaign) SetAssignment(assignedTo, assignedTeam *shared.ID)

SetAssignment sets who/what team is responsible.

func (*Campaign) SetCreatedBy

func (c *Campaign) SetCreatedBy(userID shared.ID)

SetCreatedBy sets the creator.

func (*Campaign) SetDescription added in v0.1.7

func (c *Campaign) SetDescription(desc string)

SetDescription sets campaign description.

func (*Campaign) SetDueDate added in v0.1.7

func (c *Campaign) SetDueDate(d *time.Time)

SetDueDate sets campaign due date.

func (*Campaign) SetFindingFilter

func (c *Campaign) SetFindingFilter(filter map[string]any)

SetFindingFilter sets the filter criteria for this campaign's findings.

func (*Campaign) SetName added in v0.1.7

func (c *Campaign) SetName(name string)

SetName sets campaign name.

func (*Campaign) SetPriority added in v0.1.7

func (c *Campaign) SetPriority(p CampaignPriority)

SetPriority sets campaign priority.

func (*Campaign) SetTags

func (c *Campaign) SetTags(tags []string)

SetTags sets campaign tags.

func (*Campaign) SetTimeline

func (c *Campaign) SetTimeline(startDate, dueDate *time.Time)

SetTimeline sets start and due dates.

func (*Campaign) StartDate

func (c *Campaign) StartDate() *time.Time

func (*Campaign) StartValidation

func (c *Campaign) StartValidation() error

StartValidation transitions to validating (re-scanning to verify fixes).

func (*Campaign) Status

func (c *Campaign) Status() CampaignStatus

func (*Campaign) Tags

func (c *Campaign) Tags() []string

func (*Campaign) TenantID

func (c *Campaign) TenantID() shared.ID

func (*Campaign) TryAutoComplete added in v0.2.0

func (c *Campaign) TryAutoComplete() (bool, error)

TryAutoComplete attempts the active/validating → completed transition when all findings are resolved. this is what turns "every finding in my campaign hit resolved" into an actual campaign-level event without an operator clicking Complete.

Returns (true, nil) on successful auto-complete. Returns (false, nil) when not yet eligible — callers should treat this as a normal no-op, not an error. Returns (_, err) for genuine state-machine or validation failures.

func (*Campaign) Update

func (c *Campaign) Update(name, description string, priority CampaignPriority)

Update sets mutable fields.

func (*Campaign) UpdateProgress

func (c *Campaign) UpdateProgress(findingCount, resolvedCount int)

UpdateProgress updates finding counts and progress percentage.

func (*Campaign) UpdatedAt

func (c *Campaign) UpdatedAt() time.Time

type CampaignFilter

type CampaignFilter struct {
	TenantID *shared.ID
	Status   *CampaignStatus
	Priority *CampaignPriority
	Search   *string
}

CampaignFilter defines criteria for listing campaigns.

type CampaignPriority

type CampaignPriority string

CampaignPriority defines urgency levels.

const (
	CampaignPriorityCritical CampaignPriority = "critical"
	CampaignPriorityHigh     CampaignPriority = "high"
	CampaignPriorityMedium   CampaignPriority = "medium"
	CampaignPriorityLow      CampaignPriority = "low"
)

type CampaignRepository

type CampaignRepository interface {
	Create(ctx context.Context, campaign *Campaign) error
	GetByID(ctx context.Context, tenantID, id shared.ID) (*Campaign, error)
	Update(ctx context.Context, campaign *Campaign) error
	Delete(ctx context.Context, tenantID, id shared.ID) error
	List(ctx context.Context, filter CampaignFilter, page pagination.Pagination) (pagination.Result[*Campaign], error)
}

CampaignRepository defines persistence for remediation campaigns.

type CampaignStatus

type CampaignStatus string

CampaignStatus defines lifecycle states.

const (
	CampaignStatusDraft      CampaignStatus = "draft"
	CampaignStatusActive     CampaignStatus = "active"
	CampaignStatusPaused     CampaignStatus = "paused"
	CampaignStatusValidating CampaignStatus = "validating"
	CampaignStatusCompleted  CampaignStatus = "completed"
	CampaignStatusCanceled   CampaignStatus = "canceled"
)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL