forked from wangziqi/gongxue-base
feat(task1): restructure directories for turborepo monorepo
- Move backend/ to apps/server/ via git mv - Move frontend/ to apps/admin/ via git mv - Create packages/typescript-config/ with base, nestjs, and react-vite presets
This commit is contained in:
30
apps/server/src/operation-logs/operation-logs.controller.ts
Normal file
30
apps/server/src/operation-logs/operation-logs.controller.ts
Normal file
@@ -0,0 +1,30 @@
|
||||
import { Controller, Get, Query, UseGuards } from '@nestjs/common';
|
||||
import { OperationLogsService } from './operation-logs.service';
|
||||
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
|
||||
import { RequirePermission } from '../auth/decorators/permission.decorator';
|
||||
|
||||
@UseGuards(JwtAuthGuard)
|
||||
@RequirePermission('log:view')
|
||||
@Controller('operation-logs')
|
||||
export class OperationLogsController {
|
||||
constructor(private service: OperationLogsService) {}
|
||||
|
||||
@Get()
|
||||
findAll(
|
||||
@Query('module') module?: string,
|
||||
@Query('userId') userId?: string,
|
||||
@Query('startDate') startDate?: string,
|
||||
@Query('endDate') endDate?: string,
|
||||
@Query('page') page?: string,
|
||||
@Query('pageSize') pageSize?: string,
|
||||
) {
|
||||
return this.service.findAll({
|
||||
module,
|
||||
userId: userId ? +userId : undefined,
|
||||
startDate,
|
||||
endDate,
|
||||
page: page ? +page : 1,
|
||||
pageSize: pageSize ? +pageSize : 50,
|
||||
});
|
||||
}
|
||||
}
|
||||
14
apps/server/src/operation-logs/operation-logs.module.ts
Normal file
14
apps/server/src/operation-logs/operation-logs.module.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { Module, Global } from '@nestjs/common';
|
||||
import { TypeOrmModule } from '@nestjs/typeorm';
|
||||
import { OperationLog } from '../entities/operation-log.entity';
|
||||
import { OperationLogsService } from './operation-logs.service';
|
||||
import { OperationLogsController } from './operation-logs.controller';
|
||||
|
||||
@Global()
|
||||
@Module({
|
||||
imports: [TypeOrmModule.forFeature([OperationLog])],
|
||||
controllers: [OperationLogsController],
|
||||
providers: [OperationLogsService],
|
||||
exports: [OperationLogsService],
|
||||
})
|
||||
export class OperationLogsModule {}
|
||||
48
apps/server/src/operation-logs/operation-logs.service.ts
Normal file
48
apps/server/src/operation-logs/operation-logs.service.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
import { Repository } from 'typeorm';
|
||||
import { OperationLog } from '../entities/operation-log.entity';
|
||||
|
||||
@Injectable()
|
||||
export class OperationLogsService {
|
||||
constructor(
|
||||
@InjectRepository(OperationLog) private repo: Repository<OperationLog>,
|
||||
) {}
|
||||
|
||||
async log(params: {
|
||||
userId?: number;
|
||||
username?: string;
|
||||
module: string;
|
||||
action: string;
|
||||
targetId?: number;
|
||||
targetType?: string;
|
||||
detail?: string;
|
||||
ipAddress?: string;
|
||||
userAgent?: string;
|
||||
status?: string;
|
||||
}) {
|
||||
const entry = this.repo.create(params);
|
||||
return this.repo.save(entry);
|
||||
}
|
||||
|
||||
async findAll(query?: {
|
||||
module?: string;
|
||||
userId?: number;
|
||||
startDate?: string;
|
||||
endDate?: string;
|
||||
page?: number;
|
||||
pageSize?: number;
|
||||
}) {
|
||||
const qb = this.repo.createQueryBuilder('log')
|
||||
.orderBy('log.createdAt', 'DESC');
|
||||
if (query?.module) qb.andWhere('log.module = :module', { module: query.module });
|
||||
if (query?.userId) qb.andWhere('log.userId = :userId', { userId: query.userId });
|
||||
if (query?.startDate) qb.andWhere('log.createdAt >= :startDate', { startDate: query.startDate });
|
||||
if (query?.endDate) qb.andWhere('log.createdAt <= :endDate', { endDate: query.endDate + ' 23:59:59' });
|
||||
|
||||
const page = query?.page || 1;
|
||||
const pageSize = query?.pageSize || 50;
|
||||
const [data, total] = await qb.skip((page - 1) * pageSize).take(pageSize).getManyAndCount();
|
||||
return { data, total, page, pageSize };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user