31 lines
864 B
Go
31 lines
864 B
Go
package clienttelemetry
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"time"
|
|
|
|
"telesrv/internal/domain"
|
|
"telesrv/internal/store"
|
|
)
|
|
|
|
type Service struct {
|
|
store store.ClientTelemetryStore
|
|
}
|
|
|
|
func NewService(telemetryStore store.ClientTelemetryStore) *Service {
|
|
return &Service{store: telemetryStore}
|
|
}
|
|
|
|
func (s *Service) Record(ctx context.Context, userID int64, kind domain.ClientTelemetryKind, peer domain.Peer, subjectIDs []int64, payload any, createdAt time.Time) (domain.ClientTelemetryEvent, bool, error) {
|
|
if s == nil || s.store == nil {
|
|
return domain.ClientTelemetryEvent{}, false, fmt.Errorf("client telemetry store is not configured")
|
|
}
|
|
event, err := domain.NewClientTelemetryEvent(
|
|
userID, kind, peer, subjectIDs, payload, createdAt,
|
|
)
|
|
if err != nil {
|
|
return domain.ClientTelemetryEvent{}, false, err
|
|
}
|
|
return s.store.CreateClientTelemetry(ctx, event)
|
|
}
|