카테고리 없음

호텔 투숙객 예약 기능 API 개발

idea9329 2024. 12. 30. 16:29
반응형

 

아래는 Python의 Flask를 사용하여 호텔 투숙객 예약 기능을 구현하는 간단한 API 예제입니다. 이 API는 다음과 같은 기능을 제공합니다:


주요 기능

  1. 객실 예약 생성: 고객이 투숙할 날짜와 정보를 입력하여 예약을 생성.
  2. 예약 조회: 특정 예약 ID로 예약 정보를 조회.
  3. 예약 수정: 고객 요청으로 날짜나 정보를 수정.
  4. 예약 취소: 예약을 삭제.

API 구성

환경 요구 사항:

  • Python 3.8 이상
  • Flask
  • Flask-SQLAlchemy (데이터베이스)
  • SQLite (기본 데이터 저장)

코드 작성

아래는 호텔 예약 시스템의 기본 API 코드입니다.

1. API 코드 작성

from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy

# Flask 앱 생성
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///hotel_reservations.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# 데이터베이스 초기화
db = SQLAlchemy(app)

# 예약 데이터베이스 모델
class Reservation(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    guest_name = db.Column(db.String(100), nullable=False)
    room_number = db.Column(db.String(10), nullable=False)
    check_in_date = db.Column(db.String(10), nullable=False)
    check_out_date = db.Column(db.String(10), nullable=False)

# 데이터베이스 생성
with app.app_context():
    db.create_all()

# 1. 예약 생성 API
@app.route('/reservations', methods=['POST'])
def create_reservation():
    data = request.json
    try:
        new_reservation = Reservation(
            guest_name=data['guest_name'],
            room_number=data['room_number'],
            check_in_date=data['check_in_date'],
            check_out_date=data['check_out_date']
        )
        db.session.add(new_reservation)
        db.session.commit()
        return jsonify({"message": "Reservation created", "reservation_id": new_reservation.id}), 201
    except KeyError as e:
        return jsonify({"error": f"Missing field: {str(e)}"}), 400

# 2. 예약 조회 API
@app.route('/reservations/<int:reservation_id>', methods=['GET'])
def get_reservation(reservation_id):
    reservation = Reservation.query.get(reservation_id)
    if reservation:
        return jsonify({
            "id": reservation.id,
            "guest_name": reservation.guest_name,
            "room_number": reservation.room_number,
            "check_in_date": reservation.check_in_date,
            "check_out_date": reservation.check_out_date
        }), 200
    else:
        return jsonify({"error": "Reservation not found"}), 404

# 3. 예약 수정 API
@app.route('/reservations/<int:reservation_id>', methods=['PUT'])
def update_reservation(reservation_id):
    data = request.json
    reservation = Reservation.query.get(reservation_id)
    if reservation:
        reservation.guest_name = data.get('guest_name', reservation.guest_name)
        reservation.room_number = data.get('room_number', reservation.room_number)
        reservation.check_in_date = data.get('check_in_date', reservation.check_in_date)
        reservation.check_out_date = data.get('check_out_date', reservation.check_out_date)
        db.session.commit()
        return jsonify({"message": "Reservation updated"}), 200
    else:
        return jsonify({"error": "Reservation not found"}), 404

# 4. 예약 취소 API
@app.route('/reservations/<int:reservation_id>', methods=['DELETE'])
def delete_reservation(reservation_id):
    reservation = Reservation.query.get(reservation_id)
    if reservation:
        db.session.delete(reservation)
        db.session.commit()
        return jsonify({"message": "Reservation cancelled"}), 200
    else:
        return jsonify({"error": "Reservation not found"}), 404

if __name__ == '__main__':
    app.run(debug=True)

2. 데이터베이스 구조

  • Reservation Table:
    | 컬럼 | 타입 | 설명 |
    |----------------|------------------|---------------------------|
    | id | Integer (PK) | 예약 ID |
    | guest_name | String | 투숙객 이름 |
    | room_number | String | 객실 번호 |
    | check_in_date | String | 체크인 날짜 (YYYY-MM-DD) |
    | check_out_date | String | 체크아웃 날짜 (YYYY-MM-DD) |

API 사용 방법

  1. 예약 생성
    POST /reservations
    요청 본문:응답:
  2. { "message": "Reservation created", "reservation_id": 1 }
  3. { "guest_name": "John Doe", "room_number": "101", "check_in_date": "2023-12-01", "check_out_date": "2023-12-05" }
  4. 예약 조회
    GET /reservations/<reservation_id>
    응답:
  5. { "id": 1, "guest_name": "John Doe", "room_number": "101", "check_in_date": "2023-12-01", "check_out_date": "2023-12-05" }
  6. 예약 수정
    PUT /reservations/<reservation_id>
    요청 본문:응답:
  7. { "message": "Reservation updated" }
  8. { "check_out_date": "2023-12-06" }
  9. 예약 취소
    DELETE /reservations/<reservation_id>
    응답:
  10. { "message": "Reservation cancelled" }

확장 가능성

  1. 인증 및 권한 관리:
    • JWT 토큰을 사용하여 관리자와 사용자 권한을 분리.
  2. 객실 가용성 확인:
    • 예약 시 특정 객실의 가용성을 확인하는 로직 추가.
  3. 추가 데이터:
    • 이메일, 전화번호, 결제 상태 등을 저장.

결론

이 API는 호텔 예약 시스템의 기본 구조를 보여줍니다. Flask와 SQLite를 사용하여 빠르게 구축할 수 있으며, 이를 기반으로 다양한 기능을 확장할 수 있습니다. 실시간 예약 관리를 구현하려면 이 코드를 시작점으로 사용해 보세요! 🚀

반응형