클래스 수강 예약 플랫폼 - 요가/필라테스 수업 예약하기 - 바이브코딩 레시피
입문 PHP Laravel AI: Claude

클래스 수강 예약 플랫폼 - 요가/필라테스 수업 예약하기

리포지토리명 class-booking-platform-laravel
조회수 49 0건 제출

문제 설명

프로젝트 개요

요가, 필라테스, 댄스 등 다양한 클래스 수업을 예약할 수 있는 간단한 예약 시스템을 만듭니다. Laravel 13.x + Blade 템플릿 + Tailwind CSS로 구성하며, 강사가 수업을 등록하고 회원이 예약할 수 있는 기본적인 CRUD 기능을 구현합니다.

필수 기능

  • 수업 목록 페이지: 등록된 클래스 수업 목록 표시 (카드 형태)
  • 수업 상세 페이지: 클래스 정보, 강사, 시간, 정원, 난이도 등 표시
  • 예약하기: 간단한 폼으로 이름, 이메일, 전화번호 입력 후 예약
  • 예약 목록 페이지: 내가 예약한 수업 목록 확인
  • 예약 취소: 예약 취소 버튼 클릭 시 삭제
  • 수업 등록 (관리자): 새로운 클래스 수업 추가 폼
  • 정원 관리: 예약 시 정원 초과 여부 체크

선택 추가 기능 (보너스)

  • 수업 카테고리 필터링 (요가, 필라테스, 댄스 등)
  • 날짜별 수업 검색
  • 예약 확인 이메일 알림 (Laravel Mail)
  • 별점 리뷰 시스템
  • 수업 이미지 업로드

기술 스택

  • Laravel 13.x
  • Blade 템플릿 엔진
  • SQLite 데이터베이스
  • Tailwind CSS
  • Alpine.js (선택, 간단한 인터랙션용)

학습 목표

  • Laravel 라우팅과 컨트롤러 구조 이해
  • Eloquent ORM으로 데이터베이스 CRUD 구현
  • Blade 컴포넌트와 레이아웃 시스템 활용
  • 폼 유효성 검사와 에러 핸들링
  • 관계형 데이터 모델링 (수업-예약 1:N 관계)

제약 조건

  • • Laravel 13.x 사용 필수
  • • Blade 템플릿 엔진만 사용 (React, Vue 등 SPA 프레임워크 사용 금지)
  • • SQLite 데이터베이스 사용
  • • Tailwind CSS로 스타일링
  • • 인증 시스템은 구현하지 않음 (간단히 이름/이메일로 예약)
  • • 정원 초과 시 예약 불가 로직 필수
  • • 반응형 디자인 적용

프롬프트 레시피

아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.

1
Step 1
mkdir class-booking-platform-laravel && cd class-booking-platform-laravel

이 폴더에서 Laravel 13.x 프로젝트를 시작합니다.

# 프로젝트 초기 설정

Laravel 13.x 프로젝트를 생성하고 기본 설정을 완료해주세요.

## 요구사항

1. Laravel 13.x 최신 버전으로 프로젝트 생성
2. SQLite 데이터베이스 설정 (.env 파일에서 DB_CONNECTION=sqlite)
3. database/database.sqlite 파일 생성
4. Tailwind CSS 설치 및 설정 (Laravel Mix 또는 Vite 사용)
5. 기본 레이아웃 파일 생성:
   - resources/views/layouts/app.blade.php
   - 네비게이션 바 포함 (홈, 수업 목록, 내 예약, 수업 등록)
   - Tailwind CSS 적용
   - 반응형 디자인

## 레이아웃 구조

- 헤더: 사이트 제목 "ClassBook" + 네비게이션 메뉴
- 메인 컨텐츠 영역: @yield('content')
- 푸터: 간단한 저작권 정보

## 색상 테마

- Primary: Indigo (Tailwind의 indigo-600)
- Secondary: Purple
- 배경: Gray-50
- 카드: White with shadow

기대 결과: Laravel 13.x 프로젝트가 생성되고, SQLite 데이터베이스 설정이 완료됩니다. Tailwind CSS가 설치되어 기본 레이아웃 파일이 생성되며, 네비게이션 바가 포함된 반응형 레이아웃이 완성됩니다. 브라우저에서 프로젝트를 실행하면 헤더와 네비게이션이 보이는 기본 페이지가 표시됩니다.

