refactor: clean code

This commit is contained in:
Fu Diwei
2025-01-16 20:27:30 +08:00
parent dea4106569
commit 8ecb71fb55
39 changed files with 440 additions and 258 deletions

View File

@@ -5,7 +5,7 @@ import { getPocketBase } from "@/repository/pocketbase";
export const notifyTest = async (channel: string) => {
const pb = getPocketBase();
const resp = await pb.send("/api/notify/test", {
const resp = await pb.send<BaseResponse>("/api/notify/test", {
method: "POST",
headers: {
"Content-Type": "application/json",

View File

@@ -6,7 +6,7 @@ import { getPocketBase } from "@/repository/pocketbase";
export const get = async () => {
const pb = getPocketBase();
const resp = await pb.send("/api/statistics/get", {
const resp = await pb.send<BaseResponse<Statistics>>("/api/statistics/get", {
method: "GET",
});
@@ -14,5 +14,5 @@ export const get = async () => {
throw new ClientResponseError({ status: resp.code, response: resp, data: {} });
}
return resp.data as Statistics;
return resp;
};

View File

@@ -1,12 +1,12 @@
import { ClientResponseError, type RecordSubscription } from "pocketbase";
import { ClientResponseError } from "pocketbase";
import { WORKFLOW_TRIGGERS, type WorkflowModel } from "@/domain/workflow";
import { WORKFLOW_TRIGGERS } from "@/domain/workflow";
import { getPocketBase } from "@/repository/pocketbase";
export const run = async (id: string) => {
const pb = getPocketBase();
const resp = await pb.send("/api/workflow/run", {
const resp = await pb.send<BaseResponse>("/api/workflow/run", {
method: "POST",
headers: {
"Content-Type": "application/json",
@@ -23,15 +23,3 @@ export const run = async (id: string) => {
return resp;
};
export const subscribe = async (id: string, cb: (e: RecordSubscription<WorkflowModel>) => void) => {
const pb = getPocketBase();
return pb.collection("workflow").subscribe(id, cb);
};
export const unsubscribe = async (id: string) => {
const pb = getPocketBase();
return pb.collection("workflow").unsubscribe(id);
};

View File

@@ -139,9 +139,9 @@ const WorkflowRuns = ({ className, style, workflowId }: WorkflowRunsProps) => {
},
{
refreshDeps: [workflowId, page, pageSize],
onSuccess: (data) => {
setTableData(data.items);
setTableTotal(data.totalItems);
onSuccess: (res) => {
setTableData(res.items);
setTableTotal(res.totalItems);
},
onError: (err) => {
if (err instanceof ClientResponseError && err.isAbort) {

View File

@@ -8,7 +8,7 @@ export interface CertificateModel extends BaseModel {
effectAt: ISO8601String;
expireAt: ISO8601String;
workflowId: string;
expand: {
expand?: {
workflowId?: WorkflowModel; // TODO: ugly, maybe to use an alias?
};
}

View File

@@ -142,9 +142,9 @@ const AccessList = () => {
},
{
refreshDeps: [accesses, page, pageSize],
onSuccess: (data) => {
setTableData(data.items);
setTableTotal(data.totalItems);
onSuccess: (res) => {
setTableData(res.items);
setTableTotal(res.totalItems);
},
}
);

View File

@@ -204,9 +204,9 @@ const CertificateList = () => {
},
{
refreshDeps: [filters, page, pageSize],
onSuccess: (data) => {
setTableData(data.items);
setTableTotal(data.totalItems);
onSuccess: (res) => {
setTableData(res.items);
setTableTotal(res.totalItems);
},
onError: (err) => {
if (err instanceof ClientResponseError && err.isAbort) {

View File

@@ -164,9 +164,9 @@ const Dashboard = () => {
},
{
refreshDeps: [page, pageSize],
onSuccess: (data) => {
setTableData(data.items);
setTableTotal(data.totalItems > 3 ? 3 : data.totalItems);
onSuccess: (res) => {
setTableData(res.items);
setTableTotal(res.totalItems > 3 ? 3 : res.totalItems);
},
onError: (err) => {
if (err instanceof ClientResponseError && err.isAbort) {
@@ -193,8 +193,8 @@ const Dashboard = () => {
return getStatistics();
},
{
onSuccess: (data) => {
setStatistics(data);
onSuccess: (res) => {
setStatistics(res.data);
},
onError: (err) => {
if (err instanceof ClientResponseError && err.isAbort) {

View File

@@ -16,7 +16,7 @@ import { createSchemaFieldRule } from "antd-zod";
import { isEqual } from "radash";
import { z } from "zod";
import { run as runWorkflow, subscribe as subscribeWorkflow, unsubscribe as unsubscribeWorkflow } from "@/api/workflow";
import { run as runWorkflow } from "@/api/workflow";
import ModalForm from "@/components/ModalForm";
import Show from "@/components/Show";
import WorkflowElements from "@/components/workflow/WorkflowElements";
@@ -24,7 +24,7 @@ import WorkflowRuns from "@/components/workflow/WorkflowRuns";
import { isAllNodesValidated } from "@/domain/workflow";
import { WORKFLOW_RUN_STATUSES } from "@/domain/workflowRun";
import { useAntdForm, useZustandShallowSelector } from "@/hooks";
import { remove as removeWorkflow } from "@/repository/workflow";
import { remove as removeWorkflow, subscribe as subscribeWorkflow, unsubscribe as unsubscribeWorkflow } from "@/repository/workflow";
import { useWorkflowStore } from "@/stores/workflow";
import { getErrMsg } from "@/utils/error";

View File

@@ -250,9 +250,9 @@ const WorkflowList = () => {
},
{
refreshDeps: [filters, page, pageSize],
onSuccess: (data) => {
setTableData(data.items);
setTableTotal(data.totalItems);
onSuccess: (res) => {
setTableData(res.items);
setTableTotal(res.totalItems);
},
onError: (err) => {
if (err instanceof ClientResponseError && err.isAbort) {

View File

@@ -19,17 +19,18 @@ export const list = async (request: ListCertificateRequest) => {
const perPage = request.perPage || 10;
const options: RecordListOptions = {
sort: "-created",
expand: "workflowId",
filter: "deleted=null",
sort: "-created",
requestKey: null,
};
if (request.state === "expireSoon") {
options.filter = pb.filter("expireAt<{:expiredAt}", {
expiredAt: dayjs().add(15, "d").toDate(),
options.filter = pb.filter("expireAt<{:expiredAt} && deleted=null", {
expiredAt: dayjs().add(20, "d").toDate(),
});
} else if (request.state === "expired") {
options.filter = pb.filter("expireAt<={:expiredAt}", {
options.filter = pb.filter("expireAt<={:expiredAt} && deleted=null", {
expiredAt: new Date(),
});
}

View File

@@ -1,4 +1,4 @@
import { type RecordListOptions } from "pocketbase";
import { type RecordListOptions, type RecordSubscription } from "pocketbase";
import { type WorkflowModel } from "@/domain/workflow";
import { getPocketBase } from "./pocketbase";
@@ -48,3 +48,15 @@ export const save = async (record: MaybeModelRecord<WorkflowModel>) => {
export const remove = async (record: MaybeModelRecordWithId<WorkflowModel>) => {
return await getPocketBase().collection(COLLECTION_NAME).delete(record.id);
};
export const subscribe = async (id: string, cb: (e: RecordSubscription<WorkflowModel>) => void) => {
const pb = getPocketBase();
return pb.collection("workflow").subscribe(id, cb);
};
export const unsubscribe = async (id: string) => {
const pb = getPocketBase();
return pb.collection("workflow").unsubscribe(id);
};