feat: move all remaining inline logic from routers to services (Tier 2)
This commit is contained in:
@@ -5,19 +5,17 @@ Provides granular scoring with breakdowns and configurable weights.
|
||||
|
||||
from typing import Optional
|
||||
|
||||
from fastapi import APIRouter, Depends, HTTPException, Query
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
from pydantic import BaseModel
|
||||
from sqlalchemy.orm import Session
|
||||
|
||||
from app.database import get_db
|
||||
from app.dependencies.auth import get_current_user, require_role
|
||||
from app.models.user import User
|
||||
from app.models.technique import Technique
|
||||
from app.models.threat_actor import ThreatActor
|
||||
from app.services.scoring_service import (
|
||||
calculate_technique_score,
|
||||
score_technique_by_mitre_id,
|
||||
score_actor_by_id,
|
||||
calculate_tactic_score,
|
||||
calculate_actor_coverage_score,
|
||||
calculate_organization_score,
|
||||
get_score_history,
|
||||
)
|
||||
@@ -39,23 +37,7 @@ def score_technique(
|
||||
current_user: User = Depends(get_current_user),
|
||||
):
|
||||
"""Get detailed score with breakdown for a specific technique."""
|
||||
technique = (
|
||||
db.query(Technique)
|
||||
.filter(Technique.mitre_id == mitre_id)
|
||||
.first()
|
||||
)
|
||||
if not technique:
|
||||
raise HTTPException(status_code=404, detail="Technique not found")
|
||||
|
||||
result = calculate_technique_score(technique, db)
|
||||
|
||||
return {
|
||||
"mitre_id": technique.mitre_id,
|
||||
"name": technique.name,
|
||||
"tactic": technique.tactic,
|
||||
"status_global": technique.status_global.value if technique.status_global else None,
|
||||
**result,
|
||||
}
|
||||
return score_technique_by_mitre_id(db, mitre_id)
|
||||
|
||||
|
||||
# ── GET /scores/tactic/{tactic} ──────────────────────────────────────
|
||||
@@ -81,11 +63,7 @@ def score_threat_actor(
|
||||
current_user: User = Depends(get_current_user),
|
||||
):
|
||||
"""Get coverage score against a specific threat actor."""
|
||||
actor = db.query(ThreatActor).filter(ThreatActor.id == actor_id).first()
|
||||
if not actor:
|
||||
raise HTTPException(status_code=404, detail="Threat actor not found")
|
||||
|
||||
return calculate_actor_coverage_score(actor_id, db)
|
||||
return score_actor_by_id(db, actor_id)
|
||||
|
||||
|
||||
# ── GET /scores/organization ─────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user