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 }