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
91
cloud/maplepress-backend/internal/service/user/create.go
Normal file
91
cloud/maplepress-backend/internal/service/user/create.go
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
package user
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"go.uber.org/zap"
|
||||
|
||||
userusecase "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/usecase/user"
|
||||
"codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/pkg/logger"
|
||||
)
|
||||
|
||||
// CreateUserService handles user creation operations
|
||||
type CreateUserService interface {
|
||||
CreateUser(ctx context.Context, tenantID string, input *userusecase.CreateUserInput) (*userusecase.CreateUserOutput, error)
|
||||
}
|
||||
|
||||
type createUserService struct {
|
||||
// Focused usecases
|
||||
validateEmailUC *userusecase.ValidateUserEmailUniqueUseCase
|
||||
createEntityUC *userusecase.CreateUserEntityUseCase
|
||||
saveUserToRepoUC *userusecase.SaveUserToRepoUseCase
|
||||
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
// NewCreateUserService creates a new CreateUserService
|
||||
func NewCreateUserService(
|
||||
validateEmailUC *userusecase.ValidateUserEmailUniqueUseCase,
|
||||
createEntityUC *userusecase.CreateUserEntityUseCase,
|
||||
saveUserToRepoUC *userusecase.SaveUserToRepoUseCase,
|
||||
logger *zap.Logger,
|
||||
) CreateUserService {
|
||||
return &createUserService{
|
||||
validateEmailUC: validateEmailUC,
|
||||
createEntityUC: createEntityUC,
|
||||
saveUserToRepoUC: saveUserToRepoUC,
|
||||
logger: logger.Named("create-user-service"),
|
||||
}
|
||||
}
|
||||
|
||||
// CreateUser orchestrates the user creation workflow
|
||||
func (s *createUserService) CreateUser(ctx context.Context, tenantID string, input *userusecase.CreateUserInput) (*userusecase.CreateUserOutput, error) {
|
||||
// CWE-532: Use redacted email for logging
|
||||
s.logger.Info("creating user",
|
||||
zap.String("tenant_id", tenantID),
|
||||
logger.EmailHash(input.Email),
|
||||
logger.SafeEmail("email_redacted", input.Email))
|
||||
|
||||
// Step 1: Validate email uniqueness (fail fast)
|
||||
if err := s.validateEmailUC.Execute(ctx, tenantID, input.Email); err != nil {
|
||||
// CWE-532: Use redacted email for logging
|
||||
s.logger.Error("email validation failed",
|
||||
logger.EmailHash(input.Email),
|
||||
logger.SafeEmail("email_redacted", input.Email),
|
||||
zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Step 2: Create and validate user entity
|
||||
user, err := s.createEntityUC.Execute(tenantID, input)
|
||||
if err != nil {
|
||||
// CWE-532: Use redacted email for logging
|
||||
s.logger.Error("entity creation failed",
|
||||
logger.EmailHash(input.Email),
|
||||
logger.SafeEmail("email_redacted", input.Email),
|
||||
zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Step 3: Save user to repository
|
||||
if err := s.saveUserToRepoUC.Execute(ctx, tenantID, user); err != nil {
|
||||
s.logger.Error("failed to save user",
|
||||
zap.String("user_id", user.ID),
|
||||
zap.Error(err))
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// CWE-532: Use redacted email for logging
|
||||
s.logger.Info("user created successfully",
|
||||
zap.String("user_id", user.ID),
|
||||
logger.EmailHash(user.Email),
|
||||
logger.SafeEmail("email_redacted", user.Email))
|
||||
|
||||
// Step 4: Build output
|
||||
return &userusecase.CreateUserOutput{
|
||||
ID: user.ID,
|
||||
Email: user.Email,
|
||||
Name: user.Name,
|
||||
CreatedAt: user.CreatedAt,
|
||||
}, nil
|
||||
}
|
||||
35
cloud/maplepress-backend/internal/service/user/get.go
Normal file
35
cloud/maplepress-backend/internal/service/user/get.go
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
package user
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"go.uber.org/zap"
|
||||
|
||||
userusecase "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/usecase/user"
|
||||
)
|
||||
|
||||
// GetUserService handles getting user information
|
||||
type GetUserService interface {
|
||||
GetUser(ctx context.Context, tenantID string, input *userusecase.GetUserInput) (*userusecase.GetUserOutput, error)
|
||||
}
|
||||
|
||||
type getUserService struct {
|
||||
getUC *userusecase.GetUserUseCase
|
||||
logger *zap.Logger
|
||||
}
|
||||
|
||||
// NewGetUserService creates a new GetUserService
|
||||
func NewGetUserService(
|
||||
getUC *userusecase.GetUserUseCase,
|
||||
logger *zap.Logger,
|
||||
) GetUserService {
|
||||
return &getUserService{
|
||||
getUC: getUC,
|
||||
logger: logger.Named("get-user-service"),
|
||||
}
|
||||
}
|
||||
|
||||
// GetUser retrieves a user by ID
|
||||
func (s *getUserService) GetUser(ctx context.Context, tenantID string, input *userusecase.GetUserInput) (*userusecase.GetUserOutput, error) {
|
||||
return s.getUC.Execute(ctx, tenantID, input)
|
||||
}
|
||||
30
cloud/maplepress-backend/internal/service/user/provider.go
Normal file
30
cloud/maplepress-backend/internal/service/user/provider.go
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
package user
|
||||
|
||||
import (
|
||||
"go.uber.org/zap"
|
||||
|
||||
userusecase "codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/internal/usecase/user"
|
||||
)
|
||||
|
||||
// ProvideCreateUserService creates a new CreateUserService for dependency injection
|
||||
func ProvideCreateUserService(
|
||||
validateEmailUC *userusecase.ValidateUserEmailUniqueUseCase,
|
||||
createEntityUC *userusecase.CreateUserEntityUseCase,
|
||||
saveUserToRepoUC *userusecase.SaveUserToRepoUseCase,
|
||||
logger *zap.Logger,
|
||||
) CreateUserService {
|
||||
return NewCreateUserService(
|
||||
validateEmailUC,
|
||||
createEntityUC,
|
||||
saveUserToRepoUC,
|
||||
logger,
|
||||
)
|
||||
}
|
||||
|
||||
// ProvideGetUserService creates a new GetUserService for dependency injection
|
||||
func ProvideGetUserService(
|
||||
getUC *userusecase.GetUserUseCase,
|
||||
logger *zap.Logger,
|
||||
) GetUserService {
|
||||
return NewGetUserService(getUC, logger)
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue