tethys.backend/app/exceptions/handler.ts
Arno Kaimbacher 9368a0dd8d
All checks were successful
Gitea Actions Demo / Explore-Gitea-Actions (push) Successful in 40s
Squashed commit of the following:
commit 579f0878e5240dc17db69be1e0b0c0f5af7ef9fe
Author: Arno Kaimbacher <arno.kaimbacher@geosphere.at>
Date:   Tue Jun 9 09:25:44 2026 +0200

    feat: Refactor error handling in Dataset Edit form and improve validation messages

    - Updated error handling in the Dataset Edit form to use a centralized formatError function for displaying validation messages.
    - Enhanced user feedback by ensuring that error messages are displayed consistently across various fields.
    - Modified the validation rule for arrayContainsTypes to provide clearer error messages for missing main and translated titles/abstracts.
    - Introduced a new ValidationService to manage manual construction of validation errors.
    - Updated Vite configuration to streamline asset loading and improve performance.
    - Adjusted Inertia setup to utilize dynamic imports for page-specific assets.
    - Cleaned up unnecessary comments and code in various files for better readability.

commit 5efddc2a58c0e164fef585cc7344c06155dbc2c1
Author: Arno Kaimbacher <arno.kaimbacher@geosphere.at>
Date:   Mon Jan 12 17:02:47 2026 +0100

    feat: add dataset change detection and form submission composables

    - Implemented `useDatasetChangeDetection` for tracking unsaved changes in dataset forms, including comparisons for licenses, basic properties, files, coverage, and more.
    - Added `useDatasetFormSubmission` for handling dataset form submissions with validation, success/error handling, and auto-save functionality.
2026-06-09 09:35:15 +02:00

53 lines
No EOL
1.9 KiB
TypeScript

import app from '@adonisjs/core/services/app'
import { HttpContext, ExceptionHandler } from '@adonisjs/core/http'
import type { StatusPageRange, StatusPageRenderer } from '@adonisjs/core/types/http'
export default class HttpExceptionHandler extends ExceptionHandler {
protected debug = !app.inProduction
protected renderStatusPages = true
protected statusPages: Record<StatusPageRange, StatusPageRenderer> = {
'404': (error, ctx) =>
ctx.inertia
? ctx.inertia.render('Errors/ServerError', { error: error.message, code: error.status })
: ctx.response.status(error.status).send(error.message),
'401..403': (error, ctx) => {
if (ctx.inertia) {
return ctx.inertia.render('Errors/ServerError', { error: error.message, code: error.status });
}
return ctx.response.status(error.status).send(error.message);
},
'500..599': (error, ctx) => {
const isDbError =
error.code === 'ECONNREFUSED' &&
(error.errors?.some((e: any) => e.port === 5432) ?? error.message?.includes('5432'));
if (isDbError && ctx.inertia) {
return ctx.inertia.render('Errors/postgres_error', {
status: 'error',
message: 'PostgreSQL database connection failed.',
details: {
code: error.code,
type: error.status
// Entferne das .map() auf error.errors, da es oft undefined ist
}
});
}
if (ctx.inertia) {
return ctx.inertia.render('Errors/ServerError', { error: error.message, code: 500 });
}
return ctx.response.status(500).send(error.message);
}
};
public async handle(error: any, ctx: HttpContext) {
/**
* WICHTIG: Validierungsfehler (422) NICHT manuell abfangen!
* AdonisJS 6 + VineJS + Inertia machen das automatisch.
* Wenn du es hier manuell machst, überschreibst du den Standard-Flow.
*/
return super.handle(error, ctx)
}
}