Przejdź do treści

Klasa HotelService

Klasa HotelService stanowi główną logikę aplikacyjną systemu zarządzania hotelem.
Łączy funkcje związane z pokojami, gośćmi, rezerwacjami i płatnościami, zapewniając wygodny interfejs do operacji biznesowych.

Umożliwia m.in. dodawanie pokoi, rejestrację gości, tworzenie rezerwacji, przetwarzanie płatności oraz sprawdzanie dostępności.


Dokumentacja techniczna

Logika aplikacyjna zarządzająca hotelem, rezerwacjami i płatnościami.

Tworzy instancję hotelu.

Source code in services/hotel_service.py
def __init__(self, name: str, address: str):
    """Tworzy instancję hotelu."""
    self.hotel = Hotel(name, address)

add_room(number, room_type, price_per_night, capacity)

Dodaje pokój do hotelu.

Source code in services/hotel_service.py
def add_room(self, number: str, room_type: str, price_per_night: float, capacity: int) -> Room:
    """Dodaje pokój do hotelu."""
    room = Room(number, room_type, price_per_night, capacity)
    self.hotel.add_room(room)
    return room

check_availability(room_number, check_in, check_out)

Sprawdza, czy dany pokój jest dostępny w podanym terminie.

Source code in services/hotel_service.py
def check_availability(self, room_number: str, check_in: date, check_out: date) -> bool:
    """Sprawdza, czy dany pokój jest dostępny w podanym terminie."""
    room = self.hotel.find_room_by_number(room_number)
    if not room:
        raise ValueError(f"Pokój {room_number} nie istnieje.")
    return self.hotel.is_room_available(room, check_in, check_out)

confirm_payment(payment)

Potwierdza płatność.

Source code in services/hotel_service.py
def confirm_payment(self, payment: Payment) -> None:
    """Potwierdza płatność."""
    payment.confirm_payment()

create_payment(reservation, method)

Tworzy płatność za rezerwację.

Source code in services/hotel_service.py
def create_payment(self, reservation: Reservation, method: str) -> Payment:
    """Tworzy płatność za rezerwację."""
    return Payment(reservation, method)

get_all_reservations()

Zwraca listę wszystkich rezerwacji w hotelu.

Source code in services/hotel_service.py
def get_all_reservations(self) -> List[Reservation]:
    """Zwraca listę wszystkich rezerwacji w hotelu."""
    return self.hotel.get_all_reservations()

list_rooms(room_type=None, capacity=None)

Zwraca dostępne pokoje, z możliwością filtrowania.

Source code in services/hotel_service.py
def list_rooms(self, room_type: Optional[str] = None, capacity: Optional[int] = None) -> List[Room]:
    """Zwraca dostępne pokoje, z możliwością filtrowania."""
    return self.hotel.filter_rooms(room_type, capacity)

make_reservation(guest, room_number, check_in, check_out)

Tworzy rezerwację, jeśli pokój jest dostępny.

Source code in services/hotel_service.py
def make_reservation(
    self, guest: Guest, room_number: str, check_in: date, check_out: date
) -> Reservation:
    """Tworzy rezerwację, jeśli pokój jest dostępny."""
    return self.hotel.make_reservation(guest, room_number, check_in, check_out)

register_guest(first_name, last_name, email, phone_number)

Rejestruje nowego gościa.

Source code in services/hotel_service.py
def register_guest(self, first_name: str, last_name: str, email: str, phone_number: str) -> Guest:
    """Rejestruje nowego gościa."""
    return Guest(first_name, last_name, email, phone_number)

simulate_full_booking_flow()

Symuluje pełny proces rezerwacji i płatności – do testów integracyjnych.

Source code in services/hotel_service.py
def simulate_full_booking_flow(self) -> Dict[str, Any]:
    """Symuluje pełny proces rezerwacji i płatności – do testów integracyjnych."""
    # Dodanie pokoi
    room1 = self.add_room("101", "double", 320.0, 2)
    room2 = self.add_room("102", "single", 200.0, 1)

    # Rejestracja gościa
    guest = self.register_guest("Jan", "Nowak", "jan.nowak@example.com", "123456789")

    # Tworzenie rezerwacji
    check_in = date(2025, 7, 10)
    check_out = date(2025, 7, 13)
    reservation = self.make_reservation(guest, "101", check_in, check_out)

    # Tworzenie i potwierdzenie płatności
    payment = self.create_payment(reservation, "karta")
    self.confirm_payment(payment)

    return {
        "guest": guest,
        "room": room1,
        "reservation": reservation,
        "payment": payment
    }

Przykład użycia

from services.hotel_service import HotelService
from datetime import date

# Tworzenie hotelu
service = HotelService("Hotel Warszawa", "ul. Przykładowa 1")

# Dodanie pokoju
room = service.add_room("101", "double", 300.0, 2)

# Rejestracja gościa
guest = service.register_guest("Anna", "Kowalska", "anna@example.com", "555-123-456")

# Tworzenie rezerwacji
check_in = date(2025, 8, 1)
check_out = date(2025, 8, 5)
reservation = service.make_reservation(guest, "101", check_in, check_out)

# Płatność
payment = service.create_payment(reservation, "przelew")
service.confirm_payment(payment)