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
92
cloud/maplepress-backend/internal/service/tenant/create.go
Normal file
92
cloud/maplepress-backend/internal/service/tenant/create.go
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
package tenant
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"go.uber.org/zap"
|
||||
|
||||
tenantusecase "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/usecase/tenant"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/pkg/logger"
|
||||
)
|
||||
|
||||
// CreateTenantService handles tenant creation operations
|
||||
type CreateTenantService interface {
|
||||
CreateTenant(ctx context.Context, input *tenantusecase.CreateTenantInput) (*tenantusecase.CreateTenantOutput, error)
|
||||
}
|
||||
|
||||
type createTenantService struct {
|
||||
// Focused usecases
|
||||
validateSlugUC *tenantusecase.ValidateTenantSlugUniqueUseCase
|
||||
createEntityUC *tenantusecase.CreateTenantEntityUseCase
|
||||
saveTenantToRepoUC *tenantusecase.SaveTenantToRepoUseCase
|
||||
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
// NewCreateTenantService creates a new CreateTenantService
|
||||
func NewCreateTenantService(
|
||||
validateSlugUC *tenantusecase.ValidateTenantSlugUniqueUseCase,
|
||||
createEntityUC *tenantusecase.CreateTenantEntityUseCase,
|
||||
saveTenantToRepoUC *tenantusecase.SaveTenantToRepoUseCase,
|
||||
logger *zap.Logger,
|
||||
) CreateTenantService {
|
||||
return &createTenantService{
|
||||
validateSlugUC: validateSlugUC,
|
||||
createEntityUC: createEntityUC,
|
||||
saveTenantToRepoUC: saveTenantToRepoUC,
|
||||
logger: logger.Named("create-tenant-service"),
|
||||
}
|
||||
}
|
||||
|
||||
// CreateTenant orchestrates the tenant creation workflow
|
||||
func (s *createTenantService) CreateTenant(ctx context.Context, input *tenantusecase.CreateTenantInput) (*tenantusecase.CreateTenantOutput, error) {
|
||||
// CWE-532: Use redacted tenant slug for logging
|
||||
s.logger.Info("creating tenant",
|
||||
logger.TenantSlugHash(input.Slug),
|
||||
logger.SafeTenantSlug("tenant_slug_redacted", input.Slug),
|
||||
zap.String("name", input.Name))
|
||||
|
||||
// Step 1: Validate slug uniqueness (fail fast)
|
||||
if err := s.validateSlugUC.Execute(ctx, input.Slug); err != nil {
|
||||
// CWE-532: Use redacted tenant slug for logging
|
||||
s.logger.Error("slug validation failed",
|
||||
logger.TenantSlugHash(input.Slug),
|
||||
logger.SafeTenantSlug("tenant_slug_redacted", input.Slug),
|
||||
zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Step 2: Create and validate tenant entity
|
||||
tenant, err := s.createEntityUC.Execute(input)
|
||||
if err != nil {
|
||||
// CWE-532: Use redacted tenant slug for logging
|
||||
s.logger.Error("entity creation failed",
|
||||
logger.TenantSlugHash(input.Slug),
|
||||
logger.SafeTenantSlug("tenant_slug_redacted", input.Slug),
|
||||
zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Step 3: Save tenant to repository
|
||||
if err := s.saveTenantToRepoUC.Execute(ctx, tenant); err != nil {
|
||||
s.logger.Error("failed to save tenant",
|
||||
zap.String("tenant_id", tenant.ID),
|
||||
zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// CWE-532: Use redacted tenant slug for logging
|
||||
s.logger.Info("tenant created successfully",
|
||||
zap.String("tenant_id", tenant.ID),
|
||||
logger.TenantSlugHash(tenant.Slug),
|
||||
logger.SafeTenantSlug("tenant_slug_redacted", tenant.Slug))
|
||||
|
||||
// Step 4: Build output
|
||||
return &tenantusecase.CreateTenantOutput{
|
||||
ID: tenant.ID,
|
||||
Name: tenant.Name,
|
||||
Slug: tenant.Slug,
|
||||
Status: string(tenant.Status),
|
||||
CreatedAt: tenant.CreatedAt,
|
||||
}, nil
|
||||
}
|
||||
41
cloud/maplepress-backend/internal/service/tenant/get.go
Normal file
41
cloud/maplepress-backend/internal/service/tenant/get.go
Normal file
|
|
@ -0,0 +1,41 @@
|
|||
package tenant
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"go.uber.org/zap"
|
||||
|
||||
tenantusecase "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/usecase/tenant"
|
||||
)
|
||||
|
||||
// GetTenantService handles getting tenant information
|
||||
type GetTenantService interface {
|
||||
GetTenant(ctx context.Context, input *tenantusecase.GetTenantInput) (*tenantusecase.GetTenantOutput, error)
|
||||
GetTenantBySlug(ctx context.Context, input *tenantusecase.GetTenantBySlugInput) (*tenantusecase.GetTenantOutput, error)
|
||||
}
|
||||
|
||||
type getTenantService struct {
|
||||
getUC *tenantusecase.GetTenantUseCase
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
// NewGetTenantService creates a new GetTenantService
|
||||
func NewGetTenantService(
|
||||
getUC *tenantusecase.GetTenantUseCase,
|
||||
logger *zap.Logger,
|
||||
) GetTenantService {
|
||||
return &getTenantService{
|
||||
getUC: getUC,
|
||||
logger: logger.Named("get-tenant-service"),
|
||||
}
|
||||
}
|
||||
|
||||
// GetTenant retrieves a tenant by ID
|
||||
func (s *getTenantService) GetTenant(ctx context.Context, input *tenantusecase.GetTenantInput) (*tenantusecase.GetTenantOutput, error) {
|
||||
return s.getUC.Execute(ctx, input)
|
||||
}
|
||||
|
||||
// GetTenantBySlug retrieves a tenant by slug
|
||||
func (s *getTenantService) GetTenantBySlug(ctx context.Context, input *tenantusecase.GetTenantBySlugInput) (*tenantusecase.GetTenantOutput, error) {
|
||||
return s.getUC.ExecuteBySlug(ctx, input)
|
||||
}
|
||||
30
cloud/maplepress-backend/internal/service/tenant/provider.go
Normal file
30
cloud/maplepress-backend/internal/service/tenant/provider.go
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
package tenant
|
||||
|
||||
import (
|
||||
"go.uber.org/zap"
|
||||
|
||||
tenantusecase "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/usecase/tenant"
|
||||
)
|
||||
|
||||
// ProvideCreateTenantService creates a new CreateTenantService for dependency injection
|
||||
func ProvideCreateTenantService(
|
||||
validateSlugUC *tenantusecase.ValidateTenantSlugUniqueUseCase,
|
||||
createEntityUC *tenantusecase.CreateTenantEntityUseCase,
|
||||
saveTenantToRepoUC *tenantusecase.SaveTenantToRepoUseCase,
|
||||
logger *zap.Logger,
|
||||
) CreateTenantService {
|
||||
return NewCreateTenantService(
|
||||
validateSlugUC,
|
||||
createEntityUC,
|
||||
saveTenantToRepoUC,
|
||||
logger,
|
||||
)
|
||||
}
|
||||
|
||||
// ProvideGetTenantService creates a new GetTenantService for dependency injection
|
||||
func ProvideGetTenantService(
|
||||
getUC *tenantusecase.GetTenantUseCase,
|
||||
logger *zap.Logger,
|
||||
) GetTenantService {
|
||||
return NewGetTenantService(getUC, logger)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue