fix media supply citation attribution
Desktop Client Build / Resolve Build Metadata (push) Successful in 26s
Frontend CI / Frontend (push) Successful in 2m53s
Backend CI / Backend (push) Successful in 16m37s
Desktop Client Build / Build Desktop Client (push) Successful in 23m40s
Desktop Client Build / Publish Client Artifacts to NAS (push) Successful in 28s

This commit is contained in:
2026-06-25 23:53:35 +08:00
parent 89ef95b65d
commit 6780963c28
16 changed files with 1033 additions and 457 deletions
@@ -2819,10 +2819,10 @@ func (s *MonitoringCallbackService) loadAliasResolutions(ctx context.Context, tx
normalized_url,
article_id,
publish_record_id,
'published_article' AS source_type,
article_id AS source_id,
1 AS source_priority,
registrable_domain,
'published_article' AS source_type,
article_id AS source_id,
2 AS source_priority,
registrable_domain,
site_key,
host,
last_path_segment,
@@ -2837,10 +2837,10 @@ func (s *MonitoringCallbackService) loadAliasResolutions(ctx context.Context, tx
normalized_url,
NULL AS article_id,
NULL AS publish_record_id,
'manual_mark' AS source_type,
id AS source_id,
2 AS source_priority,
registrable_domain,
'manual_mark' AS source_type,
id AS source_id,
3 AS source_priority,
registrable_domain,
site_key,
host,
last_path_segment,
@@ -2855,10 +2855,10 @@ func (s *MonitoringCallbackService) loadAliasResolutions(ctx context.Context, tx
normalized_url,
article_id,
publish_record_id,
source_type,
source_id,
source_priority,
registrable_domain,
source_type,
source_id,
source_priority,
registrable_domain,
site_key,
host,
last_path_segment,
@@ -2916,6 +2916,36 @@ func (s *MonitoringCallbackService) loadAliasResolutions(ctx context.Context, tx
return nil, response.ErrInternal(50041, "alias_scan_failed", "failed to iterate article aliases")
}
mediaAliases, err := loadMonitoringMediaSupplyPublishedAliases(ctx, s.businessPool, tenantID)
if err != nil {
return nil, err
}
for _, alias := range mediaAliases {
candidate := monitoringAliasCandidate{
NormalizedURL: alias.NormalizedURL,
SourceType: strings.TrimSpace(alias.SourceType),
SourcePriority: alias.SourcePriority,
TitleKey: normalizeMonitoringAliasTitle(alias.ArticleTitle),
MatchKeys: monitoringCitationCandidateKeys(alias.OriginalURL, alias.NormalizedURL),
}
if alias.ArticleID > 0 {
value := alias.ArticleID
candidate.ArticleID = &value
}
if alias.SourceID > 0 {
value := alias.SourceID
candidate.SourceID = &value
}
if lastPathSegment := monitoringAliasLastPathSegment(alias.NormalizedURL); lastPathSegment != nil {
candidate.LastPathSegment = strings.TrimSpace(*lastPathSegment)
}
host, registrableDomain, _, _ := deriveCitationURLParts(alias.OriginalURL, alias.NormalizedURL)
candidate.Host = strings.ToLower(strings.TrimSpace(host))
candidate.RegistrableDomain = strings.ToLower(strings.TrimSpace(registrableDomain))
candidate.SiteKey = candidate.RegistrableDomain
candidates = append(candidates, candidate)
}
for _, input := range lookupInputs {
bestScore := -1
bestAmbiguous := false