2
Step 2
# 데이터베이스 마이그레이션 및 모델 생성

클래스 수업과 예약을 위한 데이터베이스 구조를 설계하고 구현해주세요.

## 요구사항

### 1. Classes (수업) 테이블 생성

- id (primary key)
- title (수업명, string, required)
- description (수업 설명, text, required)
- instructor (강사명, string, required)
- category (카테고리, string: 요가/필라테스/댄스/기타)
- difficulty (난이도, string: 초급/중급/고급)
- duration (수업 시간, integer, 분 단위)
- capacity (정원, integer, required)
- price (가격, decimal, required)
- scheduled_at (수업 일시, datetime, required)
- image_url (이미지 URL, string, nullable)
- timestamps

### 2. Bookings (예약) 테이블 생성

- id (primary key)
- class_id (외래키, classes 테이블 참조)
- customer_name (예약자 이름, string, required)
- customer_email (이메일, string, required)
- customer_phone (전화번호, string, required)
- status (상태, string: confirmed/cancelled, default: confirmed)
- timestamps

### 3. Eloquent 모델 생성

- App\Models\ClassModel (Classes 테이블용, 'Class'는 예약어이므로 ClassModel 사용)
- App\Models\Booking
- 관계 설정:
  - ClassModel hasMany Bookings
  - Booking belongsTo ClassModel

### 4. 시더(Seeder) 생성

- 최소 5개의 샘플 클래스 수업 데이터 생성
- 각 수업마다 1-3개의 예약 데이터 생성
- 다양한 카테고리, 난이도, 날짜로 구성

## 실행 명령

마이그레이션 실행 및 시더 실행까지 완료해주세요.

기대 결과: classes와 bookings 테이블이 생성되고, ClassModel과 Booking 모델이 생성됩니다. 모델 간 관계가 정의되며, 시더를 통해 샘플 데이터가 데이터베이스에 입력됩니다. 마이그레이션과 시더가 성공적으로 실행되어 테스트용 데이터가 준비됩니다.

3
Step 3
# 수업 목록 및 상세 페이지 구현

클래스 수업을 조회할 수 있는 목록 페이지와 상세 페이지를 만들어주세요.

## 요구사항

### 1. ClassController 생성

- index() 메서드: 모든 수업 목록 조회 (최신순 정렬)
- show($id) 메서드: 특정 수업 상세 정보 조회
  - 현재 예약된 인원 수 계산 (status='confirmed'인 예약만)
  - 남은 좌석 수 계산

### 2. 라우트 설정

- GET /classes - 수업 목록
- GET /classes/{id} - 수업 상세

### 3. 뷰 파일 생성

#### resources/views/classes/index.blade.php

- 그리드 레이아웃 (3열, 반응형)
- 각 수업을 카드 형태로 표시
- 카드 내용:
  - 수업명 (제목)
  - 강사명
  - 카테고리 배지
  - 난이도 배지
  - 수업 일시 (읽기 쉬운 형식)
  - 가격
  - 정원 정보 (예: "8/10명")
  - "상세보기" 버튼

#### resources/views/classes/show.blade.php

- 수업 상세 정보 전체 표시
- 이미지 (있는 경우)
- 수업 설명 (description)
- 수업 시간 (duration)
- 예약 가능 여부 표시
- "예약하기" 버튼 (정원이 꽉 찬 경우 비활성화)
- 현재 예약 현황 표시

### 4. 스타일링

- Tailwind CSS 사용
- 카테고리별 색상 구분 (요가: green, 필라테스: blue, 댄스: pink 등)
- 난이도별 배지 색상 (초급: gray, 중급: yellow, 고급: red)
- 호버 효과 및 그림자 효과

### 5. 홈페이지 연결

- routes/web.php에서 루트 경로('/')를 classes.index로 리다이렉트

기대 결과: 수업 목록 페이지가 생성되어 모든 클래스 수업이 그리드 형태의 카드로 표시됩니다. 각 카드를 클릭하면 상세 페이지로 이동하며, 상세 페이지에서는 수업의 모든 정보와 현재 예약 현황을 확인할 수 있습니다. 정원이 꽉 찬 경우 예약하기 버튼이 비활성화됩니다. Tailwind CSS로 깔끔하고 현대적인 디자인이 적용됩니다.

4
Step 4
# 예약 기능 구현

