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 } type ChatAdapter interface { GenerateStructured(ctx context.Context, messages []chatter.Message, target interface{}) error GetProviderName() string }