Skip to main content

RESERVATION_STATUS

Defines all possible states of a reservation throughout its lifecycle. Exported Object:
export const RESERVATION_STATUS = {
  CONFIRMED: 'confirmed',
  CHECKED_IN: 'checked-in',
  CHECKED_OUT: 'checked-out',
  OCCUPIED: 'occupied',
  CANCELLED: 'cancelled',
}

Status Values

CONFIRMED
string
default:"'confirmed'"
Reservation has been confirmed but guest has not yet checked in
CHECKED_IN
string
default:"'checked-in'"
Guest has checked in and is currently staying at the hotel
CHECKED_OUT
string
default:"'checked-out'"
Guest has checked out and the reservation is complete
OCCUPIED
string
default:"'occupied'"
The reservation is actively occupying the room
CANCELLED
string
default:"'cancelled'"
The reservation has been cancelled

Usage

Use these constants instead of hardcoded strings to ensure consistency across the application. Example:
import { RESERVATION_STATUS } from './utils/constants.js'

// Create a new reservation
const reservation = {
  id: 'RES-123',
  status: RESERVATION_STATUS.CONFIRMED,
  // ... other properties
}

// Check reservation status
if (reservation.status === RESERVATION_STATUS.CONFIRMED) {
  console.log('Reservation is confirmed')
}

// Update status when guest checks in
reservation.status = RESERVATION_STATUS.CHECKED_IN

// Filter confirmed reservations
const confirmedReservations = hotel.reservations.filter(
  res => res.status === RESERVATION_STATUS.CONFIRMED
)

Status Lifecycle

Typical flow of a reservation through different statuses:
  1. CONFIRMED - Initial state when reservation is created
  2. CHECKED_IN - Guest arrives and checks in
  3. OCCUPIED - During the guest’s stay
  4. CHECKED_OUT - Guest completes checkout
Alternative flow:
  • CONFIRMEDCANCELLED - Reservation cancelled before check-in
Always use these constants rather than string literals to prevent typos and make refactoring easier.

ROOM_STATUS

Defines all possible operational states of a hotel room. Exported Object:
export const ROOM_STATUS = {
  AVAILABLE: 'available',
  OCCUPIED: 'occupied',
  MAINTENANCE: 'maintenance',
}

Status Values

AVAILABLE
string
default:"'available'"
Room is ready and available for new reservations
OCCUPIED
string
default:"'occupied'"
Room is currently occupied by a guest
MAINTENANCE
string
default:"'maintenance'"
Room is under maintenance and not available for booking

Usage

Example:
import { ROOM_STATUS } from './utils/constants.js'
import { getRoomsByStatus } from './utils/utils.js'

// Set room status
const room = {
  number: 101,
  status: ROOM_STATUS.AVAILABLE,
  // ... other properties
}

// Check if room is available
if (room.status === ROOM_STATUS.AVAILABLE) {
  console.log('Room is available for booking')
}

// Mark room as occupied
room.status = ROOM_STATUS.OCCUPIED

// Get all available rooms
const availableRooms = getRoomsByStatus(
  hotel.rooms,
  ROOM_STATUS.AVAILABLE
)

// Get rooms in maintenance
const maintenanceRooms = getRoomsByStatus(
  hotel.rooms,
  ROOM_STATUS.MAINTENANCE
)

When to Use Each Status

AVAILABLE:
  • Room is clean and ready for check-in
  • No active reservations for current date
  • All maintenance completed
OCCUPIED:
  • Guest has checked in
  • Room is currently in use
  • Do not assign new reservations
MAINTENANCE:
  • Room requires repairs or cleaning
  • Temporarily unavailable for booking
  • Should be excluded from availability searches
Room status should be updated when guests check in/out and when maintenance is scheduled or completed.

ROOM_TYPE

Defines the different types of rooms available in the hotel. Exported Object:
export const ROOM_TYPE = {
  SINGLE: 'single',
  DOUBLE: 'double',
  SUITE: 'suite',
}

Type Values

SINGLE
string
default:"'single'"
Single room for one guest
DOUBLE
string
default:"'double'"
Double room for two guests
SUITE
string
default:"'suite'"
Suite room with premium amenities

Usage

Example:
import { ROOM_TYPE } from './utils/constants.js'
import { getRoomsByType } from './utils/utils.js'

// Define a room
const room = {
  number: 101,
  type: ROOM_TYPE.DOUBLE,
  pricePerNight: 100,
  // ... other properties
}

// Check room type
if (room.type === ROOM_TYPE.SUITE) {
  console.log('Premium suite room')
}

// Filter rooms by type
const singleRooms = getRoomsByType(
  hotel.rooms,
  ROOM_TYPE.SINGLE
)

const doubleRooms = getRoomsByType(
  hotel.rooms,
  ROOM_TYPE.DOUBLE
)

const suites = getRoomsByType(
  hotel.rooms,
  ROOM_TYPE.SUITE
)

// Search for available rooms of a specific type
const availableDoubles = hotel.rooms.filter(
  room => room.type === ROOM_TYPE.DOUBLE && 
          room.status === ROOM_STATUS.AVAILABLE
)

Room Type Characteristics

SINGLE:
  • Designed for one occupant
  • Typically lower price point
  • Smaller room size
DOUBLE:
  • Accommodates two guests
  • Standard room type
  • Mid-range pricing
SUITE:
  • Premium room category
  • Additional amenities and space
  • Higher price per night
Room types are fixed properties that define the room’s category and should not change during the room’s lifecycle, unlike room status which changes frequently.

Import Examples

Individual Imports

import { RESERVATION_STATUS } from './utils/constants.js'
import { ROOM_STATUS } from './utils/constants.js'
import { ROOM_TYPE } from './utils/constants.js'

Combined Import

import { 
  RESERVATION_STATUS, 
  ROOM_STATUS, 
  ROOM_TYPE 
} from './utils/constants.js'

Complete Example

import { 
  RESERVATION_STATUS, 
  ROOM_STATUS, 
  ROOM_TYPE 
} from './utils/constants.js'
import { getRoomsByType, getRoomsByStatus } from './utils/utils.js'

// Find available double rooms
const availableDoubleRooms = hotel.rooms.filter(
  room => 
    room.type === ROOM_TYPE.DOUBLE &&
    room.status === ROOM_STATUS.AVAILABLE
)

// Count confirmed reservations
const confirmedCount = hotel.reservations.filter(
  res => res.status === RESERVATION_STATUS.CONFIRMED
).length

// Get all suites in maintenance
const suitesInMaintenance = hotel.rooms.filter(
  room => 
    room.type === ROOM_TYPE.SUITE &&
    room.status === ROOM_STATUS.MAINTENANCE
)
Using these constants throughout your codebase ensures type safety, prevents typos, and makes it easy to update values in a single location if needed.

Build docs developers (and LLMs) love