사용자가 클래스 수업을 예약할 수 있는 기능을 구현해주세요.

## 요구사항

### 1. BookingController 생성

- create($classId) 메서드: 예약 폼 표시
- store(Request $request) 메서드: 예약 저장
  - 유효성 검사:
    - customer_name: required, string, max:100
    - customer_email: required, email
    - customer_phone: required, string
    - class_id: required, exists:classes,id
  - 정원 초과 체크:
    - 해당 수업의 confirmed 상태 예약 수 확인
    - 정원 초과 시 에러 메시지와 함께 리다이렉트
  - 예약 저장 성공 시 성공 메시지와 함께 예약 확인 페이지로 리다이렉트

### 2. 라우트 설정

- GET /classes/{id}/book - 예약 폼
- POST /bookings - 예약 저장

### 3. 뷰 파일 생성

#### resources/views/bookings/create.blade.php

- 예약할 수업 정보 요약 표시 (카드 형태)
- 예약 폼:
  - 이름 입력 필드
  - 이메일 입력 필드
  - 전화번호 입력 필드
  - 개인정보 수집 동의 체크박스 (필수)
  - "예약하기" 버튼
- 유효성 검사 에러 메시지 표시
- 정원 초과 시 경고 메시지 표시

### 4. 수업 상세 페이지 수정

- classes/show.blade.php에서 "예약하기" 버튼을 클릭하면 예약 폼 페이지로 이동하도록 링크 연결
- 정원이 꽉 찬 경우 버튼을 비활성화하고 "마감" 표시

### 5. 플래시 메시지 처리

- 레이아웃 파일(app.blade.php)에 성공/에러 메시지 표시 영역 추가
- Tailwind CSS로 스타일링 (성공: green, 에러: red)
- Alpine.js 또는 간단한 JavaScript로 자동 숨김 기능 추가 (5초 후)

기대 결과: 수업 상세 페이지에서 "예약하기" 버튼을 클릭하면 예약 폼 페이지로 이동합니다. 폼에서 이름, 이메일, 전화번호를 입력하고 제출하면 예약이 생성됩니다. 정원 초과 시 예약이 거부되고 에러 메시지가 표시됩니다. 예약 성공 시 성공 메시지가 표시되며, 유효성 검사 에러가 있는 경우 각 필드 아래에 에러 메시지가 표시됩니다.

5
Step 5
# 내 예약 목록 및 취소 기능 구현

사용자가 자신의 예약을 조회하고 취소할 수 있는 기능을 구현해주세요.

## 요구사항

### 1. BookingController 메서드 추가

- index() 메서드: 모든 예약 목록 조회 (최신순 정렬)
  - 수업 정보와 함께 조회 (Eager Loading)
  - status='confirmed'인 예약만 표시
- myBookings() 메서드: 이메일 검색 기능
  - GET 파라미터로 이메일 받기
  - 해당 이메일로 예약한 목록 조회
- destroy($id) 메서드: 예약 취소
  - status를 'cancelled'로 변경 (실제 삭제는 하지 않음)
  - 성공 메시지와 함께 리다이렉트

### 2. 라우트 설정

- GET /bookings - 전체 예약 목록 (관리용)
- GET /my-bookings - 내 예약 조회 페이지
- DELETE /bookings/{id} - 예약 취소

### 3. 뷰 파일 생성

#### resources/views/bookings/my-bookings.blade.php

- 이메일 검색 폼:
  - 이메일 입력 필드
  - "내 예약 조회" 버튼
- 예약 목록 표시 (검색 후):
  - 테이블 또는 카드 형태
  - 각 예약 정보:
    - 수업명
    - 수업 일시
    - 예약자 정보
    - 예약 상태
    - "취소하기" 버튼 (확인 다이얼로그 포함)
- 예약이 없는 경우 안내 메시지

#### resources/views/bookings/index.blade.php (관리자용)

- 모든 예약 목록 테이블 형태로 표시
- 수업명, 예약자, 예약 일시, 상태 등
- 상태별 필터링 (전체/확정/취소)

### 4. 예약 취소 확인 다이얼로그

- Alpine.js 또는 JavaScript로 "정말 취소하시겠습니까?" 확인 창 구현
- 확인 시에만 DELETE 요청 전송

### 5. 네비게이션 바 업데이트

