thread-master/backend/internal/worker/job/generate_rewrite_draft.go

83 lines
2.8 KiB
Go

package job
import (
"context"
"fmt"
libpersonacopy "haixun-backend/internal/library/personacopy"
aiusecase "haixun-backend/internal/model/ai/usecase"
contentformuladomain "haixun-backend/internal/model/content_formula/domain/usecase"
copydraftdomain "haixun-backend/internal/model/copy_draft/domain/usecase"
jobdom "haixun-backend/internal/model/job/domain/usecase"
personadomain "haixun-backend/internal/model/persona/domain/usecase"
placementusecase "haixun-backend/internal/model/placement/usecase"
threadsaccountdomain "haixun-backend/internal/model/threads_account/domain/usecase"
)
type GenerateRewriteDraftDeps struct {
Jobs jobdom.UseCase
Persona personadomain.UseCase
ContentFormula contentformuladomain.UseCase
CopyDraft copydraftdomain.UseCase
ThreadsAccount threadsaccountdomain.UseCase
Placement placementusecase.UseCase
AI aiusecase.UseCase
}
func RegisterGenerateRewriteDraftHandler(runner *Runner, deps GenerateRewriteDraftDeps) {
if runner == nil {
return
}
runner.RegisterStepHandler("rewrite_draft_generate", func(ctx context.Context, step StepContext) error {
return runGenerateRewriteDraft(ctx, step, deps)
})
}
func runGenerateRewriteDraft(ctx context.Context, step StepContext, deps GenerateRewriteDraftDeps) error {
payload := step.Run.Payload
tenantID, ownerUID := runActorFromPayload(payload, step.Run)
personaID := stringField(payload, "persona_id")
accountID := stringField(payload, "account_id")
referenceText := stringField(payload, "reference_text")
topic := stringField(payload, "topic")
if tenantID == "" || ownerUID == "" || personaID == "" || accountID == "" || referenceText == "" || topic == "" {
return fmt.Errorf("generate-rewrite-draft payload missing required fields")
}
updateProgress := func(summary string, percentage int) {
_ = step.Heartbeat(ctx)
_, _ = deps.Jobs.UpdateProgress(ctx, jobdom.UpdateProgressRequest{
JobID: step.JobID,
WorkerID: step.WorkerID,
Phase: "rewrite_draft_generate",
Summary: summary,
Percentage: percentage,
})
}
count, err := libpersonacopy.RunRewriteDraft(ctx, libpersonacopy.RewriteDraftDeps{
Persona: deps.Persona,
ContentFormula: deps.ContentFormula,
CopyDraft: deps.CopyDraft,
ThreadsAccount: deps.ThreadsAccount,
Placement: deps.Placement,
AI: deps.AI,
}, libpersonacopy.RewriteDraftInput{
TenantID: tenantID,
OwnerUID: ownerUID,
PersonaID: personaID,
AccountID: accountID,
ReferenceText: referenceText,
Topic: topic,
Brief: stringField(payload, "brief"),
SaveLabel: stringField(payload, "save_label"),
UseWebSearch: boolField(payload, "use_web_search"),
DraftCount: intField(payload, "draft_count"),
}, updateProgress)
if err != nil {
return err
}
_ = count
return nil
}