Initial commit: Open sourcing all of the Maple Open Technologies code.
This commit is contained in:
commit
755d54a99d
2010 changed files with 448675 additions and 0 deletions
|
|
@ -0,0 +1,77 @@
|
|||
package page
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/gocql/gocql"
|
||||
"go.uber.org/zap"
|
||||
|
||||
domainpage "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/domain/page"
|
||||
)
|
||||
|
||||
// GetPageStatisticsUseCase retrieves page count statistics
|
||||
type GetPageStatisticsUseCase struct {
|
||||
pageRepo domainpage.Repository
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
// ProvideGetPageStatisticsUseCase creates a new GetPageStatisticsUseCase
|
||||
func ProvideGetPageStatisticsUseCase(
|
||||
pageRepo domainpage.Repository,
|
||||
logger *zap.Logger,
|
||||
) *GetPageStatisticsUseCase {
|
||||
return &GetPageStatisticsUseCase{
|
||||
pageRepo: pageRepo,
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
// PageStatistics contains page count statistics
|
||||
type PageStatistics struct {
|
||||
TotalPages int64
|
||||
PublishedPages int64
|
||||
DraftPages int64
|
||||
}
|
||||
|
||||
// Execute retrieves page statistics for a site
|
||||
func (uc *GetPageStatisticsUseCase) Execute(
|
||||
ctx context.Context,
|
||||
siteID gocql.UUID,
|
||||
) (*PageStatistics, error) {
|
||||
// Count total pages in database
|
||||
totalPages, err := uc.pageRepo.CountBySiteID(ctx, siteID)
|
||||
if err != nil {
|
||||
uc.logger.Error("failed to count pages", zap.Error(err))
|
||||
return nil, fmt.Errorf("failed to count pages: %w", err)
|
||||
}
|
||||
|
||||
// Get all pages to count by status (this could be optimized with a dedicated query)
|
||||
pages, err := uc.pageRepo.GetBySiteID(ctx, siteID)
|
||||
if err != nil {
|
||||
uc.logger.Error("failed to get pages", zap.Error(err))
|
||||
return nil, fmt.Errorf("failed to get pages: %w", err)
|
||||
}
|
||||
|
||||
// Count pages by status
|
||||
var publishedPages, draftPages int64
|
||||
for _, page := range pages {
|
||||
if page.Status == "publish" {
|
||||
publishedPages++
|
||||
} else if page.Status == "draft" {
|
||||
draftPages++
|
||||
}
|
||||
}
|
||||
|
||||
uc.logger.Info("page statistics retrieved",
|
||||
zap.String("site_id", siteID.String()),
|
||||
zap.Int64("total", totalPages),
|
||||
zap.Int64("published", publishedPages),
|
||||
zap.Int64("draft", draftPages))
|
||||
|
||||
return &PageStatistics{
|
||||
TotalPages: totalPages,
|
||||
PublishedPages: publishedPages,
|
||||
DraftPages: draftPages,
|
||||
}, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue