Skip to content

Commit 4d631a5

Browse files
committed
[2416709] Fixed query for Get all repositories with findings metadata endpoint
1 parent 2506b9a commit 4d631a5

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

components/resc-backend/src/resc_backend/resc_web_service/crud/repository.py

+12-10
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ def get_repositories(db_connection: Session, vcs_providers: [VCSProviders] = Non
3838
"""
3939
limit_val = MAX_RECORDS_PER_PAGE_LIMIT if limit > MAX_RECORDS_PER_PAGE_LIMIT else limit
4040

41-
# Get latest scan timestamp
42-
last_scan_timestamp_sub_query = db_connection.query(func.max(model.DBscan.timestamp)) \
43-
.join(model.DBrepository, model.repository.DBrepository.id_ == model.scan.DBscan.repository_id) \
44-
.filter(model.DBscan.repository_id == model.DBrepository.id_).scalar_subquery()
41+
# Get the latest scan for repository
42+
repo_last_scan_sub_query = db_connection.query(model.DBscan.repository_id,
43+
func.max(model.DBscan.timestamp).label("max_timestamp"))
44+
repo_last_scan_sub_query = repo_last_scan_sub_query.group_by(model.DBscan.repository_id).subquery()
4545

4646
query = db_connection.query(
4747
model.DBrepository.id_,
@@ -52,12 +52,14 @@ def get_repositories(db_connection: Session, vcs_providers: [VCSProviders] = Non
5252
model.DBrepository.vcs_instance,
5353
model.DBVcsInstance.provider_type,
5454
func.coalesce(model.DBscan.id_, None).label('last_scan_id'),
55-
func.coalesce(model.DBscan.timestamp, None).label('last_scan_timestamp')) \
56-
.join(model.DBVcsInstance,
57-
model.vcs_instance.DBVcsInstance.id_ == model.repository.DBrepository.vcs_instance) \
58-
.outerjoin(model.DBscan,
59-
and_(model.scan.DBscan.repository_id == model.repository.DBrepository.id_,
60-
model.scan.DBscan.timestamp == last_scan_timestamp_sub_query))
55+
func.coalesce(model.DBscan.timestamp, None).label('last_scan_timestamp'))
56+
query = query.join(model.DBVcsInstance,
57+
model.vcs_instance.DBVcsInstance.id_ == model.repository.DBrepository.vcs_instance)
58+
query = query.join(repo_last_scan_sub_query,
59+
model.repository.DBrepository.id_ == repo_last_scan_sub_query.c.repository_id, isouter=True)
60+
query = query.join(model.DBscan,
61+
and_(model.scan.DBscan.repository_id == model.repository.DBrepository.id_,
62+
model.scan.DBscan.timestamp == repo_last_scan_sub_query.c.max_timestamp), isouter=True)
6163

6264
if only_if_has_findings:
6365
max_base_scan_subquery = db_connection.query(model.DBscan.repository_id,

components/resc-backend/src/resc_backend/resc_web_service/endpoints/repositories.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -369,10 +369,10 @@ def get_all_repositories_with_findings_metadata(
369369
def get_last_scan_for_repository(repository_id: int, db_connection: Session = Depends(get_db_connection)) \
370370
-> scan_schema.ScanRead:
371371
"""
372-
Retrieve the latest scan object related to a branch
372+
Retrieve the latest scan object related to a repository
373373
374374
- **db_connection**: Session of the database connection
375-
- **branch_id**: ID of the parent branch object for which scan objects to be retrieved
375+
- **repository_id**: ID of the parent repository object for which scan objects to be retrieved
376376
- **return**: ScanRead
377377
The output will contain a ScanRead type object,
378378
or empty if no scan was found
@@ -399,7 +399,7 @@ def get_scans_for_repository(repository_id: int, skip: int = Query(default=0, ge
399399
Retrieve all scan objects related to a repository paginated
400400
401401
- **db_connection**: Session of the database connection
402-
- **branch_id**: ID of the parent branch object for which scan objects to be retrieved
402+
- **repository_id**: ID of the parent repository object for which scan objects to be retrieved
403403
- **skip**: Integer amount of records to skip to support pagination
404404
- **limit**: Integer amount of records to return, to support pagination
405405
- **return**: [ScanRead]

0 commit comments

Comments
 (0)