diff --git a/ui/src/components/workflow/WorkflowLog.tsx b/ui/src/components/workflow/WorkflowLog.tsx index a528fdc9..c2b117d1 100644 --- a/ui/src/components/workflow/WorkflowLog.tsx +++ b/ui/src/components/workflow/WorkflowLog.tsx @@ -1,5 +1,5 @@ import { WorkflowRunLog } from "@/domain/workflow"; -import { logs } from "@/repository/workflow"; +import { list as logs } from "@/repository/workflowRunLog"; import { ColumnDef } from "@tanstack/react-table"; import { useState } from "react"; import { DataTable } from "./DataTable"; diff --git a/ui/src/domain/access.ts b/ui/src/domain/access.ts index 8b5dc6b4..9e08fa1e 100644 --- a/ui/src/domain/access.ts +++ b/ui/src/domain/access.ts @@ -190,7 +190,7 @@ export type AccessProvider = { export const accessProvidersMap: Map = new Map( /* - 注意:与定义常量值时不同,此处的顺序决定显示在前端的顺序。 + 注意:此处的顺序决定显示在前端的顺序。 NOTICE: The following order determines the order displayed at the frontend. */ [ diff --git a/ui/src/domain/deployment.ts b/ui/src/domain/deployment.ts deleted file mode 100644 index 2a4ee813..00000000 --- a/ui/src/domain/deployment.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { Domain } from "./domain"; - -export type Deployment = { - id: string; - domain: string; - log: { - apply?: Log[]; - check?: Log[]; - deploy?: Log[]; - }; - phase: Pahse; - phaseSuccess: boolean; - wholeSuccess: boolean; - deployedAt: string; - created: string; - updated: string; - expand: { - domain?: Domain; - }; -}; - -export type Pahse = "apply" | "check" | "deploy"; - -export type Log = { - time: string; - message: string; - error: string; - info?: string[]; -}; - -export type DeploymentListReq = { - domain?: string; - page?: number; - perPage?: number; -}; diff --git a/ui/src/domain/domain.ts b/ui/src/domain/domain.ts index 62bd8ecc..f6dbe72a 100644 --- a/ui/src/domain/domain.ts +++ b/ui/src/domain/domain.ts @@ -1,35 +1,17 @@ -import { Deployment, Pahse } from "./deployment"; - -export type Domain = { - id?: string; - domain: string; - email?: string; - crontab: string; - access: string; - targetAccess?: string; - targetType?: string; - expiredAt?: string; - phase?: Pahse; - phaseSuccess?: boolean; - lastDeployedAt?: string; - variables?: string; - nameservers?: string; - group?: string; - enabled?: boolean; - deployed?: boolean; - created?: string; - updated?: string; - deleted?: string; - rightnow?: boolean; - certificate?: string; - privateKey?: string; - expand?: { - lastDeployment?: Deployment; - }; - - applyConfig?: ApplyConfig; - deployConfig?: DeployConfig[]; -}; +import { + ACCESS_PROVIDER_TYPE_ALIYUN, + ACCESS_PROVIDER_TYPE_BAIDUCLOUD, + ACCESS_PROVIDER_TYPE_BYTEPLUS, + ACCESS_PROVIDER_TYPE_DOGECLOUD, + ACCESS_PROVIDER_TYPE_HUAWEICLOUD, + ACCESS_PROVIDER_TYPE_KUBERNETES, + ACCESS_PROVIDER_TYPE_LOCAL, + ACCESS_PROVIDER_TYPE_QINIU, + ACCESS_PROVIDER_TYPE_SSH, + ACCESS_PROVIDER_TYPE_TENCENTCLOUD, + ACCESS_PROVIDER_TYPE_VOLCENGINE, + ACCESS_PROVIDER_TYPE_WEBHOOK, +} from "./access"; export type KVType = { key: string; @@ -64,29 +46,33 @@ export type DeployTarget = { }; export const deployTargetList: string[][] = [ - ["aliyun-oss", "common.provider.aliyun.oss", "/imgs/providers/aliyun.svg"], - ["aliyun-cdn", "common.provider.aliyun.cdn", "/imgs/providers/aliyun.svg"], - ["aliyun-dcdn", "common.provider.aliyun.dcdn", "/imgs/providers/aliyun.svg"], - ["aliyun-clb", "common.provider.aliyun.clb", "/imgs/providers/aliyun.svg"], - ["aliyun-alb", "common.provider.aliyun.alb", "/imgs/providers/aliyun.svg"], - ["aliyun-nlb", "common.provider.aliyun.nlb", "/imgs/providers/aliyun.svg"], - ["tencentcloud-cdn", "common.provider.tencentcloud.cdn", "/imgs/providers/tencentcloud.svg"], - ["tencentcloud-ecdn", "common.provider.tencentcloud.ecdn", "/imgs/providers/tencentcloud.svg"], - ["tencentcloud-clb", "common.provider.tencentcloud.clb", "/imgs/providers/tencentcloud.svg"], - ["tencentcloud-cos", "common.provider.tencentcloud.cos", "/imgs/providers/tencentcloud.svg"], - ["tencentcloud-eo", "common.provider.tencentcloud.eo", "/imgs/providers/tencentcloud.svg"], - ["huaweicloud-cdn", "common.provider.huaweicloud.cdn", "/imgs/providers/huaweicloud.svg"], - ["huaweicloud-elb", "common.provider.huaweicloud.elb", "/imgs/providers/huaweicloud.svg"], - ["baiducloud-cdn", "common.provider.baiducloud.cdn", "/imgs/providers/baiducloud.svg"], - ["qiniu-cdn", "common.provider.qiniu.cdn", "/imgs/providers/qiniu.svg"], - ["dogecloud-cdn", "common.provider.dogecloud.cdn", "/imgs/providers/dogecloud.svg"], - ["local", "common.provider.local", "/imgs/providers/local.svg"], - ["ssh", "common.provider.ssh", "/imgs/providers/ssh.svg"], - ["webhook", "common.provider.webhook", "/imgs/providers/webhook.svg"], - ["k8s-secret", "common.provider.kubernetes.secret", "/imgs/providers/kubernetes.svg"], - ["volcengine-live", "common.provider.volcengine.live", "/imgs/providers/volcengine.svg"], - ["volcengine-cdn", "common.provider.volcengine.cdn", "/imgs/providers/volcengine.svg"], - ["byteplus-cdn", "common.provider.byteplus.cdn", "/imgs/providers/byteplus.svg"], + /* + 注意:此处的顺序决定显示在前端的顺序。 + NOTICE: The following order determines the order displayed at the frontend. + */ + [`${ACCESS_PROVIDER_TYPE_LOCAL}`, "common.provider.local", "/imgs/providers/local.svg"], + [`${ACCESS_PROVIDER_TYPE_SSH}`, "common.provider.ssh", "/imgs/providers/ssh.svg"], + [`${ACCESS_PROVIDER_TYPE_ALIYUN}-oss`, "common.provider.aliyun.oss", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_TYPE_ALIYUN}-cdn`, "common.provider.aliyun.cdn", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_TYPE_ALIYUN}-dcdn`, "common.provider.aliyun.dcdn", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_TYPE_ALIYUN}-clb`, "common.provider.aliyun.clb", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_TYPE_ALIYUN}-alb`, "common.provider.aliyun.alb", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_TYPE_ALIYUN}-nlb`, "common.provider.aliyun.nlb", "/imgs/providers/aliyun.svg"], + [`${ACCESS_PROVIDER_TYPE_TENCENTCLOUD}-cdn`, "common.provider.tencentcloud.cdn", "/imgs/providers/tencentcloud.svg"], + [`${ACCESS_PROVIDER_TYPE_TENCENTCLOUD}-ecdn`, "common.provider.tencentcloud.ecdn", "/imgs/providers/tencentcloud.svg"], + [`${ACCESS_PROVIDER_TYPE_TENCENTCLOUD}-clb`, "common.provider.tencentcloud.clb", "/imgs/providers/tencentcloud.svg"], + [`${ACCESS_PROVIDER_TYPE_TENCENTCLOUD}-cos`, "common.provider.tencentcloud.cos", "/imgs/providers/tencentcloud.svg"], + [`${ACCESS_PROVIDER_TYPE_TENCENTCLOUD}-eo`, "common.provider.tencentcloud.eo", "/imgs/providers/tencentcloud.svg"], + [`${ACCESS_PROVIDER_TYPE_HUAWEICLOUD}-cdn`, "common.provider.huaweicloud.cdn", "/imgs/providers/huaweicloud.svg"], + [`${ACCESS_PROVIDER_TYPE_HUAWEICLOUD}-elb`, "common.provider.huaweicloud.elb", "/imgs/providers/huaweicloud.svg"], + [`${ACCESS_PROVIDER_TYPE_BAIDUCLOUD}-cdn`, "common.provider.baiducloud.cdn", "/imgs/providers/baiducloud.svg"], + [`${ACCESS_PROVIDER_TYPE_VOLCENGINE}-cdn`, "common.provider.volcengine.cdn", "/imgs/providers/volcengine.svg"], + [`${ACCESS_PROVIDER_TYPE_VOLCENGINE}-live`, "common.provider.volcengine.live", "/imgs/providers/volcengine.svg"], + [`${ACCESS_PROVIDER_TYPE_QINIU}-cdn`, "common.provider.qiniu.cdn", "/imgs/providers/qiniu.svg"], + [`${ACCESS_PROVIDER_TYPE_DOGECLOUD}-cdn`, "common.provider.dogecloud.cdn", "/imgs/providers/dogecloud.svg"], + [`${ACCESS_PROVIDER_TYPE_BYTEPLUS}-cdn`, "common.provider.byteplus.cdn", "/imgs/providers/byteplus.svg"], + [`${ACCESS_PROVIDER_TYPE_KUBERNETES}-secret`, "common.provider.kubernetes.secret", "/imgs/providers/kubernetes.svg"], + [`${ACCESS_PROVIDER_TYPE_WEBHOOK}`, "common.provider.webhook", "/imgs/providers/webhook.svg"], ]; export const deployTargetsMap: Map = new Map( diff --git a/ui/src/pages/certificates/CertificateList.tsx b/ui/src/pages/certificates/CertificateList.tsx index 76ad990e..63abcefb 100644 --- a/ui/src/pages/certificates/CertificateList.tsx +++ b/ui/src/pages/certificates/CertificateList.tsx @@ -10,7 +10,7 @@ import { ClientResponseError } from "pocketbase"; import CertificateDetailDrawer from "@/components/certificate/CertificateDetailDrawer"; import { CertificateModel } from "@/domain/certificate"; -import { list as listCertificate, type CertificateListReq } from "@/repository/certificate"; +import { list as listCertificate, type ListCertificateRequest } from "@/repository/certificate"; import { getErrMsg } from "@/utils/error"; const CertificateList = () => { @@ -183,7 +183,7 @@ const CertificateList = () => { return listCertificate({ page: page, perPage: pageSize, - state: filters["state"] as CertificateListReq["state"], + state: filters["state"] as ListCertificateRequest["state"], }); }, { diff --git a/ui/src/repository/certificate.ts b/ui/src/repository/certificate.ts index d37e10ca..a0418a98 100644 --- a/ui/src/repository/certificate.ts +++ b/ui/src/repository/certificate.ts @@ -6,17 +6,17 @@ import { getPocketBase } from "./pocketbase"; const COLLECTION_NAME = "certificate"; -export type CertificateListReq = { +export type ListCertificateRequest = { page?: number; perPage?: number; state?: "expireSoon" | "expired"; }; -export const list = async (req: CertificateListReq) => { +export const list = async (request: ListCertificateRequest) => { const pb = getPocketBase(); - const page = req.page || 1; - const perPage = req.perPage || 10; + const page = request.page || 1; + const perPage = request.perPage || 10; const options: RecordListOptions = { sort: "-created", @@ -24,11 +24,11 @@ export const list = async (req: CertificateListReq) => { requestKey: null, }; - if (req.state === "expireSoon") { + if (request.state === "expireSoon") { options.filter = pb.filter("expireAt<{:expiredAt}", { expiredAt: dayjs().add(15, "d").toDate(), }); - } else if (req.state === "expired") { + } else if (request.state === "expired") { options.filter = pb.filter("expireAt<={:expiredAt}", { expiredAt: new Date(), }); diff --git a/ui/src/repository/workflow.ts b/ui/src/repository/workflow.ts index 8688a39a..4381b362 100644 --- a/ui/src/repository/workflow.ts +++ b/ui/src/repository/workflow.ts @@ -1,25 +1,25 @@ import { type RecordListOptions } from "pocketbase"; -import { type WorkflowModel, type WorkflowNode, type WorkflowRunLog } from "@/domain/workflow"; +import { type WorkflowModel, type WorkflowNode } from "@/domain/workflow"; import { getPocketBase } from "./pocketbase"; const COLLECTION_NAME = "workflow"; -export type WorkflowListReq = { +export type ListWorkflowRequest = { page?: number; perPage?: number; enabled?: boolean; }; -export const list = async (req: WorkflowListReq) => { +export const list = async (request: ListWorkflowRequest) => { const pb = getPocketBase(); - const page = req.page || 1; - const perPage = req.perPage || 10; + const page = request.page || 1; + const perPage = request.perPage || 10; const options: RecordListOptions = { sort: "-created" }; - if (req.enabled != null) { - options.filter = pb.filter("enabled={:enabled}", { enabled: req.enabled }); + if (request.enabled != null) { + options.filter = pb.filter("enabled={:enabled}", { enabled: request.enabled }); } return await pb.collection(COLLECTION_NAME).getList(page, perPage, options); @@ -42,21 +42,3 @@ export const save = async (record: Record) => { return await getPocketBase().collection(COLLECTION_NAME).delete(record.id); }; - -type WorkflowLogsReq = { - id: string; - page?: number; - perPage?: number; -}; - -export const logs = async (req: WorkflowLogsReq) => { - const page = req.page || 1; - const perPage = req.perPage || 10; - - return await getPocketBase() - .collection("workflow_run_log") - .getList(page, perPage, { - sort: "-created", - filter: getPocketBase().filter("workflow={:workflowId}", { workflowId: req.id }), - }); -}; diff --git a/ui/src/repository/workflowRunLog.ts b/ui/src/repository/workflowRunLog.ts new file mode 100644 index 00000000..b32b4efe --- /dev/null +++ b/ui/src/repository/workflowRunLog.ts @@ -0,0 +1,20 @@ +import { type WorkflowRunLog } from "@/domain/workflow"; +import { getPocketBase } from "./pocketbase"; + +export type ListWorkflowLogsRequest = { + id: string; + page?: number; + perPage?: number; +}; + +export const list = async (request: ListWorkflowLogsRequest) => { + const page = request.page || 1; + const perPage = request.perPage || 10; + + return await getPocketBase() + .collection("workflow_run_log") + .getList(page, perPage, { + filter: getPocketBase().filter("workflow={:workflowId}", { workflowId: request.id }), + sort: "-created", + }); +};