refactor: clean code

This commit is contained in:
Fu Diwei 2025-01-10 21:22:22 +08:00
parent e4e0a24a06
commit 8ed2b2475c
4 changed files with 31 additions and 27 deletions

View File

@ -65,6 +65,9 @@ func (d *K8sSecretDeployer) Deploy(ctx context.Context, certPem string, privkeyP
if d.config.SecretName == "" { if d.config.SecretName == "" {
return nil, errors.New("config `secretName` is required") return nil, errors.New("config `secretName` is required")
} }
if d.config.SecretType == "" {
return nil, errors.New("config `secretType` is required")
}
if d.config.SecretDataKeyForCrt == "" { if d.config.SecretDataKeyForCrt == "" {
return nil, errors.New("config `secretDataKeyForCrt` is required") return nil, errors.New("config `secretDataKeyForCrt` is required")
} }

View File

@ -1,7 +1,6 @@
import type { RecordModel, RecordSubscription } from "pocketbase"; import { ClientResponseError, type RecordSubscription } from "pocketbase";
import { ClientResponseError } from "pocketbase";
import { WORKFLOW_TRIGGERS } from "@/domain/workflow"; import { WORKFLOW_TRIGGERS, type WorkflowModel } from "@/domain/workflow";
import { getPocketBase } from "@/repository/pocketbase"; import { getPocketBase } from "@/repository/pocketbase";
export const run = async (id: string) => { export const run = async (id: string) => {
@ -25,14 +24,14 @@ export const run = async (id: string) => {
return resp; return resp;
}; };
export const subscribe = async (id: string, cb: (e: RecordSubscription<RecordModel>) => void) => { export const subscribe = async (id: string, cb: (e: RecordSubscription<WorkflowModel>) => void) => {
const pb = getPocketBase(); const pb = getPocketBase();
pb.collection("workflow").subscribe(id, cb); return pb.collection("workflow").subscribe(id, cb);
}; };
export const unsubscribe = async (id: string) => { export const unsubscribe = async (id: string) => {
const pb = getPocketBase(); const pb = getPocketBase();
pb.collection("workflow").unsubscribe(id); return pb.collection("workflow").unsubscribe(id);
}; };

View File

@ -18,11 +18,11 @@ export type UseZustandShallowSelectorReturns<T extends object, TKeys extends key
* const { foo, bar, baz } = useStore(useZustandShallowSelector(["foo", "bar", "baz"])); * const { foo, bar, baz } = useStore(useZustandShallowSelector(["foo", "bar", "baz"]));
* *
* // 以上代码等效于: * // 以上代码等效于:
* const { foo, bar, baz } = useStore((state) => ({ * const { foo, bar, baz } = useStore(useShallow((state) => ({
* foo: state.foo, * foo: state.foo,
* bar: state.bar, * bar: state.bar,
* baz: state.baz, * baz: state.baz,
* })); * })));
* ``` * ```
*/ */
const useZustandShallowSelector = <T extends object, TKeys extends keyof T>(paths: MaybeMany<TKeys>): UseZustandShallowSelectorReturns<T, TKeys> => { const useZustandShallowSelector = <T extends object, TKeys extends keyof T>(paths: MaybeMany<TKeys>): UseZustandShallowSelectorReturns<T, TKeys> => {

View File

@ -13,16 +13,16 @@ import {
import { PageHeader } from "@ant-design/pro-components"; import { PageHeader } from "@ant-design/pro-components";
import { Alert, Button, Card, Dropdown, Form, Input, Modal, Space, Tabs, Typography, message, notification } from "antd"; import { Alert, Button, Card, Dropdown, Form, Input, Modal, Space, Tabs, Typography, message, notification } from "antd";
import { createSchemaFieldRule } from "antd-zod"; import { createSchemaFieldRule } from "antd-zod";
import { ClientResponseError } from "pocketbase";
import { isEqual } from "radash"; import { isEqual } from "radash";
import { z } from "zod"; import { z } from "zod";
import { run as runWorkflow, subscribe, unsubscribe } from "@/api/workflow"; import { run as runWorkflow, subscribe as subscribeWorkflow, unsubscribe as unsubscribeWorkflow } from "@/api/workflow";
import ModalForm from "@/components/ModalForm"; import ModalForm from "@/components/ModalForm";
import Show from "@/components/Show"; import Show from "@/components/Show";
import WorkflowElements from "@/components/workflow/WorkflowElements"; import WorkflowElements from "@/components/workflow/WorkflowElements";
import WorkflowRuns from "@/components/workflow/WorkflowRuns"; import WorkflowRuns from "@/components/workflow/WorkflowRuns";
import { isAllNodesValidated } from "@/domain/workflow"; import { isAllNodesValidated } from "@/domain/workflow";
import { WORKFLOW_RUN_STATUSES } from "@/domain/workflowRun";
import { useAntdForm, useZustandShallowSelector } from "@/hooks"; import { useAntdForm, useZustandShallowSelector } from "@/hooks";
import { remove as removeWorkflow } from "@/repository/workflow"; import { remove as removeWorkflow } from "@/repository/workflow";
import { useWorkflowStore } from "@/stores/workflow"; import { useWorkflowStore } from "@/stores/workflow";
@ -63,21 +63,21 @@ const WorkflowDetail = () => {
}, [workflow]); }, [workflow]);
useEffect(() => { useEffect(() => {
if (lastRunStatus && lastRunStatus == "running") { setIsRunning(lastRunStatus == WORKFLOW_RUN_STATUSES.RUNNING);
setIsRunning(true);
} else {
setIsRunning(false);
}
}, [lastRunStatus]); }, [lastRunStatus]);
useEffect(() => { useEffect(() => {
if (isRunning && workflowId) { if (!!workflowId && isRunning) {
subscribe(workflowId, (e) => { subscribeWorkflow(workflowId, (e) => {
if (e.record.lastRunStatus !== "running") { if (e.record.lastRunStatus !== WORKFLOW_RUN_STATUSES.RUNNING) {
setIsRunning(false); setIsRunning(false);
unsubscribe(workflowId); unsubscribeWorkflow(workflowId);
} }
}); });
return () => {
unsubscribeWorkflow(workflowId);
};
} }
}, [workflowId, isRunning]); }, [workflowId, isRunning]);
@ -174,26 +174,28 @@ const WorkflowDetail = () => {
} }
promise.then(async () => { promise.then(async () => {
let unsubscribeFn: Awaited<ReturnType<typeof subscribeWorkflow>> | undefined = undefined;
try { try {
setIsRunning(true);
// subscribe before running workflow // subscribe before running workflow
subscribe(workflowId!, (e) => { unsubscribeFn = await subscribeWorkflow(workflowId!, (e) => {
if (e.record.lastRunStatus !== "running") { if (e.record.lastRunStatus !== WORKFLOW_RUN_STATUSES.RUNNING) {
setIsRunning(false); setIsRunning(false);
unsubscribe(workflowId!); unsubscribeFn?.();
} }
}); });
await runWorkflow(workflowId!); await runWorkflow(workflowId!);
setIsRunning(true);
messageApi.success(t("common.text.operation_succeeded")); messageApi.success(t("common.text.operation_succeeded"));
} catch (err) { } catch (err) {
if (err instanceof ClientResponseError && err.isAbort) { setIsRunning(false);
return; unsubscribeFn?.();
}
console.error(err); console.error(err);
messageApi.warning(t("common.text.operation_failed")); messageApi.warning(t("common.text.operation_failed"));
setIsRunning(false);
} }
}); });
}; };