Files
Assistant/adapters/postgres/self_repository.go
T

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
}