monorepo/cloud/maplefile-backend/internal/service/ipanonymization/anonymize_old_ips.go

99 lines
3.3 KiB
Go

package ipanonymization
import (
"context"
"time"
"go.uber.org/zap"
"codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/config"
uc_collection "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/collection"
uc_filemetadata "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/filemetadata"
uc_user "codeberg.org/mapleopentech/monorepo/cloud/maplefile-backend/internal/usecase/user"
)
// AnonymizeOldIPsService handles the business logic for anonymizing old IP addresses
type AnonymizeOldIPsService interface {
Execute(ctx context.Context) error
}
type anonymizeOldIPsServiceImpl struct {
config *config.Config
logger *zap.Logger
userAnonymizeUseCase uc_user.AnonymizeOldIPsUseCase
collectionAnonymizeUseCase uc_collection.AnonymizeOldIPsUseCase
fileMetadataAnonymizeUseCase uc_filemetadata.AnonymizeOldIPsUseCase
}
// NewAnonymizeOldIPsService creates a new service for anonymizing old IP addresses
func NewAnonymizeOldIPsService(
cfg *config.Config,
logger *zap.Logger,
userAnonymizeUseCase uc_user.AnonymizeOldIPsUseCase,
collectionAnonymizeUseCase uc_collection.AnonymizeOldIPsUseCase,
fileMetadataAnonymizeUseCase uc_filemetadata.AnonymizeOldIPsUseCase,
) AnonymizeOldIPsService {
logger = logger.Named("AnonymizeOldIPsService")
return &anonymizeOldIPsServiceImpl{
config: cfg,
logger: logger,
userAnonymizeUseCase: userAnonymizeUseCase,
collectionAnonymizeUseCase: collectionAnonymizeUseCase,
fileMetadataAnonymizeUseCase: fileMetadataAnonymizeUseCase,
}
}
// Execute runs the IP anonymization process for all tables
func (s *anonymizeOldIPsServiceImpl) Execute(ctx context.Context) error {
if !s.config.Security.IPAnonymizationEnabled {
s.logger.Info("IP anonymization is disabled, skipping")
return nil
}
retentionDays := s.config.Security.IPAnonymizationRetentionDays
cutoffDate := time.Now().AddDate(0, 0, -retentionDays)
s.logger.Info("Starting IP anonymization process",
zap.Int("retention_days", retentionDays),
zap.Time("cutoff_date", cutoffDate))
totalAnonymized := 0
// Anonymize user tables using use-case
userCount, err := s.userAnonymizeUseCase.Execute(ctx, cutoffDate)
if err != nil {
s.logger.Error("Failed to anonymize user tables",
zap.Error(err),
zap.Int("records_anonymized_before_error", totalAnonymized))
return err
}
totalAnonymized += userCount
// Anonymize collection tables using use-case
collectionCount, err := s.collectionAnonymizeUseCase.Execute(ctx, cutoffDate)
if err != nil {
s.logger.Error("Failed to anonymize collection tables",
zap.Error(err),
zap.Int("records_anonymized_before_error", totalAnonymized))
return err
}
totalAnonymized += collectionCount
// Anonymize file tables using use-case
fileCount, err := s.fileMetadataAnonymizeUseCase.Execute(ctx, cutoffDate)
if err != nil {
s.logger.Error("Failed to anonymize file tables",
zap.Error(err),
zap.Int("records_anonymized_before_error", totalAnonymized))
return err
}
totalAnonymized += fileCount
s.logger.Info("IP anonymization process completed successfully",
zap.Int("total_rows_anonymized", totalAnonymized),
zap.Int("user_rows", userCount),
zap.Int("collection_rows", collectionCount),
zap.Int("file_rows", fileCount))
return nil
}