diff --git a/apps/server/README.md b/apps/server/README.md new file mode 100644 index 0000000..bd4ab50 --- /dev/null +++ b/apps/server/README.md @@ -0,0 +1,7 @@ + +## 表 +- user +- project +- pipeline +- deployment +- runner diff --git a/apps/server/controllers/deployment/index.ts b/apps/server/controllers/deployment/index.ts new file mode 100644 index 0000000..336b47a --- /dev/null +++ b/apps/server/controllers/deployment/index.ts @@ -0,0 +1,45 @@ +import { Controller, Get, Post } from '../../decorators/route.ts'; +import type { Prisma } from '../../generated/prisma/index.js'; +import prisma from '../../libs/db.ts'; +import type { Context } from 'koa'; + +@Controller('/deployments') +export class DeploymentController { + @Get('') + async list(ctx: Context) { + const { page = 1, pageSize = 10 } = ctx.query; + const result = await prisma.deployment.findMany({ + where: { + valid: 1, + }, + take: Number(pageSize), + skip: (Number(page) - 1) * Number(pageSize), + orderBy: { + createdAt: 'desc', + }, + }); + const total = await prisma.deployment.count(); + + return { + data: result, + page: Number(page), + pageSize: Number(pageSize), + total: total, + }; + } + + @Post('') + async create(ctx: Context) { + const body = ctx.request.body as Prisma.DeploymentCreateInput; + + prisma.deployment.create({ + data: { + branch: body.branch, + commitHash: body.commitHash, + commitMessage: body.commitMessage, + + valid: 1, + }, + }); + } +} diff --git a/apps/server/controllers/deployment/types.ts b/apps/server/controllers/deployment/types.ts new file mode 100644 index 0000000..e69de29 diff --git a/apps/server/controllers/index.ts b/apps/server/controllers/index.ts index 32f5277..90bf3e8 100644 --- a/apps/server/controllers/index.ts +++ b/apps/server/controllers/index.ts @@ -2,3 +2,5 @@ export { ProjectController } from './project/index.ts'; export { UserController } from './user/index.ts'; export { AuthController } from './auth/index.ts'; +export { DeploymentController } from './deployment/index.ts'; +export { PipelineController } from './pipeline/index.ts' diff --git a/apps/server/controllers/pipeline/index.ts b/apps/server/controllers/pipeline/index.ts new file mode 100644 index 0000000..1f44bad --- /dev/null +++ b/apps/server/controllers/pipeline/index.ts @@ -0,0 +1,22 @@ +import type { Context } from 'koa'; +import { Controller, Get, Post } from '../../decorators/route.ts'; +import prisma from '../../libs/db.ts'; + +@Controller('/pipelines') +export class PipelineController { + @Get('/:id') + async get(ctx: Context) { + const id = ctx.params.id; + const pipeline = await prisma.pipeline.findUnique({ + where: { + id: id, + }, + }); + return pipeline; + } + + @Post('') + async create(ctx: Context) { + + } +} diff --git a/apps/server/middlewares/router.ts b/apps/server/middlewares/router.ts index 306bc3c..b1c6f14 100644 --- a/apps/server/middlewares/router.ts +++ b/apps/server/middlewares/router.ts @@ -6,6 +6,8 @@ import { ProjectController, UserController, AuthController, + DeploymentController, + PipelineController } from '../controllers/index.ts'; import { log } from '../libs/logger.ts'; @@ -38,6 +40,8 @@ export class Router implements Middleware { ProjectController, UserController, AuthController, + DeploymentController, + PipelineController ]); // 输出注册的路由信息 diff --git a/apps/server/package.json b/apps/server/package.json index ae60dde..adc536f 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -18,7 +18,8 @@ "koa-session": "^7.0.2", "pino": "^9.9.1", "pino-pretty": "^13.1.1", - "zod": "^4.1.5" + "zod": "^4.1.5", + "zx": "^8.8.2" }, "devDependencies": { "@tsconfig/node-ts": "^23.6.1", diff --git a/apps/server/prisma/data/dev.db b/apps/server/prisma/data/dev.db index 811b686..0b123cc 100644 Binary files a/apps/server/prisma/data/dev.db and b/apps/server/prisma/data/dev.db differ diff --git a/apps/server/prisma/schema.prisma b/apps/server/prisma/schema.prisma index 7b6b8a9..4e15c72 100644 --- a/apps/server/prisma/schema.prisma +++ b/apps/server/prisma/schema.prisma @@ -12,26 +12,19 @@ datasource db { } model Project { - id Int @id @default(autoincrement()) + id Int @id @default(autoincrement()) name String description String? repository String - valid Int @default(1) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - createdBy String - updatedBy String -} + // Relations + deployments Deployment[] + pipelines Pipeline[] -model Environment { - id Int @id @default(autoincrement()) - name String - description String? - valid Int @default(1) - createdAt DateTime @default(now()) - updatedAt DateTime @updatedAt - createdBy String - updatedBy String + valid Int @default(1) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + createdBy String + updatedBy String } model User { @@ -47,3 +40,56 @@ model User { createdBy String @default("system") updatedBy String @default("system") } + +model Pipeline { + id Int @id @default(autoincrement()) + name String + description String? + valid Int @default(1) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + createdBy String + updatedBy String + + // Relations + projectId Int? + Project Project? @relation(fields: [projectId], references: [id]) + steps Step[] +} + +model Step { + id Int @id @default(autoincrement()) + name String + description String? + order Int + status String? + valid Int @default(1) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + createdBy String + updatedBy String + + pipelineId Int + pipeline Pipeline @relation(fields: [pipelineId], references: [id]) +} + +model Deployment { + id Int @id @default(autoincrement()) + branch String + env String? + status String // pending, running, success, failed, cancelled + commitHash String? + commitMessage String? + buildLog String? + startedAt DateTime @default(now()) + finishedAt DateTime? + valid Int @default(1) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + createdBy String + updatedBy String + + projectId Int + Project Project? @relation(fields: [projectId], references: [id]) + pipelineId Int +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 12e3bbb..885efca 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,6 +41,9 @@ importers: zod: specifier: ^4.1.5 version: 4.1.5 + zx: + specifier: ^8.8.2 + version: 8.8.2 devDependencies: '@tsconfig/node-ts': specifier: ^23.6.1 @@ -1970,6 +1973,11 @@ packages: use-sync-external-store: optional: true + zx@8.8.2: + resolution: {integrity: sha512-JuCw+diiuDihAtDC/ClDjaP3spsOxfFAMWrSa+esdU+YnBwYGuFef+B127zQ3x2FHOFULQ4NbaX/95d5260eYQ==} + engines: {node: '>= 12.17.0'} + hasBin: true + snapshots: '@alloc/quick-lru@5.2.0': {} @@ -3752,3 +3760,5 @@ snapshots: optionalDependencies: '@types/react': 18.3.24 react: 18.3.1 + + zx@8.8.2: {}