fixing logbook page responsiveness

This commit is contained in:
2026-03-21 20:25:21 -05:00
parent a9abb5863c
commit bde20ff73b
9 changed files with 128 additions and 70 deletions

View File

@@ -1,5 +0,0 @@
import { JwtPayload } from "jwt-decode";
export interface CustomJwtPayload extends JwtPayload {
permissions: string[];
}

View File

@@ -20,6 +20,7 @@ import { LogInterceptor } from './log.interceptor';
import { FileService } from '../file/file.service';
import { DeleteResult, InsertResult, UpdateResult } from 'typeorm';
import { Reflector } from '@nestjs/core';
import { Logs } from './logs.interface';
const reflector = new Reflector();
@@ -31,9 +32,9 @@ export class LogController {
private readonly logService: LogService
) {}
@Get()
@Get()
@Public()
async findLogsWithCount(@Query('skip') skip?, @Query('take') take?: number,): Promise<{ entities: LogEntity[], total: number, hasNextPage: boolean }> {
async findLogsWithCount(@Query('skip') skip?, @Query('take') take?: number,): Promise<Logs> {
try {
return await this.logService.findLogsWithCount(skip, take)
} catch (error) {
@@ -43,13 +44,11 @@ export class LogController {
}
}
@Get('tracks')
@Get('flights')
@Public()
async findLogsWithTracks(@Query('skip') skip?, @Query('take') take?: number,): Promise<{ entities: LogEntity[], total: number, hasNextPage: boolean }> {
async findLogsWithTracks(@Query('skip') skip?, @Query('take') take?: number,): Promise<Logs> {
try {
const result = await this.logService.findLogsWithTracks(skip, take)
console.log(result);
return result
return await this.logService.findLogsWithTracks(skip, take)
} catch (error) {
const customError = error as CustomError;

View File

@@ -15,23 +15,21 @@ export class LogInterceptor implements NestInterceptor {
]);
return handler.handle().pipe(
map((data: { entities: LogEntity[], total: number, hasNextPage: boolean }) => {
map((data: any) => {
const req = context.switchToHttp().getRequest();
const limitData = (entities: LogEntity[]) => {
return entities.map((log: LogEntity) => {
return {
id: log.id,
pilot: {
name: log.pilot.name
},
date: log.date,
aircraftMakeModel: log.aircraftMakeModel,
routeFrom: log.routeFrom,
routeTo: log.routeTo,
durationOfFlight: log.durationOfFlight,
tracks: log.tracks,
};
});
const limitData = (log: LogEntity) => {
return {
id: log.id,
pilot: {
name: log.pilot.name
},
date: log.date,
aircraftMakeModel: log.aircraftMakeModel,
routeFrom: log.routeFrom,
routeTo: log.routeTo,
durationOfFlight: log.durationOfFlight,
tracks: log.tracks,
};
}
if (req.headers.authorization) {
@@ -41,25 +39,39 @@ export class LogInterceptor implements NestInterceptor {
const rolesKeyName = Object.keys(jwtPayload).find((key) => key.includes('roles'));
if (jwtPayload[rolesKeyName].includes('Flying.Read')) {
const logs = limitData(data.entities);
if (data.entities) {
const logs = data.entities.map((entity) => limitData(data.entities));
return {
entities: logs,
total: data.total,
hasNextPage: data.hasNextPage
};
return {
entities: logs,
total: data.total,
hasNextPage: data.hasNextPage
};
} else {
const log = limitData(data);
return log;
}
} else {
return data;
}
} else if (!req.headers.authorization && isPublic) {
const publicData = limitData(data.entities)
const logs = publicData.slice(0, 5)
if (data.entities) {
const publicData = data.entities.map((entity) => limitData(entity))
const logs = publicData.slice(0, 5)
return {
entities: logs,
total: data.total,
hasNextPage: data.hasNextPage
};
return {
entities: publicData,
total: data.total,
hasNextPage: false
};
} else {
const publicData = limitData(data);
return publicData
}
}
})
);

View File

@@ -7,6 +7,7 @@ import { PilotService } from '../pilot/pilot.service';
import { PilotEntity } from '../pilot/pilot.entity';
import { CustomError } from '../error/customError';
import { FileService } from '../file/file.service';
import { Logs } from './logs.interface';
@Injectable()
export class LogService {
@@ -17,15 +18,13 @@ export class LogService {
) {}
async find(id: string): Promise<LogEntity> {
const logEntity: LogEntity = await this.logRepository.findOne({
return await this.logRepository.findOne({
where: { id: id },
relations: ['pilot', 'tracks']
});
return logEntity;
}
async findLogsWithCount(skip?: number, take?: number): Promise<{entities: LogEntity[], total: number, hasNextPage: boolean}> {
async findLogsWithCount(skip?: number, take?: number): Promise<Logs> {
const [entities, total] = await this.logRepository.findAndCount({
take,
skip,
@@ -39,14 +38,14 @@ export class LogService {
}
}
async findLogsWithTracks(skip?: number, take?: number): Promise<{entities: LogEntity[], total: number, hasNextPage: boolean}> {
async findLogsWithTracks(skip?: number, take?: number): Promise<Logs> {
const [entities, total] = await this.logRepository
.createQueryBuilder('logs')
.innerJoinAndSelect('logs.tracks', 'track')
.innerJoinAndSelect('logs.pilot', 'pilot')
.orderBy('date')
.getManyAndCount();
return {
entities,
total,

View File

@@ -0,0 +1,7 @@
import { LogEntity } from "src/log/log.entity";
export interface Logs {
entities: LogEntity[],
total: number,
hasNextPage: boolean
}

View File

@@ -7,6 +7,7 @@ import { LogService } from "../log/log.service";
import { LogEntity } from "../log/log.entity";
import { CustomError } from "../error/customError";
import { FileService } from "../file/file.service";
import { Logs } from "src/log/logs.interface";
@Injectable()
export class TrackService {