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),
|
.default(10),
|
||||||
nextPageToken: z.string().optional(),
|
nextPageToken: z.string().optional(),
|
||||||
|
roomName: z.string().transform(sanitizeRoomName).optional(),
|
||||||
fields: z.string().optional()
|
fields: z.string().optional()
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -398,7 +398,6 @@ export class RecordingService {
|
|||||||
}> {
|
}> {
|
||||||
try {
|
try {
|
||||||
const { maxItems, nextPageToken, roomId, fields } = filters;
|
const { maxItems, nextPageToken, roomId, fields } = filters;
|
||||||
|
|
||||||
const response = await this.storageService.getAllRecordings(roomId, maxItems, nextPageToken);
|
const response = await this.storageService.getAllRecordings(roomId, maxItems, nextPageToken);
|
||||||
|
|
||||||
// Apply field filtering if specified
|
// Apply field filtering if specified
|
||||||
|
|||||||
@ -165,12 +165,13 @@ export class RoomService {
|
|||||||
* @returns A Promise that resolves to an array of {@link MeetRoom} objects.
|
* @returns A Promise that resolves to an array of {@link MeetRoom} objects.
|
||||||
* @throws If there was an error retrieving the rooms.
|
* @throws If there was an error retrieving the rooms.
|
||||||
*/
|
*/
|
||||||
async getAllMeetRooms({ maxItems, nextPageToken, fields }: MeetRoomFilters): Promise<{
|
async getAllMeetRooms(filters: MeetRoomFilters): Promise<{
|
||||||
rooms: MeetRoom[];
|
rooms: MeetRoom[];
|
||||||
isTruncated: boolean;
|
isTruncated: boolean;
|
||||||
nextPageToken?: string;
|
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) {
|
if (fields) {
|
||||||
const filteredRooms = response.rooms.map((room: MeetRoom) => UtilsHelper.filterObjectFields(room, 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`;
|
return `${INTERNAL_CONFIG.S3_ROOMS_PREFIX}/${roomId}/${roomId}.json`;
|
||||||
}
|
}
|
||||||
|
|
||||||
buildAllMeetRoomsKey(): string {
|
buildAllMeetRoomsKey(roomName?: string): string {
|
||||||
return `${INTERNAL_CONFIG.S3_ROOMS_PREFIX}`;
|
const roomSegment = roomName ? `/${roomName}` : '';
|
||||||
|
return `${INTERNAL_CONFIG.S3_ROOMS_PREFIX}${roomSegment}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
buildArchivedMeetRoomKey(roomId: string): string {
|
buildArchivedMeetRoomKey(roomId: string): string {
|
||||||
|
|||||||
@ -122,8 +122,10 @@ export interface StorageKeyBuilder {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Builds the key for all meeting rooms.
|
* 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.
|
* 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
|
* @throws Error if the storage operation fails or encounters an unexpected error
|
||||||
*/
|
*/
|
||||||
async getMeetRooms(
|
async getMeetRooms(
|
||||||
|
roomName?: string,
|
||||||
maxItems?: number,
|
maxItems?: number,
|
||||||
nextPageToken?: string
|
nextPageToken?: string
|
||||||
): Promise<{
|
): Promise<{
|
||||||
@ -211,9 +212,9 @@ export class MeetStorageService<
|
|||||||
nextPageToken?: string;
|
nextPageToken?: string;
|
||||||
}> {
|
}> {
|
||||||
try {
|
try {
|
||||||
const allRoomsKey = this.keyBuilder.buildAllMeetRoomsKey();
|
const searchKey = this.keyBuilder.buildAllMeetRoomsKey(roomName);
|
||||||
const { Contents, IsTruncated, NextContinuationToken } = await this.storageProvider.listObjects(
|
const { Contents, IsTruncated, NextContinuationToken } = await this.storageProvider.listObjects(
|
||||||
allRoomsKey,
|
searchKey,
|
||||||
maxItems,
|
maxItems,
|
||||||
nextPageToken
|
nextPageToken
|
||||||
);
|
);
|
||||||
|
|||||||
@ -33,5 +33,6 @@ export interface MeetRoomRoleAndPermissions {
|
|||||||
export type MeetRoomFilters = {
|
export type MeetRoomFilters = {
|
||||||
maxItems?: number;
|
maxItems?: number;
|
||||||
nextPageToken?: string;
|
nextPageToken?: string;
|
||||||
|
roomName?: string;
|
||||||
fields?: string;
|
fields?: string;
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user