Hair Keeper v1.0.0:一个高度集成、深度定制、约定优于配置的全栈Web应用模板,旨在保持灵活性的同时提供一套基于成熟架构的开发底座,自带身份认证、权限控制、丰富前端组件、文件上传、后台任务、智能体开发等丰富功能,提供AI开发辅助,免于纠结功能如何实现,可快速上手专注于业务逻辑
This commit is contained in:
68
src/server/routers/dev/arch.ts
Normal file
68
src/server/routers/dev/arch.ts
Normal file
@@ -0,0 +1,68 @@
|
||||
import { createTRPCRouter, permissionRequiredProcedure } from '@/server/trpc'
|
||||
import { analyzePackagesQueue } from '@/server/queues'
|
||||
import type { AnalyzePackagesProgress } from '@/server/queues'
|
||||
import { z } from 'zod'
|
||||
import { inferProcedureOutput, TRPCError } from '@trpc/server'
|
||||
|
||||
export const devArchRouter = createTRPCRouter({
|
||||
// 获取所有包类型
|
||||
getAllPkgTypes: permissionRequiredProcedure('SUPER_ADMIN_ONLY').query(async ({ ctx }) => {
|
||||
const pkgTypes = await ctx.db.devPkgType.findMany({
|
||||
orderBy: {
|
||||
order: 'asc',
|
||||
},
|
||||
})
|
||||
return pkgTypes
|
||||
}),
|
||||
|
||||
// 获取所有依赖包数据(按类型分组)
|
||||
getAllPackages: permissionRequiredProcedure('SUPER_ADMIN_ONLY').query(async ({ ctx }) => {
|
||||
// 获取所有依赖包,包含类型信息
|
||||
const packages = await ctx.db.devAnalyzedPkg.findMany({
|
||||
include: {
|
||||
pkgType: true,
|
||||
},
|
||||
orderBy: [
|
||||
{ pkgTypeId: 'asc' },
|
||||
{ relatedFileCount: 'desc' },
|
||||
],
|
||||
})
|
||||
|
||||
// 按类型分组
|
||||
const packagesByType: Record<string, typeof packages> = {}
|
||||
|
||||
packages.forEach((pkg) => {
|
||||
const typeId = pkg.pkgTypeId
|
||||
if (!packagesByType[typeId]) {
|
||||
packagesByType[typeId] = []
|
||||
}
|
||||
packagesByType[typeId].push(pkg)
|
||||
})
|
||||
|
||||
return packagesByType
|
||||
}),
|
||||
|
||||
// 启动依赖包分析任务
|
||||
startAnalyzePackages: permissionRequiredProcedure('SUPER_ADMIN_ONLY')
|
||||
.mutation(async () => {
|
||||
const job = await analyzePackagesQueue.add('analyze-packages', {})
|
||||
return { jobId: job.id }
|
||||
}),
|
||||
|
||||
// 取消依赖包分析任务
|
||||
cancelAnalyzePackagesJob: permissionRequiredProcedure('SUPER_ADMIN_ONLY')
|
||||
.input(z.object({ jobId: z.string() }))
|
||||
.mutation(async ({ input }) => {
|
||||
const job = await analyzePackagesQueue.getJob(input.jobId)
|
||||
if (!job) {
|
||||
throw new TRPCError({ code: 'NOT_FOUND', message: '任务不存在' })
|
||||
}
|
||||
|
||||
// 更新进度标记为已取消
|
||||
await job.updateProgress({ ...(job.progress as AnalyzePackagesProgress), canceled: true })
|
||||
return { success: true }
|
||||
}),
|
||||
})
|
||||
|
||||
export type DevArchRouter = typeof devArchRouter;
|
||||
export type PackageData = inferProcedureOutput<DevArchRouter['getAllPackages']>[string][number];
|
||||
Reference in New Issue
Block a user