prism/service/integration/signal/integration.go

71 lines
1.7 KiB
Go

package signal
import (
"context"
"database/sql"
"log/slog"
"net/http"
"prism/service/config"
"prism/service/notification"
"prism/service/util"
"github.com/go-chi/chi/v5"
)
type Integration struct {
cfg *config.Config
client *Client
handlers *Handlers
sender *Sender
tmpl *util.TemplateRenderer
logger *slog.Logger
}
func NewIntegration(cfg *config.Config, store *notification.Store, logger *slog.Logger, tmpl *util.TemplateRenderer) *Integration {
client := NewClient()
var sender *Sender
if client.IsEnabled() {
sender = NewSender(client, store, logger)
}
return &Integration{
cfg: cfg,
client: client,
sender: sender,
tmpl: tmpl,
logger: logger,
}
}
func (s *Integration) GetSender() *Sender {
return s.sender
}
func (s *Integration) RegisterRoutes(router *chi.Mux, auth func(http.Handler) http.Handler, db *sql.DB, apiKey string, logger *slog.Logger) {
s.handlers = RegisterRoutes(router, s.cfg, auth, s.tmpl, s.logger, s.client)
}
func (s *Integration) Start(ctx context.Context, logger *slog.Logger) {
if s.handlers != nil && s.handlers.IsEnabled() {
client := s.handlers.GetClient()
account, _ := client.GetLinkedAccount()
if account != nil {
logger.Info("Signal enabled", "status", "linked", "number", FormatPhoneNumber(account.Number))
} else {
logger.Info("Signal enabled", "status", "unlinked", "action", "visit admin UI to link")
}
} else {
logger.Info("Signal disabled", "reason", "signal-cli not found in PATH")
}
}
func (s *Integration) IsEnabled() bool {
if s.handlers == nil {
return false
}
return s.handlers.IsEnabled()
}
func (s *Integration) GetHandlers() *Handlers {
return s.handlers
}