backend: enhance recording and room filters with status and sorting options

This commit is contained in:
juancarmore 2025-12-22 16:09:27 +01:00
parent 113dbe4f88
commit 1c955c60d0
6 changed files with 28 additions and 15 deletions

View File

@ -1,4 +1,4 @@
import { MeetRecordingFilters } from '@openvidu-meet/typings';
import { MeetRecordingFilters, MeetRecordingStatus } from '@openvidu-meet/typings';
import { z } from 'zod';
import { nonEmptySanitizedRoomId } from './room.schema.js';
@ -54,6 +54,10 @@ export const StartRecordingReqSchema = z.object({
});
export const RecordingFiltersSchema: z.ZodType<MeetRecordingFilters> = z.object({
roomId: nonEmptySanitizedRoomId('roomId').optional(),
roomName: z.string().optional(),
status: z.nativeEnum(MeetRecordingStatus).optional(),
fields: z.string().optional(),
maxItems: z.coerce
.number()
.positive('maxItems must be a positive number')
@ -64,11 +68,9 @@ export const RecordingFiltersSchema: z.ZodType<MeetRecordingFilters> = z.object(
return intVal > 100 ? 100 : intVal;
})
.default(10),
// status: z.string().optional(),
roomId: nonEmptySanitizedRoomId('roomId').optional(),
roomName: z.string().optional(),
nextPageToken: z.string().optional(),
fields: z.string().optional()
sortField: z.enum(['startDate', 'roomName', 'duration', 'size']).optional().default('startDate'),
sortOrder: z.enum(['asc', 'desc']).optional().default('desc')
});
export const BulkDeleteRecordingsReqSchema = z.object({

View File

@ -178,6 +178,9 @@ export const RoomOptionsSchema: z.ZodType<MeetRoomOptions> = z.object({
});
export const RoomFiltersSchema: z.ZodType<MeetRoomFilters> = z.object({
roomName: z.string().optional(),
status: z.nativeEnum(MeetRoomStatus).optional(),
fields: z.string().optional(),
maxItems: z.coerce
.number()
.positive('maxItems must be a positive number')
@ -189,8 +192,8 @@ export const RoomFiltersSchema: z.ZodType<MeetRoomFilters> = z.object({
})
.default(10),
nextPageToken: z.string().optional(),
roomName: z.string().optional(),
fields: z.string().optional()
sortField: z.enum(['creationDate', 'roomName', 'autoDeletionDate']).optional().default('creationDate'),
sortOrder: z.enum(['asc', 'desc']).optional().default('desc')
});
export const DeleteRoomReqSchema = z.object({

View File

@ -5,6 +5,7 @@ export * from './event.model.js';
export * from './permissions/livekit-permissions.js';
export * from './permissions/meet-permissions.js';
export * from './sort-pagination.js';
export * from './room-member.js';
export * from './user.js';

View File

@ -1,3 +1,5 @@
import { SortAndPagination } from './sort-pagination.js';
export enum MeetRecordingStatus {
STARTING = 'starting',
ACTIVE = 'active',
@ -31,10 +33,9 @@ export interface MeetRecordingInfo {
details?: string;
}
export type MeetRecordingFilters = {
maxItems?: number;
nextPageToken?: string;
export interface MeetRecordingFilters extends SortAndPagination {
roomId?: string;
roomName?: string;
status?: MeetRecordingStatus;
fields?: string;
};
}

View File

@ -1,5 +1,6 @@
import { MeetRoomConfig } from './room-config.js';
import { MeetRoomMemberPermissions, MeetRoomMemberRole } from './room-member.js';
import { SortAndPagination } from './sort-pagination.js';
/**
* Options for creating a room.
@ -60,12 +61,11 @@ export interface MeetRoomMemberRoleAndPermissions {
permissions: MeetRoomMemberPermissions;
}
export type MeetRoomFilters = {
maxItems?: number;
nextPageToken?: string;
export interface MeetRoomFilters extends SortAndPagination {
roomName?: string;
status?: MeetRoomStatus;
fields?: string;
};
}
export enum MeetRoomDeletionSuccessCode {
ROOM_DELETED = 'room_deleted',

View File

@ -0,0 +1,6 @@
export interface SortAndPagination {
maxItems?: number;
nextPageToken?: string;
sortField?: string;
sortOrder?: 'asc' | 'desc';
}