37 lines
1.4 KiB
Go
37 lines
1.4 KiB
Go
package domain
|
|
|
|
import (
|
|
"errors"
|
|
"git.cin.su/m/Assistant/contracts/epistemics"
|
|
"git.cin.su/m/Assistant/platform/ids"
|
|
"strings"
|
|
)
|
|
|
|
var ErrInvalidKnowledge = errors.New("invalid epistemic knowledge record")
|
|
|
|
func ValidateProposition(value epistemics.Proposition) error {
|
|
if value.ID == "" || value.Kind == "" || strings.TrimSpace(value.SubjectRef) == "" || (value.ObjectValue == "" && value.ObjectRef == "" && value.TextFallback == "") {
|
|
return ErrInvalidKnowledge
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func ValidateBeliefAssessment(value epistemics.BeliefAssessment) error {
|
|
if value.ID == "" || value.ClaimID == "" || !value.Revision.Valid() || value.State == "" || value.ConfidenceMillis < 0 || value.ConfidenceMillis > 1000 || value.AssessedAtUnixMillis < 1 {
|
|
return ErrInvalidKnowledge
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func NewBeliefAssessment(claim epistemics.ClaimID, confidence int64, state epistemics.BeliefAssessmentState, evidence []epistemics.EvidenceRef, at int64) (epistemics.BeliefAssessment, error) {
|
|
id, err := ids.New()
|
|
if err != nil {
|
|
return epistemics.BeliefAssessment{}, err
|
|
}
|
|
value := epistemics.BeliefAssessment{ID: id, ClaimID: claim, Revision: ids.InitialRevision, State: state, ConfidenceMillis: confidence, EvidenceRefs: append([]epistemics.EvidenceRef(nil), evidence...), AssessedAtUnixMillis: at}
|
|
if err := ValidateBeliefAssessment(value); err != nil {
|
|
return epistemics.BeliefAssessment{}, err
|
|
}
|
|
return value, nil
|
|
}
|