mirror of
https://github.com/usual2970/certimate.git
synced 2025-06-08 05:29:51 +00:00
73 lines
1.9 KiB
Go
73 lines
1.9 KiB
Go
package workflow
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/pocketbase/pocketbase/core"
|
|
"github.com/pocketbase/pocketbase/models"
|
|
|
|
"github.com/usual2970/certimate/internal/app"
|
|
"github.com/usual2970/certimate/internal/domain"
|
|
"github.com/usual2970/certimate/internal/repository"
|
|
)
|
|
|
|
const tableName = "workflow"
|
|
|
|
func AddEvent() error {
|
|
app := app.GetApp()
|
|
|
|
app.OnRecordAfterCreateRequest(tableName).Add(func(e *core.RecordCreateEvent) error {
|
|
return update(e.HttpContext.Request().Context(), e.Record)
|
|
})
|
|
|
|
app.OnRecordAfterUpdateRequest(tableName).Add(func(e *core.RecordUpdateEvent) error {
|
|
return update(e.HttpContext.Request().Context(), e.Record)
|
|
})
|
|
|
|
app.OnRecordAfterDeleteRequest(tableName).Add(func(e *core.RecordDeleteEvent) error {
|
|
return delete(e.HttpContext.Request().Context(), e.Record)
|
|
})
|
|
|
|
return nil
|
|
}
|
|
|
|
func delete(_ context.Context, record *models.Record) error {
|
|
id := record.Id
|
|
scheduler := app.GetScheduler()
|
|
scheduler.Remove(id)
|
|
scheduler.Start()
|
|
return nil
|
|
}
|
|
|
|
func update(ctx context.Context, record *models.Record) error {
|
|
// 是不是自动
|
|
// 是不是 enabled
|
|
|
|
workflowId := record.Id
|
|
enabled := record.GetBool("enabled")
|
|
trigger := record.GetString("trigger")
|
|
|
|
scheduler := app.GetScheduler()
|
|
if !enabled || trigger == string(domain.WorkflowTriggerTypeManual) {
|
|
scheduler.Remove(workflowId)
|
|
scheduler.Start()
|
|
return nil
|
|
}
|
|
|
|
err := scheduler.Add(workflowId, record.GetString("triggerCron"), func() {
|
|
NewWorkflowService(repository.NewWorkflowRepository()).Run(ctx, &domain.WorkflowRunReq{
|
|
WorkflowId: workflowId,
|
|
Trigger: domain.WorkflowTriggerTypeAuto,
|
|
})
|
|
})
|
|
if err != nil {
|
|
app.GetLogger().Error("add cron job failed", "err", err)
|
|
return fmt.Errorf("add cron job failed: %w", err)
|
|
}
|
|
app.GetLogger().Error("add cron job failed", "subjectAltNames", record.GetString("subjectAltNames"))
|
|
|
|
scheduler.Start()
|
|
return nil
|
|
}
|