Files
gobeyhan/app/blog/services/category_view_service.go
Beyhan Oğur f34e54c5a5 first commit
2026-04-26 21:43:40 +03:00

68 lines
1.7 KiB
Go

package services
import (
"gobeyhan/database"
"gobeyhan/database/models"
)
type CategoryViewService struct{}
func NewCategoryViewService() *CategoryViewService {
return &CategoryViewService{}
}
// TrackCategoryView records a category view
func (s *CategoryViewService) TrackCategoryView(categoryID uint64, ipAddress, userAgent string) error {
view := &models.CategoryView{
CategoryID: categoryID,
IPAddress: ipAddress,
UserAgent: userAgent,
}
return database.DB.Create(view).Error
}
// GetCategoryViewCount gets total view count for a category
func (s *CategoryViewService) GetCategoryViewCount(categoryID uint64) (int64, error) {
var count int64
err := database.DB.Model(&models.CategoryView{}).
Where("category_id = ?", categoryID).
Count(&count).Error
return count, err
}
// GetAllCategoryViews gets all views for a category with pagination
func (s *CategoryViewService) GetAllCategoryViews(page, limit int) ([]models.CategoryView, int64, error) {
var views []models.CategoryView
var total int64
query := database.DB.Preload("Category")
query.Model(&models.CategoryView{}).Count(&total)
err := query.
Offset((page - 1) * limit).
Limit(limit).
Order("created_at DESC").
Find(&views).Error
return views, total, err
}
// GetViewsByCategory gets views for a specific category
func (s *CategoryViewService) GetViewsByCategory(categoryID uint64, page, limit int) ([]models.CategoryView, int64, error) {
var views []models.CategoryView
var total int64
query := database.DB.Where("category_id = ?", categoryID)
query.Model(&models.CategoryView{}).Count(&total)
err := query.
Offset((page - 1) * limit).
Limit(limit).
Order("created_at DESC").
Find(&views).Error
return views, total, err
}