28 lines
911 B
Go
28 lines
911 B
Go
package application
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.cin.su/m/Assistant/contracts/epistemics"
|
|
domain "git.cin.su/m/Assistant/modules/epistemics/domain"
|
|
)
|
|
|
|
// ReadOnlyConnector is the only integration point for web/repository sources.
|
|
// Implementations return immutable evidence; they cannot persist claims.
|
|
type ReadOnlyConnector interface {
|
|
Collect(context.Context, epistemics.ResearchPlan) ([]epistemics.ResearchCandidate, error)
|
|
}
|
|
|
|
type ResearchService struct{ Connector ReadOnlyConnector }
|
|
|
|
func (s ResearchService) Evaluate(ctx context.Context, plan epistemics.ResearchPlan, nowUnixMillis int64) (epistemics.ResearchResult, error) {
|
|
if s.Connector == nil {
|
|
return epistemics.ResearchResult{}, domain.ErrNoResearchEvidence
|
|
}
|
|
candidates, err := s.Connector.Collect(ctx, plan)
|
|
if err != nil {
|
|
return epistemics.ResearchResult{}, err
|
|
}
|
|
return domain.EvaluateResearch(plan, candidates, nowUnixMillis)
|
|
}
|