83 lines
2.8 KiB
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
|
|
}
|