From 9c8c7a781223f4217f45510db1e89495600e3cd5 Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 22 Dec 2024 14:01:10 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=AB=99=E7=82=B9=E8=AF=81=E4=B9=A6?= =?UTF-8?q?=E7=9B=91=E6=8E=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/modules/monitor/entity/cert-info.ts | 54 +++++++++++++++++++ .../src/modules/monitor/entity/site-info.ts | 31 ++++++++--- .../monitor/service/cert-info-service.ts | 47 ++++++++++++++++ .../monitor/service/site-info-service.ts | 25 +++++++++ 4 files changed, 150 insertions(+), 7 deletions(-) create mode 100644 packages/ui/certd-server/src/modules/monitor/entity/cert-info.ts create mode 100644 packages/ui/certd-server/src/modules/monitor/service/cert-info-service.ts create mode 100644 packages/ui/certd-server/src/modules/monitor/service/site-info-service.ts diff --git a/packages/ui/certd-server/src/modules/monitor/entity/cert-info.ts b/packages/ui/certd-server/src/modules/monitor/entity/cert-info.ts new file mode 100644 index 00000000..2f5e3a5a --- /dev/null +++ b/packages/ui/certd-server/src/modules/monitor/entity/cert-info.ts @@ -0,0 +1,54 @@ +import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity('cd_cert_info') +export class CertInfoEntity { + @PrimaryGeneratedColumn() + id: number; + + @Column({ name: 'user_id', comment: '用户id' }) + userId: number; + + @Column({ name: 'domain', comment: '主域名' }) + domain: string; + + @Column({ name: 'domains', comment: '域名' }) + domains: string; + + @Column({ name: 'domain_count', comment: '域名数量' }) + domainCount: number; + + @Column({ name: 'pipeline_id', comment: '关联流水线id' }) + pipelineId: number; + + @Column({ name: 'apply_time', comment: '申请时间' }) + applyTime: string; + + @Column({ name: 'from_type', comment: '来源' }) + fromType: string; + + @Column({ name: 'cert_provider', comment: '证书颁发机构' }) + certProvider: string; + + @Column({ name: 'expires_time', comment: '过期时间' }) + expiresTime: number; + + @Column({ name: 'cert_info', comment: '证书详情' }) + certInfo: string; + + @Column({ name: 'cert_file', comment: '证书下载' }) + certFile: string; + + @Column({ + name: 'create_time', + comment: '创建时间', + default: () => 'CURRENT_TIMESTAMP', + }) + createTime: Date; + + @Column({ + name: 'update_time', + comment: '修改时间', + default: () => 'CURRENT_TIMESTAMP', + }) + updateTime: Date; +} diff --git a/packages/ui/certd-server/src/modules/monitor/entity/site-info.ts b/packages/ui/certd-server/src/modules/monitor/entity/site-info.ts index 01d33c54..e6c9f726 100644 --- a/packages/ui/certd-server/src/modules/monitor/entity/site-info.ts +++ b/packages/ui/certd-server/src/modules/monitor/entity/site-info.ts @@ -1,8 +1,8 @@ -import { Column, PrimaryGeneratedColumn } from 'typeorm'; +import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; /** */ -// @Entity('cd_site_info') +@Entity('cd_site_info') export class SiteInfoEntity { @PrimaryGeneratedColumn() id: number; @@ -12,16 +12,33 @@ export class SiteInfoEntity { name: string; @Column({ comment: '域名', length: 100 }) domain: string; - @Column({ name: 'cert_info', comment: '证书详情', length: 1000 }) + @Column({ comment: '其他域名', length: 4096 }) + domains: string; + + @Column({ name: 'cert_info', comment: '证书详情', length: 4096 }) certInfo: string; @Column({ name: 'cert_status', comment: '证书状态', length: 100 }) certStatus: string; - @Column({ name: 'cert_valid_to', comment: '证书到期时间', length: 100 }) - certValidTo: Date; - @Column({ name: 'last_time', comment: '上次检查时间' }) - lastTime: Date; + + @Column({ name: 'cert_provider', comment: '证书颁发机构', length: 100 }) + certProvider: string; + + @Column({ name: 'cert_expires_time', comment: '证书到期时间' }) + certExpiresTime: number; + @Column({ name: 'last_check_time', comment: '上次检查时间' }) + lastCheckTime: number; + @Column({ name: 'check_status', comment: '检查状态' }) + checkStatus: string; + @Column({ name: 'pipeline_id', comment: '关联流水线id' }) pipelineId: number; + + @Column({ name: 'cert_info_id', comment: '证书id' }) + certInfoId: number; + + @Column({ name: 'disabled', comment: '禁用启用' }) + disabled: boolean; + @Column({ name: 'create_time', comment: '创建时间', default: () => 'CURRENT_TIMESTAMP' }) createTime: Date; @Column({ name: 'update_time', comment: '修改时间', default: () => 'CURRENT_TIMESTAMP' }) diff --git a/packages/ui/certd-server/src/modules/monitor/service/cert-info-service.ts b/packages/ui/certd-server/src/modules/monitor/service/cert-info-service.ts new file mode 100644 index 00000000..8f518823 --- /dev/null +++ b/packages/ui/certd-server/src/modules/monitor/service/cert-info-service.ts @@ -0,0 +1,47 @@ +import { Provide } from '@midwayjs/core'; +import { BaseService } from '@certd/lib-server'; +import { InjectEntityModel } from '@midwayjs/typeorm'; +import { Repository } from 'typeorm'; +import { CertInfoEntity } from '../entity/cert-info.js'; + +@Provide() +export class CertInfoService extends BaseService { + @InjectEntityModel(CertInfoEntity) + repository: Repository; + + //@ts-ignore + getRepository() { + return this.repository; + } + + async getUserDomainCount(userId: number) { + if (!userId) { + throw new Error('userId is required'); + } + return await this.repository.sum('domainCount', { + userId, + }); + } + + async updateDomains(pipelineId: number, domains: string[]) { + const found = await this.repository.findOne({ + where: { + pipelineId, + }, + }); + const bean = new CertInfoEntity(); + if (found) { + //bean + bean.id = found.id; + } else { + //create + bean.pipelineId = pipelineId; + } + + bean.domain = domains[0]; + bean.domains = domains.join(','); + bean.domainCount = domains.length; + + await this.addOrUpdate(bean); + } +} diff --git a/packages/ui/certd-server/src/modules/monitor/service/site-info-service.ts b/packages/ui/certd-server/src/modules/monitor/service/site-info-service.ts new file mode 100644 index 00000000..38cd2460 --- /dev/null +++ b/packages/ui/certd-server/src/modules/monitor/service/site-info-service.ts @@ -0,0 +1,25 @@ +import { Provide } from '@midwayjs/core'; +import { BaseService } from '@certd/lib-server'; +import { InjectEntityModel } from '@midwayjs/typeorm'; +import { Repository } from 'typeorm'; +import { SiteInfoEntity } from '../entity/site-info.js'; + +@Provide() +export class SiteInfoService extends BaseService { + @InjectEntityModel(SiteInfoEntity) + repository: Repository; + + //@ts-ignore + getRepository() { + return this.repository; + } + + async getUserMonitorCount(userId: number) { + if (!userId) { + throw new Error('userId is required'); + } + return await this.repository.count({ + where: { userId }, + }); + } +}