tercul-backend/internal/app/analytics/service.go
google-labs-jules[bot] 05bf1fbb05 feat: Implement analytics features
This commit introduces analytics features to the application. It includes:
- Extended domain models for storing analytics data.
- An analytics repository and service for managing the data.
- Integration with GraphQL mutations to update analytics counts.
- New GraphQL queries to expose analytics data.
- Unit and integration tests for the new features.
2025-09-07 16:43:15 +00:00

78 lines
2.8 KiB
Go

package analytics
import (
"context"
"tercul/internal/domain"
)
type Service interface {
IncrementWorkViews(ctx context.Context, workID uint) error
IncrementWorkLikes(ctx context.Context, workID uint) error
IncrementWorkComments(ctx context.Context, workID uint) error
IncrementWorkBookmarks(ctx context.Context, workID uint) error
IncrementWorkShares(ctx context.Context, workID uint) error
IncrementWorkTranslationCount(ctx context.Context, workID uint) error
IncrementTranslationViews(ctx context.Context, translationID uint) error
IncrementTranslationLikes(ctx context.Context, translationID uint) error
IncrementTranslationComments(ctx context.Context, translationID uint) error
IncrementTranslationShares(ctx context.Context, translationID uint) error
GetOrCreateWorkStats(ctx context.Context, workID uint) (*domain.WorkStats, error)
GetOrCreateTranslationStats(ctx context.Context, translationID uint) (*domain.TranslationStats, error)
}
type service struct {
repo domain.AnalyticsRepository
}
func NewService(repo domain.AnalyticsRepository) Service {
return &service{repo: repo}
}
func (s *service) IncrementWorkViews(ctx context.Context, workID uint) error {
return s.repo.IncrementWorkViews(ctx, workID)
}
func (s *service) IncrementWorkLikes(ctx context.Context, workID uint) error {
return s.repo.IncrementWorkLikes(ctx, workID)
}
func (s *service) IncrementWorkComments(ctx context.Context, workID uint) error {
return s.repo.IncrementWorkComments(ctx, workID)
}
func (s *service) IncrementWorkBookmarks(ctx context.Context, workID uint) error {
return s.repo.IncrementWorkBookmarks(ctx, workID)
}
func (s *service) IncrementWorkShares(ctx context.Context, workID uint) error {
return s.repo.IncrementWorkShares(ctx, workID)
}
func (s *service) IncrementWorkTranslationCount(ctx context.Context, workID uint) error {
return s.repo.IncrementWorkTranslationCount(ctx, workID)
}
func (s *service) IncrementTranslationViews(ctx context.Context, translationID uint) error {
return s.repo.IncrementTranslationViews(ctx, translationID)
}
func (s *service) IncrementTranslationLikes(ctx context.Context, translationID uint) error {
return s.repo.IncrementTranslationLikes(ctx, translationID)
}
func (s *service) IncrementTranslationComments(ctx context.Context, translationID uint) error {
return s.repo.IncrementTranslationComments(ctx, translationID)
}
func (s *service) IncrementTranslationShares(ctx context.Context, translationID uint) error {
return s.repo.IncrementTranslationShares(ctx, translationID)
}
func (s *service) GetOrCreateWorkStats(ctx context.Context, workID uint) (*domain.WorkStats, error) {
return s.repo.GetOrCreateWorkStats(ctx, workID)
}
func (s *service) GetOrCreateTranslationStats(ctx context.Context, translationID uint) (*domain.TranslationStats, error) {
return s.repo.GetOrCreateTranslationStats(ctx, translationID)
}