diff --git a/app/controllers/commands_controller.ts b/app/controllers/commands_controller.ts index 4c33bee..ba024e4 100644 --- a/app/controllers/commands_controller.ts +++ b/app/controllers/commands_controller.ts @@ -28,4 +28,12 @@ export default class CommandsController { return response.status(201).json(command) } + + async destroy({ params, response }: HttpContext) { + const deleted = await this.commandService.deleteCommand(params.id) + if (!deleted) { + return response.status(404).json({ error: 'Command not found' }) + } + return response.status(204).send('') + } } diff --git a/inertia/pages/Commands.vue b/inertia/pages/Commands.vue index 3a57ceb..53e563b 100644 --- a/inertia/pages/Commands.vue +++ b/inertia/pages/Commands.vue @@ -3,6 +3,7 @@ import { ref, computed } from 'vue' import { router, Link } from '@inertiajs/vue3' import { useI18n } from 'vue-i18n' import TitleBar from '../components/TitleBar.vue' +import { fetchWithCsrf } from '../helpers/fetch_with_csrf' const { t } = useI18n() @@ -50,6 +51,27 @@ function removeFilter(key: keyof typeof localFilters.value) { localFilters.value[key] = '' applyFilters() } + +const deletingId = ref(null) +const deleteError = ref('') + +async function deleteCommand(id: string) { + if (!confirm('Supprimer cette commande PENDING ?')) return + deletingId.value = id + deleteError.value = '' + try { + const response = await fetchWithCsrf(`/internal/commands/${id}`, { method: 'DELETE' }) + if (!response.ok) { + const payload = await response.json().catch(() => ({})) + throw new Error(payload.error || 'Échec de la suppression') + } + router.reload({ preserveState: true }) + } catch (e) { + deleteError.value = e instanceof Error ? e.message : 'Erreur inconnue' + } finally { + deletingId.value = null + } +}