- "내 예약" 링크를 /my-bookings로 연결
- 현재 페이지 활성화 표시 (active 상태)

기대 결과: 내 예약 페이지에서 이메일을 입력하면 해당 이메일로 예약한 수업 목록이 표시됩니다. 각 예약 항목에는 취소하기 버튼이 있으며, 클릭 시 확인 다이얼로그가 표시되고 확인하면 예약이 취소됩니다. 취소된 예약은 목록에서 사라지며, 성공 메시지가 표시됩니다. 관리자용 전체 예약 목록 페이지도 생성되어 모든 예약을 조회할 수 있습니다.

6
Step 6
# 수업 등록 기능 구현 (관리자용)

새로운 클래스 수업을 등록할 수 있는 기능을 구현해주세요.

## 요구사항

### 1. ClassController 메서드 추가

- create() 메서드: 수업 등록 폼 표시
- store(Request $request) 메서드: 수업 저장
  - 유효성 검사:
    - title: required, string, max:200
    - description: required, string
    - instructor: required, string, max:100
    - category: required, in:요가,필라테스,댄스,기타
    - difficulty: required, in:초급,중급,고급
    - duration: required, integer, min:30, max:180
    - capacity: required, integer, min:1, max:50
    - price: required, numeric, min:0
    - scheduled_at: required, date, after:now
    - image_url: nullable, url
  - 저장 성공 시 수업 상세 페이지로 리다이렉트

### 2. 라우트 설정

- GET /classes/create - 수업 등록 폼
- POST /classes - 수업 저장

### 3. 뷰 파일 생성

#### resources/views/classes/create.blade.php

- 수업 등록 폼:
  - 수업명 입력 필드
  - 수업 설명 텍스트 영역 (textarea)
  - 강사명 입력 필드
  - 카테고리 선택 (드롭다운: 요가, 필라테스, 댄스, 기타)
  - 난이도 선택 (라디오 버튼: 초급, 중급, 고급)
  - 수업 시간 입력 (분 단위, number input)
  - 정원 입력 (number input)
  - 가격 입력 (number input)
  - 수업 일시 선택 (datetime-local input)
  - 이미지 URL 입력 (선택)
  - "등록하기" 버튼
- 유효성 검사 에러 메시지 표시
- 입력 필드별 도움말 텍스트 추가

### 4. 스타일링

- 폼 레이아웃: 2열 그리드 (반응형)
- 입력 필드 스타일: Tailwind CSS의 form 스타일 적용
- 에러 메시지: 빨간색, 작은 텍스트
- 필수 필드 표시 (별표)

### 5. 네비게이션 바 업데이트

- "수업 등록" 링크를 /classes/create로 연결
- 아이콘 추가 (+ 아이콘)

### 6. 추가 기능

- 폼 제출 시 로딩 상태 표시 (버튼 비활성화 + 스피너)
- 날짜/시간 입력 필드에 최소값 설정 (현재 시각 이후만 선택 가능)
- 가격 입력 시 원화 표시 (₩)

## 완성 확인

모든 기능이 구현되면 다음을 테스트해주세요:

1. 수업 등록 폼에서 새 수업 생성
2. 생성된 수업이 목록에 표시되는지 확인
3. 생성된 수업 예약 가능 여부 확인
4. 정원 초과 시 예약 차단 확인
5. 내 예약 조회 및 취소 기능 확인

모든 페이지가 반응형으로 작동하고, 에러 처리가 적절하게 되는지 최종 점검해주세요.

기대 결과: 수업 등록 페이지가 생성되어 관리자가 새로운 클래스 수업을 등록할 수 있습니다. 폼에서 모든 필수 정보를 입력하고 제출하면 새 수업이 생성되고 목록에 표시됩니다. 유효성 검사가 작동하여 잘못된 입력은 거부되고 에러 메시지가 표시됩니다. 전체 시스템이 완성되어 수업 조회, 예약, 취소, 등록의 모든 기능이 원활하게 작동합니다. 반응형 디자인이 적용되어 모바일 기기에서도 잘 보입니다.

제출된 작품 (0)

로그인 후 제출

아직 제출된 작품이 없습니다. 첫 번째 도전자가 되어보세요!

댓글 (0)

로그인 후 댓글을 남길 수 있습니다.
아직 댓글이 없습니다. 첫 번째 댓글을 남겨보세요!