Skip to content
quarry Artifact [034ff83f2b]
Login

Artifact [034ff83f2b]

Artifact 034ff83f2b0b62f0d3522ff7ff250e4d779292a8ca30589878af6dd2390403a6:


package main

import (
	"errors"

	"craftdesign.group/quarry/internal/api"
	"craftdesign.group/quarry/internal/oltp"
)

// signOffStore adapts the forge database's sign-off rows to the API's
// own type, which is the same record under the package that names it.
type signOffStore struct{ db *oltp.DB }

func toAPISignOff(s oltp.SignOff) api.SignOffRequest { return api.SignOffRequest(s) }

func (s signOffStore) RequestSignOff(r api.SignOffRequest) (api.SignOffRequest, error) {
	out, err := s.db.RequestSignOff(oltp.SignOff(r))
	if errors.Is(err, oltp.ErrTooManySignOffs) {
		err = api.ErrTooManySignOffs
	}
	return toAPISignOff(out), err
}

func (s signOffStore) SignOffsFor(owner string, limit int) ([]api.SignOffRequest, error) {
	rows, err := s.db.SignOffsFor(owner, limit)
	out := make([]api.SignOffRequest, 0, len(rows))
	for _, r := range rows {
		out = append(out, toAPISignOff(r))
	}
	return out, err
}

func (s signOffStore) SignOffByID(id string) (api.SignOffRequest, bool, error) {
	r, ok, err := s.db.SignOffByID(id)
	return toAPISignOff(r), ok, err
}

func (s signOffStore) DecideSignOff(id, owner string, approve bool) (api.SignOffRequest, error) {
	r, err := s.db.DecideSignOff(id, owner, approve)
	return toAPISignOff(r), err
}

func (s signOffStore) FailSignOff(id, why string) error { return s.db.FailSignOff(id, why) }

func (s signOffStore) FinishSignOff(id, result, secret string) error {
	return s.db.FinishSignOff(id, result, secret)
}

func (s signOffStore) TakeSignOffSecret(id, agent string) (string, error) {
	return s.db.TakeSignOffSecret(id, agent)
}