完成管理员获取用户列表

This commit is contained in:
2025-05-07 23:48:40 +08:00
parent 69c40c39aa
commit 6b520924ea
8 changed files with 115 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
import { Test, TestingModule } from '@nestjs/testing';
import { AdminController } from './admin.controller';
describe('AdminController', () => {
let controller: AdminController;
beforeEach(async () => {
const module: TestingModule = await Test.createTestingModule({
controllers: [AdminController],
}).compile();
controller = module.get<AdminController>(AdminController);
});
it('should be defined', () => {
expect(controller).toBeDefined();
});
});

View File

@@ -0,0 +1,4 @@
import { Controller } from '@nestjs/common';
@Controller('admin')
export class AdminController {}

View File

@@ -0,0 +1,22 @@
import { Module } from '@nestjs/common';
import { AdminController } from './admin.controller';
import { AdminUserController } from './controller/admin-user.controller';
import { AdminUserService } from './service/admin-user.service';
import { TypeOrmModule } from '@nestjs/typeorm';
import { User } from 'src/user/entities/user.entity';
@Module({
imports: [
TypeOrmModule.forFeature([
User,
])
],
controllers: [
AdminController,
AdminUserController,
],
providers: [
AdminUserService,
]
})
export class AdminModule { }

View File

@@ -0,0 +1,18 @@
import { Controller, Get, Query } from "@nestjs/common";
import { AdminUserService } from "../service/admin-user.service";
import { ListDto } from "../dto/admin-user/list.dto";
@Controller('admin/user')
export class AdminUserController {
constructor(
private readonly adminUserService: AdminUserService,
) { }
@Get()
async list(
@Query() listDto: ListDto
) {
return this.adminUserService.getUser(listDto.page, listDto.pageSize);
}
}

View File

@@ -0,0 +1,5 @@
import { PaginationDto } from "../common/pagination.dto";
export class ListDto extends PaginationDto {
}

View File

@@ -0,0 +1,16 @@
import { Type } from 'class-transformer';
import { IsInt, IsOptional, Max, Min } from 'class-validator';
export class PaginationDto {
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
page?: number = 1;
@IsOptional()
@Type(() => Number)
@IsInt()
@Min(1)
pageSize?: number = 20;
}

View File

@@ -0,0 +1,30 @@
import { Injectable } from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { User } from "src/user/entities/user.entity";
import { Repository } from "typeorm";
@Injectable()
export class AdminUserService {
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>,
) { }
async getUser(page = 1, pageSize = 20) {
const queryBuilder = this.userRepository.createQueryBuilder('user')
queryBuilder.orderBy('user.createdAt', 'DESC');
queryBuilder.skip((page - 1) * pageSize);
queryBuilder.take(pageSize);
const [items, total] = await queryBuilder.getManyAndCount();
return {
items,
total,
page,
pageSize,
}
}
}

View File

@@ -11,6 +11,7 @@ import { PassportModule } from '@nestjs/passport';
import { ResourceModule } from './resource/resource.module';
import { BlogModule } from './blog/blog.module';
import { RoleModule } from './role/role.module';
import { AdminModule } from './admin/admin.module';
@Module({
imports: [
@@ -34,6 +35,7 @@ import { RoleModule } from './role/role.module';
ResourceModule,
BlogModule,
RoleModule,
AdminModule,
],
controllers: [AppController],
providers: [AppService],