SmartfolioBackend / src /modules /users /users-admin.controller.ts
ibrahimgulbutt's picture
deploy: recover signup dates from the admin page
d5ba26c
Raw History Blame Contribute Delete
2.33 kB
import { Controller, Get, HttpCode, Post, Query, UseGuards } from '@nestjs/common';
import { ApiBearerAuth, ApiOperation, ApiQuery, ApiTags } from '@nestjs/swagger';
import { JwtAuthGuard } from '../auth/jwt-auth.guard';
import { RolesGuard } from '../auth/roles.guard';
import { Roles } from '../auth/roles.decorator';
import { AdminUserQuery, UsersAdminService } from './users-admin.service';
/**
* Who is on the platform.
*
* Guarded the same way every other admin surface is - JWT plus RolesGuard,
* which reads the role from the database on each request, so a token issued
* before somebody was demoted does not still open this.
*/
@ApiTags('Admin: users')
@Controller('admin/users')
@UseGuards(JwtAuthGuard, RolesGuard)
@Roles('admin')
@ApiBearerAuth()
export class UsersAdminController {
constructor(private readonly admin: UsersAdminService) {}
/**
* Fill in signup dates for accounts that predate the column.
*
* POST because it writes, even though it takes no body. Idempotent — it only
* touches rows that are still NULL — so running it twice is harmless.
*/
@Post('backfill-signup-dates')
@HttpCode(200)
@ApiOperation({ summary: 'Recover signup dates for accounts created before they were recorded' })
backfillSignupDates() {
return this.admin.backfillSignupDates();
}
@Get('stats')
@ApiOperation({ summary: 'Headline counts for the user base' })
stats() {
return this.admin.stats();
}
@Get()
@ApiOperation({ summary: 'List users, filtered and sorted' })
@ApiQuery({ name: 'page', required: false, type: Number })
@ApiQuery({ name: 'limit', required: false, type: Number })
@ApiQuery({ name: 'search', required: false })
@ApiQuery({ name: 'sort', required: false, enum: ['newest', 'oldest', 'active', 'inactive', 'name'] })
@ApiQuery({ name: 'activity', required: false, enum: ['all', 'active', 'inactive', 'never'] })
@ApiQuery({ name: 'source', required: false, enum: ['all', 'campaign', 'direct'] })
@ApiQuery({ name: 'verified', required: false, enum: ['all', 'yes', 'no'] })
@ApiQuery({ name: 'availability', required: false, enum: ['all', 'looking', 'suspended'] })
@ApiQuery({ name: 'role', required: false, enum: ['all', 'admin', 'candidate'] })
list(@Query() query: AdminUserQuery) {
return this.admin.list(query);
}
}