monorepo/cloud/maplepress-backend/internal/usecase/site/validate_domain.go

46 lines
1.1 KiB
Go

package site
import (
"context"
"go.uber.org/zap"
domainsite "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/domain/site"
)
// ValidateDomainUseCase checks if a domain is available for registration
type ValidateDomainUseCase struct {
repo domainsite.Repository
logger *zap.Logger
}
// ProvideValidateDomainUseCase creates a new ValidateDomainUseCase
func ProvideValidateDomainUseCase(
repo domainsite.Repository,
logger *zap.Logger,
) *ValidateDomainUseCase {
return &ValidateDomainUseCase{
repo: repo,
logger: logger,
}
}
// Execute validates if a domain can be used for a new site
func (uc *ValidateDomainUseCase) Execute(ctx context.Context, domain string) error {
// Check if domain already exists
exists, err := uc.repo.DomainExists(ctx, domain)
if err != nil {
uc.logger.Error("failed to check domain existence",
zap.String("domain", domain),
zap.Error(err))
return err
}
if exists {
uc.logger.Warn("domain already exists", zap.String("domain", domain))
return domainsite.ErrDomainAlreadyExists
}
uc.logger.Info("domain is available", zap.String("domain", domain))
return nil
}