Files
aman-backend/src/logging/logging.controller.ts
2022-10-22 23:24:18 +02:00

111 lines
2.7 KiB
TypeScript

import {
Controller,
Get,
Delete,
Query,
HttpException,
HttpStatus,
} from '@nestjs/common';
import { ApiQuery, ApiResponse } from '@nestjs/swagger';
import { LogEntryDto } from './dto/logentry.dto';
import { LoggingService } from './logging.service';
import { LogEntry } from './models/logentry.model';
@Controller('logging')
export class LoggingController {
constructor(private readonly loggingService: LoggingService) {}
private static logEntryToDto(entry: LogEntry): LogEntryDto {
return {
component: entry.component,
level: entry.level,
timestamp: entry.timestamp,
message: entry.message,
};
}
@Get('/all')
@ApiResponse({
status: 201,
description: 'All log entries',
type: [LogEntryDto],
})
@ApiResponse({
status: 404,
description: 'No messages found',
})
async allMessages(): Promise<LogEntryDto[]> {
return this.loggingService.allMessages().then((response) => {
if (response === null) {
throw new HttpException(
'Unable to find the log messages',
HttpStatus.NOT_FOUND,
);
}
const messages: LogEntryDto[] = [];
response.forEach((entry) =>
messages.push(LoggingController.logEntryToDto(entry)),
);
return messages;
});
}
@Get('/component')
@ApiQuery({
name: 'component',
description: 'The component filter for the messages',
type: String,
})
@ApiResponse({
status: 201,
description: 'All log entries',
type: [LogEntryDto],
})
@ApiResponse({
status: 404,
description: 'No messages found',
})
async componentMessages(
@Query('component') component: string,
): Promise<LogEntryDto[]> {
return this.loggingService.componentMessages(component).then((response) => {
if (response === null) {
throw new HttpException(
'Unable to find the log messages',
HttpStatus.NOT_FOUND,
);
}
const messages: LogEntryDto[] = [];
response.forEach((entry) =>
messages.push(LoggingController.logEntryToDto(entry)),
);
return messages;
});
}
@Delete('/deleteAll')
@ApiResponse({
status: 200,
description: 'All log entries are deleted',
})
async deleteAll(): Promise<void> {
return this.loggingService.deleteAllMessages();
}
@Delete('/deleteComponent')
@ApiQuery({
name: 'component',
description: 'The component filter for the messages',
type: String,
})
@ApiResponse({
status: 200,
description: 'All log entries are deleted',
})
async deleteComponent(@Query('component') component: string): Promise<void> {
return this.loggingService.deleteComponentMessages(component);
}
}