52 lines
1.7 KiB
TypeScript
52 lines
1.7 KiB
TypeScript
import type { HttpContext } from '@adonisjs/core/http'
|
|
import vpsConfig from '#config/vps'
|
|
import UserError from '#exceptions/user_error'
|
|
import projectService, { PROJECT_ACTIONS, type ProjectAction } from '#services/project_service'
|
|
import { DEFAULT_NODE_COMMAND } from '#services/templates'
|
|
import { actor } from '#services/audit'
|
|
import { createProjectValidator, projectActionValidator } from '#validators/project'
|
|
|
|
export default class ProjectsController {
|
|
async index() {
|
|
return projectService.list()
|
|
}
|
|
|
|
/**
|
|
* Values used by the "new project" form.
|
|
*/
|
|
async options() {
|
|
return {
|
|
baseDomain: vpsConfig.baseDomain,
|
|
categories: vpsConfig.projectCategories,
|
|
srvRoot: vpsConfig.srvRoot,
|
|
defaultNodeCommand: DEFAULT_NODE_COMMAND,
|
|
}
|
|
}
|
|
|
|
async show({ params }: HttpContext) {
|
|
const project = await projectService.find(params.category, params.name)
|
|
return projectService.details(project)
|
|
}
|
|
|
|
async fetch({ params }: HttpContext) {
|
|
const project = await projectService.find(params.category, params.name)
|
|
return projectService.fetch(project)
|
|
}
|
|
|
|
async action(ctx: HttpContext) {
|
|
const action = ctx.params.action as ProjectAction
|
|
if (!PROJECT_ACTIONS.includes(action)) throw new UserError('Action inconnue.', 404)
|
|
|
|
const { commit } = await ctx.request.validateUsing(projectActionValidator)
|
|
const project = await projectService.find(ctx.params.category, ctx.params.name)
|
|
const job = await projectService.runAction(project, action, { commit }, actor(ctx))
|
|
return { jobId: job.id }
|
|
}
|
|
|
|
async store(ctx: HttpContext) {
|
|
const input = await ctx.request.validateUsing(createProjectValidator)
|
|
const job = await projectService.create(input, actor(ctx))
|
|
return { jobId: job.id }
|
|
}
|
|
}
|