57 lines
1.4 KiB
Go
57 lines
1.4 KiB
Go
package page
|
|
|
|
import (
|
|
"github.com/gocql/gocql"
|
|
"go.uber.org/zap"
|
|
|
|
domainpage "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/domain/page"
|
|
"codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/pkg/security/ipcrypt"
|
|
)
|
|
|
|
// CreatePageEntityUseCase creates a domain page entity from input
|
|
type CreatePageEntityUseCase struct {
|
|
ipEncryptor *ipcrypt.IPEncryptor
|
|
logger *zap.Logger
|
|
}
|
|
|
|
// ProvideCreatePageEntityUseCase creates a new CreatePageEntityUseCase
|
|
func ProvideCreatePageEntityUseCase(
|
|
ipEncryptor *ipcrypt.IPEncryptor,
|
|
logger *zap.Logger,
|
|
) *CreatePageEntityUseCase {
|
|
return &CreatePageEntityUseCase{
|
|
ipEncryptor: ipEncryptor,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
// Execute converts SyncPageInput to a domain Page entity
|
|
func (uc *CreatePageEntityUseCase) Execute(
|
|
siteID, tenantID gocql.UUID,
|
|
input SyncPageInput,
|
|
) (*domainpage.Page, error) {
|
|
// Encrypt IP address (CWE-359: GDPR compliance)
|
|
encryptedIP, err := uc.ipEncryptor.Encrypt(input.IPAddress)
|
|
if err != nil {
|
|
uc.logger.Error("failed to encrypt IP address",
|
|
zap.String("page_id", input.PageID),
|
|
zap.Error(err))
|
|
return nil, err
|
|
}
|
|
|
|
return domainpage.NewPage(
|
|
siteID,
|
|
tenantID,
|
|
input.PageID,
|
|
input.Title,
|
|
input.Content,
|
|
input.Excerpt,
|
|
input.URL,
|
|
input.Status,
|
|
input.PostType,
|
|
input.Author,
|
|
input.PublishedAt,
|
|
input.ModifiedAt,
|
|
encryptedIP,
|
|
), nil
|
|
}
|