Skip to content

[Backend] Add CFACTS model functions for system comparison queries #250

@danielbowne

Description

@danielbowne

Overview

Add model layer functions to query CFACTS data and compare with ZTMF systems. This provides the data logic layer for the API endpoints.

Parent Epic: #233

Customer Value

Backend can find discrepancies between SDL CFACTS data and ZTMF systems programmatically.

Scope

Create backend/internal/model/cfacts.go with:

Functions to Implement

  1. FindCFACTSSystems() - Query cfacts_systems table with filters

    • Support filters: is_active, is_retired, is_decommissioned
    • Pagination support
    • Return CFACTS system data
  2. CompareWithZTMF() - JOIN query to find matches/mismatches

    • FULL OUTER JOIN: fismasystems ↔ cfacts_systems
    • Match on fisma_uuid = fismauid
    • Return side-by-side comparison
  3. FindDiscrepancies() - Categorize data quality issues

    • Systems in CFACTS but missing from ZTMF
    • Systems in ZTMF but missing from CFACTS
    • ISSO email mismatches
    • Decommission status conflicts
    • Return categorized discrepancy list

Patterns to Follow

  • Reuse patterns from fismasystems.go
  • Use squirrel query builder
  • Use pgx for database access
  • Consistent error handling

Acceptance Criteria

  • Model file created: backend/internal/model/cfacts.go
  • All 3 query functions implemented
  • Unit tests for each function
  • Test coverage > 80%
  • Works with test data: _test_data_cfacts_empire.sql
  • Code comments document each function
  • Follows existing codebase patterns

Testing

# Run unit tests
make test-unit

# Run with coverage
make test-coverage

Size Estimate

Small (1-2 days)

Dependencies

Blocks

  • Issue #XXX (API endpoints need this model layer)

Related

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions