80 lines
2.8 KiB
Go
80 lines
2.8 KiB
Go
package postgres
|
|
|
|
import (
|
|
"context"
|
|
"encoding/json"
|
|
|
|
selfcontract "git.cin.su/m/Assistant/contracts/self"
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
)
|
|
|
|
// SelfRepository persists only SELF-owned derived assessments and ledger
|
|
// evidence. It never evaluates, promotes or changes Capability state.
|
|
type SelfRepository struct{ pool *pgxpool.Pool }
|
|
|
|
func OpenSelf(ctx context.Context, config ContinuityConfig) (*SelfRepository, error) {
|
|
pool, err := openPool(ctx, config)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return &SelfRepository{pool: pool}, nil
|
|
}
|
|
|
|
func (r *SelfRepository) Close() { r.pool.Close() }
|
|
|
|
func (r *SelfRepository) SaveImprovementNeed(ctx context.Context, value selfcontract.ImprovementNeed) error {
|
|
subject, err := json.Marshal(value.SubjectRef)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
evidence, err := json.Marshal(value.EvidenceRefs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = r.pool.Exec(ctx, `INSERT INTO self.improvement_needs(improvement_need_id,principal_id,subject_ref,problem_summary,evidence_refs,expected_benefit,priority,state,created_at_unix_millis)
|
|
VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9) ON CONFLICT DO NOTHING`, value.ID, value.PrincipalID, subject, value.ProblemSummary, evidence, value.ExpectedBenefit, value.Priority, value.State, value.CreatedAt)
|
|
return err
|
|
}
|
|
|
|
func (r *SelfRepository) SaveLearningLedger(ctx context.Context, value selfcontract.LearningLedgerEntry) error {
|
|
evidence, err := json.Marshal(value.EvidenceRefs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
improvement, err := json.Marshal(value.ImprovementNeedRef)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
proposed, err := json.Marshal(value.ProposedChangeRef)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
evaluations, err := json.Marshal(value.ActualEvaluationRefs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
gate, err := json.Marshal(value.DevelopmentGateRef)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
before, err := json.Marshal(value.BeforeVersionRefs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
after, err := json.Marshal(value.AfterVersionRefs)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
sideEffects, err := json.Marshal(value.SideEffects)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
rollback, err := json.Marshal(value.RollbackRef)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = r.pool.Exec(ctx, `INSERT INTO self.learning_ledger(entry_id,principal_id,improvement_need_ref,observed_problem,evidence_refs,diagnosis,hypothesis,proposed_change_ref,expected_improvement,evaluation_refs,development_gate_ref,before_version_refs,after_version_refs,decision,side_effects,rollback_ref,recorded_at_unix_millis)
|
|
VALUES($1,$2,$3,$4,$5,$6,$7,$8,$9,$10,$11,$12,$13,$14,$15,$16,$17) ON CONFLICT DO NOTHING`, value.ID, value.PrincipalID, improvement, value.ObservedProblem, evidence, value.Diagnosis, value.Hypothesis, proposed, value.ExpectedImprovement, evaluations, gate, before, after, value.Decision, sideEffects, rollback, value.RecordedAt)
|
|
return err
|
|
}
|