BMAD-METHOD/.claude/rules/go-temporal-dsl-prompt-file/activities.mdc

81 lines
2.9 KiB
Plaintext

---
description:
globs:
alwaysApply: false
---
This file provides rules and context for generating or understanding Go code related to Temporal activities within this project with the specific purpose of using a simple DSL to specify workflows.
**Activity Structure and Naming:**
* Activities should be methods on a struct (e.g., `SampleActivities`).
* Activity functions must accept `ctx context.Context` as the first argument.
* Use descriptive names for activities (e.g., `SampleActivity1`, `ProcessOrderActivity`).
* Follow the typical signature: `func (a *StructName) ActivityName(ctx context.Context, input ArgType) (ResultType, error)`.
**Accessing Activity Info:**
* Use `activity.GetInfo(ctx)` to retrieve activity metadata like its name.
* Example: `name := activity.GetInfo(ctx).ActivityType.Name`
**Logging:**
* You **must** use Temporal `activity.GetLogger(ctx)` for logging within activities.
* Always include the activity name in log messages for better context.
**Return Values:**
* Activities must return a result value and an error.
* Return `nil` for the error upon successful execution.
* Construct meaningful result values, potentially incorporating information derived during the activity's execution.
**Context Handling:**
* Ensure the `ctx context.Context` is propagated to any Temporal SDK calls or other functions that require context.
**Best Practices:**
* Strive to make activities idempotent.
* Keep activities focused on a single task and relatively short-lived.
* Avoid embedding complex business logic directly within activities. Orchestrate logic in workflows and utilize activities primarily for side effects or computations.
```go
package dsl
import (
"context"
"fmt"
"go.temporal.io/sdk/activity"
)
type SampleActivities struct {
}
func (a *SampleActivities) SampleActivity1(ctx context.Context, input []string) (string, error) {
name := activity.GetInfo(ctx).ActivityType.Name
fmt.Printf("Run %s with input %v \n", name, input)
return "Result_" + name, nil
}
func (a *SampleActivities) SampleActivity2(ctx context.Context, input []string) (string, error) {
name := activity.GetInfo(ctx).ActivityType.Name
fmt.Printf("Run %s with input %v \n", name, input)
return "Result_" + name, nil
}
func (a *SampleActivities) SampleActivity3(ctx context.Context, input []string) (string, error) {
name := activity.GetInfo(ctx).ActivityType.Name
fmt.Printf("Run %s with input %v \n", name, input)
return "Result_" + name, nil
}
func (a *SampleActivities) SampleActivity4(ctx context.Context, input []string) (string, error) {
name := activity.GetInfo(ctx).ActivityType.Name
fmt.Printf("Run %s with input %v \n", name, input)
return "Result_" + name, nil
}
func (a *SampleActivities) SampleActivity5(ctx context.Context, input []string) (string, error) {
name := activity.GetInfo(ctx).ActivityType.Name
fmt.Printf("Run %s with input %v \n", name, input)
return "Result_" + name, nil
}