서버 관리 및 모니터링 프로젝트 (영화관 시스템)

고객의 네 번째 기능 구현-3

dmswo 2025. 1. 14. 17:44

영화 예매하기 기능을 이어서 구현하겠다.

 

3. seat_id 입력받기

3-1. screening_date_id도 제대로 입력받았다면 해당 movie_id, screening_date_id에 맞는 theater_id total_seat를 출력한다. (특정 영화, 특정 상영 일자에 맞는 상영관은 하나 밖에 없으므로 따로 입력을 받지 않고 바로 출력한다.)

3-2. 해당 screening_date_id에 맞는 theater seat_id seat_assignment true일 때(예매 가능할 때)만 출력한다.

이 정보를 출력함으로써 예매할 특정 영화, 상영일정, 상영관에 맞는 seat_id를 쉽게 알 수 있다.

3-3. 출력된 seat_id를 보고 예매할 영화의 seat_id를 클릭한다. 그리고 선택된 seat_id를 저장한다.

 

[1] 같이 seat_id를 받아와서 출력하니 아무것도 안나왔다.

1

[2] SQL 쿼리를 직접 테스트 해보니 seat_id 값이 나왔다.

2

[3] 받아온 screening_date_id의 type을 확인해보니 [4]처럼 int가 아닌 str이였다.

3
4

이렇게 수정해도 seat_id 가 안나왔다.

오류 원인 : PostgreSQL을 사용하다가 sqlite으로 바꾸다가 id 자료형을 변경하였는데 그 과정에서 안맞는 부분이 생김

[6]의 Seat 의 screening_date_id 를 [5]에 맞도록 1~15로 수정하겠다.

5
6

[7], [8], [9] 테이블 수정

7
8
9 (seat의 일부)

이제 잘 출력된다.

최종 코드

routes.py

    @app.route("/movies/book/screening_date_id/<name>/<int:member_id>/<int:movie_id>")
    def select_screening_date_id(name, member_id, movie_id):
        result2 = print_screening_schedule(movie_id)
        movie_title = get_movie_title(movie_id)
        return render_template('user/screening_date_id_4.html', name=name, member_id=member_id, movie_id=movie_id, movie_title=movie_title, result=result2)

    @app.route("/movies/book/valid_screening")
    def select_screening():
        name = request.args.get('name')
        member_id = int(request.args.get('member_id'))
        movie_id = int(request.args.get('movie_id'))
        screening_date_id = int(request.args.get('screening_date_id'))

        theater_id, total_seat = print_theater(movie_id, screening_date_id)
        seat_id = print_seat(screening_date_id)

        return render_template('user/seat_id_4.html', name=name, member_id=member_id, movie_id=movie_id, screening_date_id=screening_date_id, theater_id=theater_id, total_seat=total_seat, seat_id=seat_id)

 

models.py

def print_seat(screening_date_id):
    con = get_db_connection()
    cursor = con.cursor()
    cursor.execute("select distinct seat_id from seat s where screening_date_id "
                   "= ? and seat_assignment = 1", (screening_date_id,))
    result = cursor.fetchall()
    con.close()
    return [seat[0] for seat in result]

def print_theater(movie_id, screening_date_id):
    con = get_db_connection()
    cursor = con.cursor()
    cursor.execute("select distinct s.theater_id, t.total_seat  from screeningschedule s, theater t "
                   "where s.movie_id = ? and screening_date_id = ? and s.theater_id = t.theater_id",
                   (movie_id, screening_date_id))
    result = cursor.fetchone()
    con.close()
    return result

 

seat_id_4.html 일부분

 

<결과화면>

영화 ID로 1 선택

 

상영 ID로 1 선택