Initial commit: Open sourcing all of the Maple Open Technologies code.

This commit is contained in:
Bartlomiej Mika 2025-12-02 14:33:08 -05:00
commit 755d54a99d
2010 changed files with 448675 additions and 0 deletions

View file

@ -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
}