package store import ( "context" "encoding/json" "fmt" "github.com/google/uuid" "github.com/vasyakrg/dns-autoresolver/internal/diff" "github.com/vasyakrg/dns-autoresolver/internal/service" "github.com/vasyakrg/dns-autoresolver/internal/store/db" ) // LoadDomain joins domains+provider_accounts+templates to build the // service.DomainRef needed to check/apply a domain's DNS records. func (s *Store) LoadDomain(ctx context.Context, domainID uuid.UUID) (service.DomainRef, error) { row, err := s.q.LoadDomainFull(ctx, domainID) if err != nil { return service.DomainRef{}, err } if row.Doc == nil { return service.DomainRef{}, fmt.Errorf("store: domain %s has no template", domainID) } return service.DomainRef{ ZoneID: row.ZoneID, Provider: row.Provider, SecretEnc: row.SecretEnc, Template: *row.Doc, }, nil } // SaveCheckRun persists a summary of the changeset (counts of updates/prunes) // as a check_runs row. func (s *Store) SaveCheckRun(ctx context.Context, domainID uuid.UUID, cs diff.Changeset) error { summary := map[string]int{ "updates": len(cs.Updates()), "prunes": len(cs.Prunes()), } raw, err := json.Marshal(summary) if err != nil { return err } _, err = s.q.CreateCheckRun(ctx, db.CreateCheckRunParams{ ID: uuid.New(), DomainID: domainID, Result: raw, }) return err } // compile-time interface checks var _ service.Loader = (*Store)(nil) var _ service.Recorder = (*Store)(nil)