Add scrapedDocumentsScanner interface and enhance document scanning logic
continuous-integration/drone/push Build is passing
continuous-integration/drone/push Build is passing
- Introduced the `scrapedDocumentsScanner` interface to facilitate scanning of scraped documents from MinIO, returning both procedure summaries and daily document counts. - Updated the `ListProceduresWithDocuments` method to utilize the new scanning functionality, improving data retrieval efficiency. - Enhanced the `scrapedDocumentsPerDay` method to filter daily counts based on a specified start date, ensuring accurate reporting of document statistics. - Added unit tests for the new scanning logic and daily counts filtering, ensuring robust functionality and error handling. This update enhances the dashboard's document management capabilities, providing better insights into scraped documents and their daily counts.
This commit is contained in:
@@ -570,12 +570,20 @@ func (s *StorageClient) ListDocuments(ctx context.Context, contractFolderID, not
|
||||
// ListProceduresWithDocuments scans MinIO for PROC_<contractFolderID>/…/documents/* keys
|
||||
// and returns one entry per contract folder id that has at least one document file.
|
||||
func (s *StorageClient) ListProceduresWithDocuments(ctx context.Context) ([]ProcedureDocumentsSummary, error) {
|
||||
s.logger.Debug("Listing procedure folders with documents from MinIO", map[string]interface{}{
|
||||
procedures, _, err := s.ScanScrapedDocuments(ctx)
|
||||
return procedures, err
|
||||
}
|
||||
|
||||
// ScanScrapedDocuments scans MinIO once and returns per-procedure summaries plus
|
||||
// daily document counts keyed by UTC date (YYYY-MM-DD).
|
||||
func (s *StorageClient) ScanScrapedDocuments(ctx context.Context) ([]ProcedureDocumentsSummary, map[string]int64, error) {
|
||||
s.logger.Debug("Scanning scraped documents from MinIO", map[string]interface{}{
|
||||
"bucket": s.config.MinioBucket,
|
||||
"prefix": procedurePrefix,
|
||||
})
|
||||
|
||||
byFolder := make(map[string]*ProcedureDocumentsSummary)
|
||||
dailyCounts := make(map[string]int64)
|
||||
var fatalErr error
|
||||
|
||||
appendFromPrefix := func(prefix string) bool {
|
||||
@@ -603,24 +611,28 @@ func (s *StorageClient) ListProceduresWithDocuments(ctx context.Context) ([]Proc
|
||||
byFolder[contractFolderID] = entry
|
||||
}
|
||||
entry.DocumentCount++
|
||||
modified := object.LastModified.Unix()
|
||||
modified := normalizeUnixSeconds(object.LastModified.Unix())
|
||||
if modified > entry.LatestModified {
|
||||
entry.LatestModified = modified
|
||||
}
|
||||
if modified > 0 {
|
||||
date := time.Unix(modified, 0).UTC().Format("2006-01-02")
|
||||
dailyCounts[date]++
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
if !appendFromPrefix(procedurePrefix) {
|
||||
return nil, fatalErr
|
||||
return nil, nil, fatalErr
|
||||
}
|
||||
if len(byFolder) == 0 {
|
||||
if !appendFromPrefix("") {
|
||||
return nil, fatalErr
|
||||
return nil, nil, fatalErr
|
||||
}
|
||||
}
|
||||
if fatalErr != nil {
|
||||
return nil, fatalErr
|
||||
return nil, nil, fatalErr
|
||||
}
|
||||
|
||||
results := make([]ProcedureDocumentsSummary, 0, len(byFolder))
|
||||
@@ -634,12 +646,19 @@ func (s *StorageClient) ListProceduresWithDocuments(ctx context.Context) ([]Proc
|
||||
return results[i].LatestModified > results[j].LatestModified
|
||||
})
|
||||
|
||||
s.logger.Info("Listed procedure folders with documents from storage", map[string]interface{}{
|
||||
"bucket": s.config.MinioBucket,
|
||||
s.logger.Info("Scanned scraped documents from storage", map[string]interface{}{
|
||||
"bucket": s.config.MinioBucket,
|
||||
"procedure_count": len(results),
|
||||
})
|
||||
|
||||
return results, nil
|
||||
return results, dailyCounts, nil
|
||||
}
|
||||
|
||||
func normalizeUnixSeconds(ts int64) int64 {
|
||||
if ts > 1_000_000_000_000 {
|
||||
return ts / 1000
|
||||
}
|
||||
return ts
|
||||
}
|
||||
|
||||
// contractFolderIDFromDocumentKey parses PROC_<contractFolderID>/<notice>/documents/<file>.
|
||||
|
||||
Reference in New Issue
Block a user