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 { AuthService } from './auth.service';
import { LoginDto } from './dto/login.dto';
import { KeycloakAuthGuard } from './keycloak-auth.guard';
@Controller('auth')
export class AuthController {
@@ -26,4 +27,11 @@ export class AuthController {
): Promise<LoginResponseDto> {
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,
IsBoolean,
IsNumber,
IsArray,
} from 'class-validator';
import { video_situation } from 'generated/prisma';
import { Transform } from 'class-transformer';
export class ListVideosQueryDto {
@IsEnum(video_situation)
@IsOptional()
@Transform(
({ value }: { value: string }) => value?.toUpperCase() as video_situation,
)
situation?: video_situation;
@Transform(({ value }) => {
if (!value) return undefined;
if (Array.isArray(value)) {
return value.map((v) => v?.toUpperCase() as video_situation);
}
return [value?.toUpperCase() as video_situation];
})
situation?: video_situation | video_situation[];
@IsString()
@IsOptional()
title?: string;
@IsString()
@IsOptional()
videoId?: string;
@IsNumber()
@IsOptional()
@Transform(({ value }) => (value ? Number(value) : 1))

View File

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

View File

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