From ce4c590b1c883d03f4f5a06d85b48aaaf619972c Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Sat, 18 Jan 2025 22:18:47 +0800 Subject: [PATCH] refactor: clean code --- internal/domain/access.go | 2 + internal/domain/acme_account.go | 2 + internal/domain/certificate.go | 14 ++++--- internal/domain/settings.go | 2 + internal/domain/workflow.go | 42 ++++++++++--------- internal/domain/workflow_output.go | 4 +- internal/domain/workflow_run.go | 18 ++++---- internal/repository/access.go | 2 +- internal/repository/acme_account.go | 4 +- internal/repository/certificate.go | 6 +-- internal/repository/settings.go | 2 +- internal/repository/workflow.go | 12 +++--- internal/repository/workflow_output.go | 10 ++--- internal/workflow/event.go | 18 ++++---- .../workflow/node-processor/apply_node.go | 4 +- .../workflow/node-processor/deploy_node.go | 2 +- internal/workflow/node-processor/processor.go | 26 +++++++----- .../processor.go} | 19 ++++----- internal/workflow/service.go | 4 +- ui/src/repository/settings.ts | 8 ++-- 20 files changed, 108 insertions(+), 93 deletions(-) rename internal/workflow/{node-processor/workflow_processor.go => processor/processor.go} (68%) diff --git a/internal/domain/access.go b/internal/domain/access.go index c7cf08fd..dda7d2b4 100644 --- a/internal/domain/access.go +++ b/internal/domain/access.go @@ -5,6 +5,8 @@ import ( "time" ) +const CollectionNameAccess = "access" + type Access struct { Meta Name string `json:"name" db:"name"` diff --git a/internal/domain/acme_account.go b/internal/domain/acme_account.go index b4f88dc4..3a663e3e 100644 --- a/internal/domain/acme_account.go +++ b/internal/domain/acme_account.go @@ -4,6 +4,8 @@ import ( "github.com/go-acme/lego/v4/registration" ) +const CollectionNameAcmeAccount = "acme_accounts" + type AcmeAccount struct { Meta CA string `json:"ca" db:"ca"` diff --git a/internal/domain/certificate.go b/internal/domain/certificate.go index f7812049..16fd9435 100644 --- a/internal/domain/certificate.go +++ b/internal/domain/certificate.go @@ -2,12 +2,7 @@ package domain import "time" -type CertificateSourceType string - -const ( - CertificateSourceTypeWorkflow = CertificateSourceType("workflow") - CertificateSourceTypeUpload = CertificateSourceType("upload") -) +const CollectionNameCertificate = "certificate" type Certificate struct { Meta @@ -26,6 +21,13 @@ type Certificate struct { DeletedAt *time.Time `json:"deleted" db:"deleted"` } +type CertificateSourceType string + +const ( + CertificateSourceTypeWorkflow = CertificateSourceType("workflow") + CertificateSourceTypeUpload = CertificateSourceType("upload") +) + type CertificateArchiveFileReq struct { CertificateId string `json:"-"` Format string `json:"format"` diff --git a/internal/domain/settings.go b/internal/domain/settings.go index 8d1d983f..9819ec43 100644 --- a/internal/domain/settings.go +++ b/internal/domain/settings.go @@ -5,6 +5,8 @@ import ( "fmt" ) +const CollectionNameSettings = "settings" + type Settings struct { Meta Name string `json:"name" db:"name"` diff --git a/internal/domain/workflow.go b/internal/domain/workflow.go index 5b894297..86e9a781 100644 --- a/internal/domain/workflow.go +++ b/internal/domain/workflow.go @@ -6,6 +6,23 @@ import ( "github.com/usual2970/certimate/internal/pkg/utils/maps" ) +const CollectionNameWorkflow = "workflow" + +type Workflow struct { + Meta + Name string `json:"name" db:"name"` + Description string `json:"description" db:"description"` + Trigger WorkflowTriggerType `json:"trigger" db:"trigger"` + TriggerCron string `json:"triggerCron" db:"triggerCron"` + Enabled bool `json:"enabled" db:"enabled"` + Content *WorkflowNode `json:"content" db:"content"` + Draft *WorkflowNode `json:"draft" db:"draft"` + HasDraft bool `json:"hasDraft" db:"hasDraft"` + LastRunId string `json:"lastRunId" db:"lastRunId"` + LastRunStatus WorkflowRunStatusType `json:"lastRunStatus" db:"lastRunStatus"` + LastRunTime time.Time `json:"lastRunTime" db:"lastRunTime"` +} + type WorkflowNodeType string const ( @@ -25,25 +42,6 @@ const ( WorkflowTriggerTypeManual = WorkflowTriggerType("manual") ) -type Workflow struct { - Meta - Name string `json:"name" db:"name"` - Description string `json:"description" db:"description"` - Trigger WorkflowTriggerType `json:"trigger" db:"trigger"` - TriggerCron string `json:"triggerCron" db:"triggerCron"` - Enabled bool `json:"enabled" db:"enabled"` - Content *WorkflowNode `json:"content" db:"content"` - Draft *WorkflowNode `json:"draft" db:"draft"` - HasDraft bool `json:"hasDraft" db:"hasDraft"` - LastRunId string `json:"lastRunId" db:"lastRunId"` - LastRunStatus WorkflowRunStatusType `json:"lastRunStatus" db:"lastRunStatus"` - LastRunTime time.Time `json:"lastRunTime" db:"lastRunTime"` -} - -func (w *Workflow) Table() string { - return "workflow" -} - type WorkflowNode struct { Id string `json:"id"` Type WorkflowNodeType `json:"type"` @@ -151,6 +149,12 @@ type WorkflowNodeIOValueSelector struct { Name string `json:"name"` } +type WorkflowNodeIONameType = string + +const ( + WorkflowNodeIONameCertificate WorkflowNodeIONameType = "certificate" +) + type WorkflowRunReq struct { WorkflowId string `json:"-"` Trigger WorkflowTriggerType `json:"trigger"` diff --git a/internal/domain/workflow_output.go b/internal/domain/workflow_output.go index abbddac1..44a70bc2 100644 --- a/internal/domain/workflow_output.go +++ b/internal/domain/workflow_output.go @@ -1,5 +1,7 @@ package domain +const CollectionNameWorkflowOutput = "workflow_output" + type WorkflowOutput struct { Meta WorkflowId string `json:"workflowId" db:"workflow"` @@ -8,5 +10,3 @@ type WorkflowOutput struct { Outputs []WorkflowNodeIO `json:"outputs" db:"outputs"` Succeeded bool `json:"succeeded" db:"succeeded"` } - -const WORKFLOW_OUTPUT_CERTIFICATE = "certificate" diff --git a/internal/domain/workflow_run.go b/internal/domain/workflow_run.go index ef4fb643..27ec30de 100644 --- a/internal/domain/workflow_run.go +++ b/internal/domain/workflow_run.go @@ -2,14 +2,7 @@ package domain import "time" -type WorkflowRunStatusType string - -const ( - WorkflowRunStatusTypePending WorkflowRunStatusType = "pending" - WorkflowRunStatusTypeRunning WorkflowRunStatusType = "running" - WorkflowRunStatusTypeSucceeded WorkflowRunStatusType = "succeeded" - WorkflowRunStatusTypeFailed WorkflowRunStatusType = "failed" -) +const CollectionNameWorkflowRun = "workflow_run" type WorkflowRun struct { Meta @@ -22,6 +15,15 @@ type WorkflowRun struct { Error string `json:"error" db:"error"` } +type WorkflowRunStatusType string + +const ( + WorkflowRunStatusTypePending WorkflowRunStatusType = "pending" + WorkflowRunStatusTypeRunning WorkflowRunStatusType = "running" + WorkflowRunStatusTypeSucceeded WorkflowRunStatusType = "succeeded" + WorkflowRunStatusTypeFailed WorkflowRunStatusType = "failed" +) + type WorkflowRunLog struct { NodeId string `json:"nodeId"` NodeName string `json:"nodeName"` diff --git a/internal/repository/access.go b/internal/repository/access.go index 8ce6450a..a8370fd8 100644 --- a/internal/repository/access.go +++ b/internal/repository/access.go @@ -19,7 +19,7 @@ func NewAccessRepository() *AccessRepository { } func (r *AccessRepository) GetById(ctx context.Context, id string) (*domain.Access, error) { - record, err := app.GetApp().FindRecordById("access", id) + record, err := app.GetApp().FindRecordById(domain.CollectionNameAccess, id) if err != nil { if errors.Is(err, sql.ErrNoRows) { return nil, domain.ErrRecordNotFound diff --git a/internal/repository/acme_account.go b/internal/repository/acme_account.go index 85ee0fbf..ef8ed62f 100644 --- a/internal/repository/acme_account.go +++ b/internal/repository/acme_account.go @@ -23,7 +23,7 @@ var g singleflight.Group func (r *AcmeAccountRepository) GetByCAAndEmail(ca, email string) (*domain.AcmeAccount, error) { resp, err, _ := g.Do(fmt.Sprintf("acme_account_%s_%s", ca, email), func() (interface{}, error) { resp, err := app.GetApp().FindFirstRecordByFilter( - "acme_accounts", + domain.CollectionNameAcmeAccount, "ca={:ca} && email={:email}", dbx.Params{"ca": ca, "email": email}, ) @@ -49,7 +49,7 @@ func (r *AcmeAccountRepository) GetByCAAndEmail(ca, email string) (*domain.AcmeA } func (r *AcmeAccountRepository) Save(ca, email, key string, resource *registration.Resource) error { - collection, err := app.GetApp().FindCollectionByNameOrId("acme_accounts") + collection, err := app.GetApp().FindCollectionByNameOrId(domain.CollectionNameAcmeAccount) if err != nil { return err } diff --git a/internal/repository/certificate.go b/internal/repository/certificate.go index d56e7f72..6aee6add 100644 --- a/internal/repository/certificate.go +++ b/internal/repository/certificate.go @@ -20,7 +20,7 @@ func NewCertificateRepository() *CertificateRepository { func (r *CertificateRepository) ListExpireSoon(ctx context.Context) ([]*domain.Certificate, error) { records, err := app.GetApp().FindRecordsByFilter( - "certificate", + domain.CollectionNameCertificate, "expireAt>DATETIME('now') && expireAt>(name: SettingsNames) => { try { - const resp = await getPocketBase().collection("settings").getFirstListItem>(`name='${name}'`, { + const resp = await getPocketBase().collection(COLLECTION_NAME).getFirstListItem>(`name='${name}'`, { requestKey: null, }); return resp; @@ -23,8 +25,8 @@ export const get = async >(name: SettingsNames) = export const save = async >(record: MaybeModelRecordWithId>) => { if (record.id) { - return await getPocketBase().collection("settings").update>(record.id, record); + return await getPocketBase().collection(COLLECTION_NAME).update>(record.id, record); } - return await getPocketBase().collection("settings").create>(record); + return await getPocketBase().collection(COLLECTION_NAME).create>(record); };