import type { HttpContext } from '@adonisjs/core/http' import composeService from '#services/compose_service' import { actor, audit } from '#services/audit' import { updateComposeValidator } from '#validators/compose' const SAVE_ACTION = 'Modification du docker-compose.yml' /** * The docker-compose.yml of a container, from the container page. */ export default class ComposeController { async show({ params }: HttpContext) { return composeService.show(params.id) } async version({ params }: HttpContext) { return composeService.version(params.id, Number(params.versionId)) } async update(ctx: HttpContext) { const { content, reason, apply } = await ctx.request.validateUsing(updateComposeValidator) const target = await composeService.locate(ctx.params.id) const result = await composeService.save(target, content, { ...actor(ctx), reason: reason || 'Modification manuelle', apply, }) if (!result.ok) { await audit(ctx, { action: SAVE_ACTION, target: target.file, status: 'error', output: result.output, }) return ctx.response.unprocessableEntity({ message: 'docker compose a refusé le fichier : rien n’a été modifié.', output: result.output, }) } /** * When applied, the job records the action itself. */ if (result.changed && result.jobId === null) { await audit(ctx, { action: SAVE_ACTION, target: target.file, status: 'success', output: result.output || null, }) } return result } }