backend: enhance room filtering with optional room name parameter

This commit is contained in:
juancarmore 2025-08-16 13:23:32 +02:00
parent cea5421012
commit 73b26f35b5
7 changed files with 14 additions and 8 deletions

View File

@ -142,6 +142,7 @@ const GetRoomFiltersSchema: z.ZodType<MeetRoomFilters> = z.object({
})
.default(10),
nextPageToken: z.string().optional(),
roomName: z.string().transform(sanitizeRoomName).optional(),
fields: z.string().optional()
});

View File

@ -398,7 +398,6 @@ export class RecordingService {
}> {
try {
const { maxItems, nextPageToken, roomId, fields } = filters;
const response = await this.storageService.getAllRecordings(roomId, maxItems, nextPageToken);
// Apply field filtering if specified

View File

@ -165,12 +165,13 @@ export class RoomService {
* @returns A Promise that resolves to an array of {@link MeetRoom} objects.
* @throws If there was an error retrieving the rooms.
*/
async getAllMeetRooms({ maxItems, nextPageToken, fields }: MeetRoomFilters): Promise<{
async getAllMeetRooms(filters: MeetRoomFilters): Promise<{
rooms: MeetRoom[];
isTruncated: boolean;
nextPageToken?: string;
}> {
const response = await this.storageService.getMeetRooms(maxItems, nextPageToken);
const { maxItems, nextPageToken, roomName, fields } = filters;
const response = await this.storageService.getMeetRooms(roomName, maxItems, nextPageToken);
if (fields) {
const filteredRooms = response.rooms.map((room: MeetRoom) => UtilsHelper.filterObjectFields(room, fields));

View File

@ -11,8 +11,9 @@ export class S3KeyBuilder implements StorageKeyBuilder {
return `${INTERNAL_CONFIG.S3_ROOMS_PREFIX}/${roomId}/${roomId}.json`;
}
buildAllMeetRoomsKey(): string {
return `${INTERNAL_CONFIG.S3_ROOMS_PREFIX}`;
buildAllMeetRoomsKey(roomName?: string): string {
const roomSegment = roomName ? `/${roomName}` : '';
return `${INTERNAL_CONFIG.S3_ROOMS_PREFIX}${roomSegment}`;
}
buildArchivedMeetRoomKey(roomId: string): string {

View File

@ -122,8 +122,10 @@ export interface StorageKeyBuilder {
/**
* Builds the key for all meeting rooms.
*
* @param roomName - Optional name of the meeting room to filter by
*/
buildAllMeetRoomsKey(): string;
buildAllMeetRoomsKey(roomName?: string): string;
/**
* Builds the key for archived room metadata.

View File

@ -203,6 +203,7 @@ export class MeetStorageService<
* @throws Error if the storage operation fails or encounters an unexpected error
*/
async getMeetRooms(
roomName?: string,
maxItems?: number,
nextPageToken?: string
): Promise<{
@ -211,9 +212,9 @@ export class MeetStorageService<
nextPageToken?: string;
}> {
try {
const allRoomsKey = this.keyBuilder.buildAllMeetRoomsKey();
const searchKey = this.keyBuilder.buildAllMeetRoomsKey(roomName);
const { Contents, IsTruncated, NextContinuationToken } = await this.storageProvider.listObjects(
allRoomsKey,
searchKey,
maxItems,
nextPageToken
);

View File

@ -33,5 +33,6 @@ export interface MeetRoomRoleAndPermissions {
export type MeetRoomFilters = {
maxItems?: number;
nextPageToken?: string;
roomName?: string;
fields?: string;
};