90 lines
2 KiB
Go
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
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|