File size: 2,133 Bytes
3722089 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 | import {
Controller,
Get,
HttpException,
Query,
} from '@nestjs/common';
import { GetUserFromRequest } from '@gitroom/nestjs-libraries/user/user.from.request';
import { User } from '@prisma/client';
import { ApiTags } from '@nestjs/swagger';
import { ErrorsService } from '@gitroom/nestjs-libraries/database/prisma/errors/errors.service';
import { AdminStatsService } from '@gitroom/nestjs-libraries/database/prisma/admin-stats/admin-stats.service';
import dayjs from 'dayjs';
@ApiTags('Admin')
@Controller('/admin')
export class AdminController {
constructor(
private _errorsService: ErrorsService,
private _adminStatsService: AdminStatsService
) {}
private assertSuperAdmin(user: User) {
if (!user?.isSuperAdmin) {
throw new HttpException('Unauthorized', 400);
}
}
@Get('/errors')
async listErrors(
@GetUserFromRequest() user: User,
@Query('page') page?: string,
@Query('limit') limit?: string,
@Query('platform') platform?: string,
@Query('email') email?: string,
@Query('unknownFirst') unknownFirst?: string
) {
this.assertSuperAdmin(user);
return this._errorsService.listErrors({
page: page ? parseInt(page, 10) : 0,
limit: limit ? parseInt(limit, 10) : 20,
platform: platform || undefined,
email: email || undefined,
unknownFirst: unknownFirst === 'true' || unknownFirst === '1',
});
}
@Get('/errors/platforms')
async listPlatforms(@GetUserFromRequest() user: User) {
this.assertSuperAdmin(user);
return this._errorsService.listPlatforms();
}
@Get('/stats')
async getStats(
@GetUserFromRequest() user: User,
@Query('from') from?: string,
@Query('to') to?: string,
@Query('unknownOnly') unknownOnly?: string
) {
this.assertSuperAdmin(user);
const fromDate = from ? dayjs(from) : dayjs().subtract(30, 'day');
const toDate = to ? dayjs(to) : dayjs();
return this._adminStatsService.getStats({
from: fromDate.startOf('day').toDate(),
to: toDate.endOf('day').toDate(),
unknownOnly: unknownOnly === 'true' || unknownOnly === '1',
});
}
}
|