diff --git a/backend/app/modules/scanner/domain/entities.py b/backend/app/modules/scanner/domain/entities.py index e69de29..8b93918 100644 --- a/backend/app/modules/scanner/domain/entities.py +++ b/backend/app/modules/scanner/domain/entities.py @@ -0,0 +1,102 @@ +from dataclasses import dataclass, field +from datetime import datetime + +from app.modules.design.domain.entities import ( + ADR, + ApiContract, + Capability, + ChangeLogEntry, + CodebaseAlignment, + DataFlow, + DataSecurity, + DesignDocument, + Domain, + DomainEntity, + DomainModule, + Entity, + Environment, + ExternalSystem, + Integration, + Module, + ModuleBoundaryRule, + OperationalBaseline, + ReleasePlan, + RuntimeComponent, + RuntimeTopology, + Scenario, + SharedTerm, + ScopeAndGoals, + SolutionLayer, + SystemContext, + TechSelection, + TraceabilityLink, + UbiquitousTerm, + UserJourney, + ValueFlow, +) +from app.modules.design.domain.value_objects import FileStatus + + +@dataclass +class FileStatusEntry: + path: str + status: FileStatus + content_lines: int + + +@dataclass +class ScanSummary: + total_files: int + ok: int + sparse: int + missing: int + placeholder_heavy: int + template_residue: int + + +@dataclass +class ScanResult: + """Internal domain object carrying all parsed entities. + + API response (ScanResultResponse) only includes project_id, scanned_at, + file_statuses, summary. Entity data is exposed through separate + /entities/* endpoints. + """ + + project_id: str + scanned_at: datetime + file_statuses: list[FileStatusEntry] + summary: ScanSummary + # All parsed Design entities + capabilities: list[Capability] = field(default_factory=list) + modules: list[Module] = field(default_factory=list) + entities: list[Entity] = field(default_factory=list) + value_flows: list[ValueFlow] = field(default_factory=list) + user_journeys: list[UserJourney] = field(default_factory=list) + integrations: list[Integration] = field(default_factory=list) + data_flows: list[DataFlow] = field(default_factory=list) + traceability_links: list[TraceabilityLink] = field(default_factory=list) + external_systems: list[ExternalSystem] = field(default_factory=list) + runtime_components: list[RuntimeComponent] = field(default_factory=list) + tech_selections: list[TechSelection] = field(default_factory=list) + environments: list[Environment] = field(default_factory=list) + design_documents: list[DesignDocument] = field(default_factory=list) + change_log_entries: list[ChangeLogEntry] = field(default_factory=list) + adrs: list[ADR] = field(default_factory=list) + shared_terms: list[SharedTerm] = field(default_factory=list) + domains: list[Domain] = field(default_factory=list) + ubiquitous_terms: list[UbiquitousTerm] = field(default_factory=list) + scenarios: list[Scenario] = field(default_factory=list) + domain_modules: list[DomainModule] = field(default_factory=list) + domain_entities: list[DomainEntity] = field(default_factory=list) + data_securities: list[DataSecurity] = field(default_factory=list) + codebase_alignments: list[CodebaseAlignment] = field(default_factory=list) + api_contracts: list[ApiContract] = field(default_factory=list) + # MD file-specific (singleton or None) + scope_and_goals: ScopeAndGoals | None = None + system_context: SystemContext | None = None + solution_layer: SolutionLayer | None = None + module_boundary_rule: ModuleBoundaryRule | None = None + runtime_topology: RuntimeTopology | None = None + operational_baseline: OperationalBaseline | None = None + release_plan: ReleasePlan | None = None