diff --git a/internal/repository/workflow.go b/internal/repository/workflow.go index e6e1d046..28d3d0f2 100644 --- a/internal/repository/workflow.go +++ b/internal/repository/workflow.go @@ -94,16 +94,16 @@ func (w *WorkflowRepository) SaveRun(ctx context.Context, run *domain.WorkflowRu } // unable trigger sse using DB() - wordflowRecord, err := txDao.FindRecordById("workflow", run.WorkflowId) + workflowRecord, err := txDao.FindRecordById("workflow", run.WorkflowId) if err != nil { return err } - wordflowRecord.Set("lastRunId", record.GetId()) - wordflowRecord.Set("lastRunStatus", record.GetString("status")) - wordflowRecord.Set("lastRunTime", record.GetString("startedAt")) + workflowRecord.Set("lastRunId", record.GetId()) + workflowRecord.Set("lastRunStatus", record.GetString("status")) + workflowRecord.Set("lastRunTime", record.GetString("startedAt")) - return txDao.SaveRecord(wordflowRecord) + return txDao.SaveRecord(workflowRecord) }) if err != nil { return err diff --git a/internal/rest/workflow.go b/internal/rest/workflow.go index 0ccab150..2527c85f 100644 --- a/internal/rest/workflow.go +++ b/internal/rest/workflow.go @@ -10,6 +10,7 @@ import ( type WorkflowService interface { Run(ctx context.Context, req *domain.WorkflowRunReq) error + Stop() } type workflowHandler struct { diff --git a/internal/routes/routes.go b/internal/routes/routes.go index 058f1815..8fab1a15 100644 --- a/internal/routes/routes.go +++ b/internal/routes/routes.go @@ -1,6 +1,8 @@ package routes import ( + "sync" + "github.com/usual2970/certimate/internal/notify" "github.com/usual2970/certimate/internal/repository" "github.com/usual2970/certimate/internal/rest" @@ -11,14 +13,26 @@ import ( "github.com/pocketbase/pocketbase/apis" ) +var ( + workflowSvc rest.WorkflowService + workflowSvcOnce sync.Once +) + +func getWorkflowService() rest.WorkflowService { + workflowSvcOnce.Do(func() { + workflowRepo := repository.NewWorkflowRepository() + workflowSvc = workflow.NewWorkflowService(workflowRepo) + }) + return workflowSvc +} + func Register(e *echo.Echo) { group := e.Group("/api", apis.RequireAdminAuth()) notifyRepo := repository.NewSettingsRepository() notifySvc := notify.NewNotifyService(notifyRepo) - workflowRepo := repository.NewWorkflowRepository() - workflowSvc := workflow.NewWorkflowService(workflowRepo) + workflowSvc := getWorkflowService() statisticsRepo := repository.NewStatisticsRepository() statisticsSvc := statistics.NewStatisticsService(statisticsRepo) @@ -29,3 +43,7 @@ func Register(e *echo.Echo) { rest.NewStatisticsHandler(group, statisticsSvc) } + +func Unregister() { + getWorkflowService().Stop() +} diff --git a/main.go b/main.go index b7885e39..bb34606f 100644 --- a/main.go +++ b/main.go @@ -55,7 +55,12 @@ func main() { return nil }) - defer log.Println("Exit!") + app.OnTerminate().Add(func(e *core.TerminateEvent) error { + routes.Unregister() + log.Println("Exit!") + return nil + }) + log.Printf("Visit the website: http://%s", httpFlag) if err := app.Start(); err != nil {