Combined approved and candidate view with actions

This commit is contained in:
2026-04-29 13:19:58 +02:00
parent 8bd22dab1b
commit 142812e7f2
5 changed files with 942 additions and 43 deletions

View File

@@ -504,6 +504,131 @@ class RegistryStore:
(status, repository_id, analysis_run_id),
)
def mark_candidate_ability_status(
self,
repository_id: int,
analysis_run_id: int,
candidate_ability_id: int,
status: str,
) -> None:
with self.connect() as connection:
cursor = connection.execute(
"""
UPDATE candidate_abilities
SET status = ?
WHERE id = ? AND repository_id = ? AND analysis_run_id = ?
""",
(status, candidate_ability_id, repository_id, analysis_run_id),
)
if cursor.rowcount == 0:
raise NotFoundError(
"candidate ability "
f"{candidate_ability_id} was not found for repository "
f"{repository_id} analysis run {analysis_run_id}"
)
capability_rows = connection.execute(
"""
SELECT id FROM candidate_capabilities
WHERE ability_id = ? AND repository_id = ? AND analysis_run_id = ?
""",
(candidate_ability_id, repository_id, analysis_run_id),
).fetchall()
capability_ids = [row["id"] for row in capability_rows]
connection.execute(
"""
UPDATE candidate_capabilities
SET status = ?
WHERE ability_id = ? AND repository_id = ? AND analysis_run_id = ?
""",
(status, candidate_ability_id, repository_id, analysis_run_id),
)
for capability_id in capability_ids:
self._mark_candidate_children_status(
connection,
repository_id,
analysis_run_id,
capability_id,
status,
)
def mark_candidate_capability_status(
self,
repository_id: int,
analysis_run_id: int,
candidate_capability_id: int,
status: str,
) -> None:
with self.connect() as connection:
cursor = connection.execute(
"""
UPDATE candidate_capabilities
SET status = ?
WHERE id = ? AND repository_id = ? AND analysis_run_id = ?
""",
(status, candidate_capability_id, repository_id, analysis_run_id),
)
if cursor.rowcount == 0:
raise NotFoundError(
"candidate capability "
f"{candidate_capability_id} was not found for repository "
f"{repository_id} analysis run {analysis_run_id}"
)
self._mark_candidate_children_status(
connection,
repository_id,
analysis_run_id,
candidate_capability_id,
status,
)
def mark_candidate_feature_status(
self,
repository_id: int,
analysis_run_id: int,
candidate_feature_id: int,
status: str,
) -> None:
with self.connect() as connection:
cursor = connection.execute(
"""
UPDATE candidate_features
SET status = ?
WHERE id = ? AND repository_id = ? AND analysis_run_id = ?
""",
(status, candidate_feature_id, repository_id, analysis_run_id),
)
if cursor.rowcount == 0:
raise NotFoundError(
"candidate feature "
f"{candidate_feature_id} was not found for repository "
f"{repository_id} analysis run {analysis_run_id}"
)
def _mark_candidate_children_status(
self,
connection: sqlite3.Connection,
repository_id: int,
analysis_run_id: int,
candidate_capability_id: int,
status: str,
) -> None:
connection.execute(
"""
UPDATE candidate_features
SET status = ?
WHERE capability_id = ? AND repository_id = ? AND analysis_run_id = ?
""",
(status, candidate_capability_id, repository_id, analysis_run_id),
)
connection.execute(
"""
UPDATE candidate_evidence
SET status = ?
WHERE capability_id = ? AND repository_id = ? AND analysis_run_id = ?
""",
(status, candidate_capability_id, repository_id, analysis_run_id),
)
def reject_candidate_ability(
self,
repository_id: int,