- Implemented file upload functionality for datasets using multipart requests. - Added file size and type validation using VineJS. - Added file name length validation. - Added file scan to remove infected files. - Implemented aggregated upload limit to prevent exceeding the server's capacity. - Added error handling for file upload failures, including temporary file cleanup. - Updated the `DatasetController` to handle file uploads, validation, and database transactions. - Updated the `bodyparser.ts` config to process the file upload manually. - Updated the `api.ts` routes to fetch the statistic data. - Updated the `main.ts` store to fetch the statistic data. - Updated the `Dashboard.vue` to display the submitters only for administrator role. - Updated the `CardBoxWidget.vue` to display the submitters. - Updated the `ServerError.vue` to use the LayoutGuest.vue. - Updated the `AuthController.ts` and `start/routes.ts` to handle the database connection errors. - Updated the `app/exceptions/handler.ts` to handle the database connection errors. - Updated the `package.json` to use the correct version of the `@adonisjs/bodyparser`.
43 lines
1.5 KiB
TypeScript
43 lines
1.5 KiB
TypeScript
// import { Exception } from '@adonisjs/core/exceptions'
|
|
import { HttpContext, ExceptionHandler } from '@adonisjs/core/http';
|
|
|
|
export default class DbHandlerException extends ExceptionHandler {
|
|
// constructor() {
|
|
// super(Logger)
|
|
// }
|
|
|
|
async handle(error: any, ctx: HttpContext) {
|
|
// Check for AggregateError type
|
|
if (error.type === 'AggregateError' && error.aggregateErrors) {
|
|
const dbErrors = error.aggregateErrors.some((err: any) => err.code === 'ECONNREFUSED' && err.port === 5432);
|
|
|
|
if (dbErrors) {
|
|
return ctx.response.status(503).json({
|
|
status: 'error',
|
|
message: 'PostgreSQL database connection failed. Please ensure the database service is running.',
|
|
details: {
|
|
code: error.code,
|
|
type: error.type,
|
|
ports: error.aggregateErrors.map((err: any) => ({
|
|
port: err.port,
|
|
address: err.address,
|
|
})),
|
|
},
|
|
});
|
|
}
|
|
}
|
|
|
|
// Handle simple ECONNREFUSED errors
|
|
if (error.code === 'ECONNREFUSED') {
|
|
return ctx.response.status(503).json({
|
|
status: 'error',
|
|
message: 'Database connection failed. Please ensure PostgreSQL is running.',
|
|
code: error.code,
|
|
});
|
|
}
|
|
|
|
return super.handle(error, ctx);
|
|
}
|
|
|
|
static status = 500;
|
|
}
|