Skip to content

Commit 232387c

Browse files
fixed build issues
1 parent 736b475 commit 232387c

File tree

5 files changed

+59
-13
lines changed

5 files changed

+59
-13
lines changed

src/admin/admin.controller.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
1-
import { Controller, Get, Query, DefaultValuePipe, ParseIntPipe, UseGuards } from '@nestjs/common';
2-
import { LogsService } from '../common/logs/logs.service';
1+
import {
2+
Controller,
3+
Get,
4+
Query,
5+
DefaultValuePipe,
6+
ParseIntPipe,
7+
UseGuards,
8+
} from '@nestjs/common';
9+
import { LogsService } from '../common/logging/logs.service';
310
import { RolesGuard } from '../common/guards/roles.guard';
411
import { Roles } from '../common/decorators/roles.decorator';
512

@@ -10,8 +17,9 @@ export class AdminController {
1017
@Get('logs')
1118
@UseGuards(RolesGuard)
1219
@Roles('admin')
13-
getLogs(@Query('limit', new DefaultValuePipe(20), ParseIntPipe) limit: number) {
20+
getLogs(
21+
@Query('limit', new DefaultValuePipe(20), ParseIntPipe) limit: number,
22+
) {
1423
return this.logs.list(limit);
1524
}
1625
}
17-

src/app.module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import { ReadingModule } from './reading/reading.module';
99
import { AuthModule } from './auth/auth.module';
1010
import { GlobalJwtAuthGuard } from './common/guards/global-jwt-auth.guard';
1111
import { AdminController } from './admin/admin.controller';
12-
import { LogsService } from './common/logs/logs.service';
12+
import { LogsService } from './common/logging/logs.service';
1313
import { RolesGuard } from './common/guards/roles.guard';
1414
import { FriendsModule } from './friends/friends.module';
1515

src/common/interceptors/logging.interceptor.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
1-
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
1+
import {
2+
CallHandler,
3+
ExecutionContext,
4+
Injectable,
5+
NestInterceptor,
6+
} from '@nestjs/common';
27
import { Observable, tap } from 'rxjs';
3-
import { LogsService } from '../logs/logs.service';
8+
import { LogsService } from '../logging/logs.service';
49

510
@Injectable()
611
export class LoggingInterceptor implements NestInterceptor {
@@ -35,4 +40,3 @@ export class LoggingInterceptor implements NestInterceptor {
3540
);
3641
}
3742
}
38-

src/common/logging/logs.service.ts

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { Injectable } from '@nestjs/common';
2+
3+
export interface RequestLog {
4+
method: string;
5+
url: string;
6+
status: number;
7+
ms: number;
8+
at: string;
9+
}
10+
11+
@Injectable()
12+
export class LogsService {
13+
private buffer: RequestLog[] = [];
14+
private readonly max = 100;
15+
16+
add(entry: RequestLog) {
17+
this.buffer.push(entry);
18+
if (this.buffer.length > this.max) this.buffer.shift();
19+
}
20+
21+
list(limit = 15) {
22+
return this.buffer.slice(-limit).reverse();
23+
}
24+
}

src/main.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,32 @@ import { Request, Response } from 'express';
77
import { LoggingInterceptor } from './common/interceptors/logging.interceptor';
88
import { TransformInterceptor } from './common/interceptors/transform.interceptor';
99
import { HttpExceptionFilter } from './common/filters/http-exception.filter';
10-
import { LogsService } from './common/logs/logs.service';
10+
import { LogsService } from './common/logging/logs.service';
1111

1212
async function bootstrap() {
1313
const app = await NestFactory.create<NestExpressApplication>(AppModule);
1414
app.enableCors({ origin: '*', credentials: true });
15-
app.useGlobalPipes(new ValidationPipe({ transform: true, transformOptions: { enableImplicitConversion: true } }));
15+
app.useGlobalPipes(
16+
new ValidationPipe({
17+
transform: true,
18+
transformOptions: { enableImplicitConversion: true },
19+
}),
20+
);
1621
const logs = app.get(LogsService);
17-
app.useGlobalInterceptors(new LoggingInterceptor(logs), new TransformInterceptor());
22+
app.useGlobalInterceptors(
23+
new LoggingInterceptor(logs),
24+
new TransformInterceptor(),
25+
);
1826
app.useGlobalFilters(new HttpExceptionFilter());
1927
// Serve static UI from the project root "public" folder regardless of build output location
2028
const publicDir = join(process.cwd(), 'public');
2129
app.useStaticAssets(publicDir);
2230
const server = app.getHttpAdapter().getInstance();
2331
// SPA fallback: exclude API routes
24-
server.get(/^(?!\/(?:api|users|books|reading|auth|admin|friends)).*/, (req: Request, res: Response) =>
25-
res.sendFile(join(publicDir, 'index.html')),
32+
server.get(
33+
/^(?!\/(?:api|users|books|reading|auth|admin|friends)).*/,
34+
(req: Request, res: Response) =>
35+
res.sendFile(join(publicDir, 'index.html')),
2636
);
2737

2838
const port = Number(process.env.PORT) || 3000;

0 commit comments

Comments
 (0)