backend: enhance room filtering with optional room name parameter
This commit is contained in:
parent
cea5421012
commit
73b26f35b5
@ -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()
|
||||
});
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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 {
|
||||
|
||||
@ -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.
|
||||
|
||||
@ -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
|
||||
);
|
||||
|
||||
@ -33,5 +33,6 @@ export interface MeetRoomRoleAndPermissions {
|
||||
export type MeetRoomFilters = {
|
||||
maxItems?: number;
|
||||
nextPageToken?: string;
|
||||
roomName?: string;
|
||||
fields?: string;
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user