ok
This commit is contained in:
91
src/users/users.controller.ts
Normal file
91
src/users/users.controller.ts
Normal file
@@ -0,0 +1,91 @@
|
||||
import {
|
||||
Body,
|
||||
Controller,
|
||||
Get,
|
||||
Param,
|
||||
Patch,
|
||||
Post,
|
||||
Query,
|
||||
Req,
|
||||
Res,
|
||||
} from '@nestjs/common';
|
||||
import { Request, Response } from 'express';
|
||||
import { UsersService } from './users.service';
|
||||
import { CreateUserDto } from './dto/create-user.dto';
|
||||
import { UpdateUserNameDto } from './dto/update-user-name.dto';
|
||||
import { UpdateUserRoleDto } from './dto/update-user-role.dto';
|
||||
import { Roles } from '../common/decorators/roles.decorator';
|
||||
import { UserRole } from './entities/user.entity';
|
||||
|
||||
@Controller('users')
|
||||
@Roles(UserRole.ADMIN)
|
||||
export class UsersController {
|
||||
constructor(private readonly usersService: UsersService) {}
|
||||
|
||||
@Get()
|
||||
async findAll(
|
||||
@Query('page') page = '1',
|
||||
@Query('pageSize') pageSize = '20',
|
||||
@Query('q') q?: string,
|
||||
) {
|
||||
return this.usersService.findAll(parseInt(page, 10), parseInt(pageSize, 10), q);
|
||||
}
|
||||
|
||||
@Post()
|
||||
async create(@Body() dto: CreateUserDto, @Req() req: Request, @Res() res: Response) {
|
||||
const user = await this.usersService.create(dto);
|
||||
const { passwordHash, ...safe } = user as any;
|
||||
const isHtmx = req.headers['hx-request'] === 'true';
|
||||
if (isHtmx) {
|
||||
return res.render('partials/flash', { type: 'success', message: `User "${safe.email}" created!` });
|
||||
}
|
||||
return res.json({ success: true, user: safe });
|
||||
}
|
||||
|
||||
@Patch(':id')
|
||||
async updateName(
|
||||
@Param('id') id: string,
|
||||
@Body() dto: UpdateUserNameDto,
|
||||
@Req() req: Request,
|
||||
@Res() res: Response,
|
||||
) {
|
||||
const user = await this.usersService.updateName(id, dto);
|
||||
const { passwordHash, ...safe } = user as any;
|
||||
const isHtmx = req.headers['hx-request'] === 'true';
|
||||
if (isHtmx) {
|
||||
return res.render('partials/flash', { type: 'success', message: `User "${safe.email}" renamed.` });
|
||||
}
|
||||
return res.json({ success: true, user: safe });
|
||||
}
|
||||
|
||||
@Patch(':id/role')
|
||||
async updateRole(
|
||||
@Param('id') id: string,
|
||||
@Body() dto: UpdateUserRoleDto,
|
||||
@Req() req: Request,
|
||||
@Res() res: Response,
|
||||
) {
|
||||
const user = await this.usersService.updateRole(id, dto);
|
||||
const { passwordHash, ...safe } = user as any;
|
||||
const isHtmx = req.headers['hx-request'] === 'true';
|
||||
if (isHtmx) {
|
||||
return res.render('partials/flash', { type: 'success', message: `Role updated to ${safe.role}.` });
|
||||
}
|
||||
return res.json({ success: true, user: safe });
|
||||
}
|
||||
|
||||
@Get('partials/table')
|
||||
async tablePartial(
|
||||
@Query('page') page = '1',
|
||||
@Query('pageSize') pageSize = '20',
|
||||
@Query('q') q: string,
|
||||
@Res() res: Response,
|
||||
) {
|
||||
const data = await this.usersService.findAll(
|
||||
parseInt(page, 10),
|
||||
parseInt(pageSize, 10),
|
||||
q,
|
||||
);
|
||||
return res.render('partials/dashboard-user-table', { users: data.users });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user