eoin-obrien/ul-timetable

View on GitHub
src/api/room-details.ts

Summary

Maintainability
A
0 mins
Test Coverage
import { IRoomDetails } from '../types';
import { buildings, floors } from '../util/constants';
import { isValidRoomId } from '../util/validators';

export async function roomDetails(roomId: string): Promise<IRoomDetails> {
  if (!isValidRoomId(roomId)) {
    throw new Error(`invalid room ID "${roomId}"`);
  }

  const roomIdRegex = new RegExp(`^(${Object.keys(buildings).join('|')})(${floors.join('|')})([0-9]+[A-Z]?)$`);
  const roomIdParts = roomIdRegex.exec(roomId.toUpperCase()) as RegExpExecArray;

  return {
    id: roomId.toUpperCase(),
    buildingName: buildings[roomIdParts[1]],
    building: roomIdParts[1],
    floor: roomIdParts[2],
    room: roomIdParts[3],
  };
}