veza/dev-environment/templates/backend-service.template.go
2025-12-03 22:56:50 +01:00

90 lines
2 KiB
Go

package services
import (
"context"
"fmt"
"veza-backend-api/internal/types"
"veza-backend-api/internal/models"
)
// {{SERVICE_NAME}}Service provides business logic for {{DOMAIN}}
type {{SERVICE_NAME}}Service struct {
repo types.{{REPOSITORY_INTERFACE}}
logger types.Logger
}
// New{{SERVICE_NAME}}Service creates a new {{SERVICE_NAME}}Service instance
func New{{SERVICE_NAME}}Service(
repo types.{{REPOSITORY_INTERFACE}},
logger types.Logger,
) *{{SERVICE_NAME}}Service {
return &{{SERVICE_NAME}}Service{
repo: repo,
logger: logger,
}
}
// Create{{ENTITY}} creates a new {{ENTITY}}
func (s *{{SERVICE_NAME}}Service) Create{{ENTITY}}(
ctx context.Context,
req *Create{{ENTITY}}Request,
) (*models.{{ENTITY}}, error) {
// Validation
if err := s.validateCreateRequest(req); err != nil {
return nil, err
}
// Business logic
{{ENTITY_LOWER}} := &models.{{ENTITY}}{
// TODO: Map request fields to model
}
// Persistence
if err := s.repo.Create(ctx, {{ENTITY_LOWER}}); err != nil {
return nil, fmt.Errorf("failed to create {{ENTITY_LOWER}}: %w", err)
}
s.logger.Info("{{ENTITY_LOWER}} created", "id", {{ENTITY_LOWER}}.ID)
return {{ENTITY_LOWER}}, nil
}
// Get{{ENTITY}}ByID retrieves a {{ENTITY}} by ID
func (s *{{SERVICE_NAME}}Service) Get{{ENTITY}}ByID(
ctx context.Context,
id uuid.UUID,
) (*models.{{ENTITY}}, error) {
{{ENTITY_LOWER}}, err := s.repo.FindByID(ctx, id)
if err != nil {
return nil, fmt.Errorf("failed to get {{ENTITY_LOWER}}: %w", err)
}
return {{ENTITY_LOWER}}, nil
}
// validateCreateRequest validates the create request
func (s *{{SERVICE_NAME}}Service) validateCreateRequest(req *Create{{ENTITY}}Request) error {
// TODO: Add validation logic
if req == nil {
return types.ErrValidation("request is required")
}
// Example validation
// if req.Field == "" {
// return types.ErrValidation("field is required")
// }
return nil
}
// Create{{ENTITY}}Request represents a request to create a {{ENTITY}}
type Create{{ENTITY}}Request struct {
// TODO: Add request fields
}