Ajusta auth e filtros de videos

This commit is contained in:
LeoMortari
2025-11-03 16:31:58 -03:00
parent 75817f4436
commit 44aeeccb72
4 changed files with 66 additions and 13 deletions

View File

@@ -1,9 +1,10 @@
import { Controller, Post, Body, HttpCode, HttpStatus } from '@nestjs/common'; import { Controller, Post, Body, HttpCode, HttpStatus, Get, UseGuards } from '@nestjs/common';
import LoginResponseDto from './dto/loginResponse.dto'; import LoginResponseDto from './dto/loginResponse.dto';
import { AuthService } from './auth.service'; import { AuthService } from './auth.service';
import { LoginDto } from './dto/login.dto'; import { LoginDto } from './dto/login.dto';
import { KeycloakAuthGuard } from './keycloak-auth.guard';
@Controller('auth') @Controller('auth')
export class AuthController { export class AuthController {
@@ -26,4 +27,11 @@ export class AuthController {
): Promise<LoginResponseDto> { ): Promise<LoginResponseDto> {
return this.authService.refreshToken(body.refreshToken); return this.authService.refreshToken(body.refreshToken);
} }
@Get('check-token')
@UseGuards(KeycloakAuthGuard)
@HttpCode(HttpStatus.OK)
async checkToken(): Promise<{ valid: boolean }> {
return { valid: true };
}
} }

View File

@@ -4,22 +4,30 @@ import {
IsString, IsString,
IsBoolean, IsBoolean,
IsNumber, IsNumber,
IsArray,
} from 'class-validator'; } from 'class-validator';
import { video_situation } from 'generated/prisma'; import { video_situation } from 'generated/prisma';
import { Transform } from 'class-transformer'; import { Transform } from 'class-transformer';
export class ListVideosQueryDto { export class ListVideosQueryDto {
@IsEnum(video_situation)
@IsOptional() @IsOptional()
@Transform( @Transform(({ value }) => {
({ value }: { value: string }) => value?.toUpperCase() as video_situation, if (!value) return undefined;
) if (Array.isArray(value)) {
situation?: video_situation; return value.map((v) => v?.toUpperCase() as video_situation);
}
return [value?.toUpperCase() as video_situation];
})
situation?: video_situation | video_situation[];
@IsString() @IsString()
@IsOptional() @IsOptional()
title?: string; title?: string;
@IsString()
@IsOptional()
videoId?: string;
@IsNumber() @IsNumber()
@IsOptional() @IsOptional()
@Transform(({ value }) => (value ? Number(value) : 1)) @Transform(({ value }) => (value ? Number(value) : 1))

View File

@@ -31,8 +31,11 @@ export class VideosController {
@Get('situacoes') @Get('situacoes')
@Roles('user', 'admin') @Roles('user', 'admin')
getSituacao(): video_situation[] { getSituacao(): { label: string; value: string }[] {
return Object.values(video_situation) as video_situation[]; return Object.values(video_situation).map((situation) => ({
label: situation,
value: situation,
}));
} }
@Get('search') @Get('search')
@@ -55,6 +58,7 @@ export class VideosController {
return this.videosService.list({ return this.videosService.list({
situation: query.situation, situation: query.situation,
title: query.title, title: query.title,
videoId: query.videoId,
}); });
} }

View File

@@ -38,17 +38,36 @@ export class VideosService {
async list({ async list({
situation, situation,
title, title,
videoId,
}: { }: {
situation?: video_situation; situation?: video_situation | video_situation[];
title?: string; title?: string;
videoId?: string;
}): Promise<VideoResponseDto[]> { }): Promise<VideoResponseDto[]> {
const where: Prisma.videosWhereInput = situation ? { situation } : {}; const where: Prisma.videosWhereInput = {};
if (situation) {
if (Array.isArray(situation)) {
where.situation = { in: situation };
} else {
where.situation = situation;
}
}
if (title) { if (title) {
where.title = { where.title = {
contains: title, contains: title,
mode: 'insensitive',
}; };
} }
if (videoId) {
where.videoid = {
contains: videoId,
mode: 'insensitive',
};
}
const data = await this.prisma.videos.findMany({ const data = await this.prisma.videos.findMany({
where, where,
orderBy: { id: 'desc' }, orderBy: { id: 'desc' },
@@ -77,13 +96,27 @@ export class VideosService {
const direction = query.direction ?? 'desc'; const direction = query.direction ?? 'desc';
const skip = page > 0 ? (page - 1) * perPage : 0; const skip = page > 0 ? (page - 1) * perPage : 0;
const where: Prisma.videosWhereInput = query.situation const where: Prisma.videosWhereInput = {};
? { situation: query.situation }
: {}; if (query.situation) {
if (Array.isArray(query.situation)) {
where.situation = { in: query.situation };
} else {
where.situation = query.situation;
}
}
if (query.title) { if (query.title) {
where.title = { where.title = {
contains: query.title, contains: query.title,
mode: 'insensitive',
};
}
if (query.videoId) {
where.videoid = {
contains: query.videoId,
mode: 'insensitive',
}; };
} }