import { Body, Controller, Delete, Get, HttpCode, Param, Patch, Post, Query, Req, UseGuards, } from '@nestjs/common'; import { AdminUserListQuery, AdminUserListView, AdminUserView, adminUserListQuerySchema, setSiteAdminSchema, setUserDisabledSchema, } from '@dorfteich/shared'; import { AuthedRequest } from '../auth/auth.guard'; import { ZodValidationPipe } from '../common/zod-validation.pipe'; import { SiteAdminGuard } from './site-admin.guard'; import { UserAdminService } from './user-admin.service'; /** Site-Admin user management (issue #59). */ @Controller('admin/users') @UseGuards(SiteAdminGuard) export class UserAdminController { constructor(private readonly users: UserAdminService) {} @Get() async list( @Query(new ZodValidationPipe(adminUserListQuerySchema)) query: AdminUserListQuery, ): Promise { return this.users.list(query); } @Patch(':id/disabled') async setDisabled( @Param('id') id: string, @Body(new ZodValidationPipe(setUserDisabledSchema)) input: { disabled: boolean }, @Req() request: AuthedRequest, ): Promise { return this.users.setDisabled(request.user!, id, input.disabled); } @Post(':id/resend-verification') @HttpCode(204) async resendVerification(@Param('id') id: string, @Req() request: AuthedRequest): Promise { await this.users.resendVerification(request.user!, id); } @Delete(':id') @HttpCode(204) async remove(@Param('id') id: string, @Req() request: AuthedRequest): Promise { await this.users.deleteUser(request.user!, id); } @Patch(':id/site-admin') async setSiteAdmin( @Param('id') id: string, @Body(new ZodValidationPipe(setSiteAdminSchema)) input: { isSiteAdmin: boolean }, @Req() request: AuthedRequest, ): Promise { return this.users.setSiteAdmin(request.user!, id, input.isSiteAdmin); } }