package pierre import ( "context" "io" "git.schreifuchs.ch/schreifuchs/pierre-bot/internal/chatter" ) // Service holds the core collaborators and configuration for Pierre. // The order of the fields is intentional: configuration fields first (used // during initialization) followed by the adapters. This prevents accidental // changes to the serialized layout if encoding/gob or encoding/json is used // elsewhere in the future. type Service struct { maxChunkSize int guidelines []string disableComments bool git GitAdapter chat ChatAdapter } func New(chat ChatAdapter, git GitAdapter, maxChunkSize int, guidelines []string, disableComments bool) *Service { return &Service{ git: git, chat: chat, maxChunkSize: maxChunkSize, guidelines: guidelines, disableComments: disableComments, } } type GitAdapter interface { GetDiff(ctx context.Context, owner, repo string, prID int) (io.ReadCloser, error) AddComment(ctx context.Context, owner, repo string, prID int, comment Comment) error GetFileContent(ctx context.Context, owner, repo, path, ref string) (string, error) GetPRHeadSHA(ctx context.Context, owner, repo string, prID int) (string, error) } type ChatAdapter interface { GenerateStructured(ctx context.Context, messages []chatter.Message, target interface{}) error GetProviderName() string }