Laravel 할인 쿠폰 발급기 - 간단한 프로모션 관리
coupon-generator-laravel
문제 설명
Laravel 할인 쿠폰 발급기
카페나 소규모 상점에서 사용할 수 있는 간단한 쿠폰 발급 시스템을 만들어봅니다. 관리자가 쿠폰 코드를 생성하고, 고객이 쿠폰 코드를 조회하여 할인 정보를 확인할 수 있는 웹 애플리케이션입니다.
필수 기능
- 쿠폰 생성: 쿠폰 이름, 할인율(또는 할인 금액), 유효기간 입력
- 쿠폰 목록: 생성된 모든 쿠폰을 테이블 형태로 표시 (이름, 코드, 할인율, 유효기간, 사용여부)
- 쿠폰 코드 자동 생성: 랜덤 8자리 영문+숫자 조합 (예: AB12CD34)
- 쿠폰 조회 페이지: 고객이 쿠폰 코드를 입력하면 할인 정보 표시
- 쿠폰 사용 처리: 조회 페이지에서 '사용하기' 버튼 클릭 시 쿠폰 상태를 '사용됨'으로 변경
- 유효기간 검증: 만료된 쿠폰은 사용 불가 메시지 표시
- SQLite 데이터베이스 사용
UI 요구사항
- Tailwind CSS로 깔끔한 카드 레이아웃
- 관리자 페이지(쿠폰 생성/목록)와 고객 페이지(쿠폰 조회) 분리
- 반응형 디자인 (모바일에서도 잘 보이도록)
- 쿠폰 상태에 따라 색상 구분 (사용 가능: 초록, 사용됨: 회색, 만료: 빨강)
보너스 기능 (선택)
- 쿠폰 삭제 기능
- 쿠폰 사용 통계 (전체 생성 수, 사용된 수, 사용률 표시)
- 쿠폰 코드 복사 버튼
- 만료 임박 쿠폰 강조 표시 (3일 이내)
제약 조건
- • Laravel 13.x 사용 (최신 버전)
- • Blade 템플릿 엔진으로 뷰 작성 (React/Vue 사용 금지)
- • Tailwind CSS로 스타일링
- • SQLite 데이터베이스 사용
- • CSRF 토큰 보호 적용
- • 라우트는 web.php에 정의
- • Eloquent ORM으로 데이터베이스 조작
- • 폼 유효성 검사 포함 (할인율 0~100%, 유효기간 미래 날짜)
프롬프트 레시피
아래 프롬프트를 순서대로 AI에게 보내면 됩니다. 복사 버튼을 눌러 바로 사용하세요.
mkdir coupon-generator-laravel && cd coupon-generator-laravel 이 폴더에서 Laravel 13.x 프로젝트를 시작합니다. Laravel 13.x 신규 프로젝트를 생성하고 기본 설정을 해주세요: - `composer create-project laravel/laravel .` 명령으로 현재 폴더에 Laravel 설치 - `.env` 파일에서 DB_CONNECTION을 sqlite로 변경 - `database/database.sqlite` 파일 생성 - Tailwind CSS 설치 및 설정 (`npm install -D tailwindcss postcss autoprefixer && npx tailwindcss init -p`) - `tailwind.config.js`에서 content 경로를 `["./resources/**/*.blade.php", "./resources/**/*.js"]`로 설정 - `resources/css/app.css`에 Tailwind 디렉티브 추가 - `resources/views/layouts/app.blade.php` 레이아웃 파일 생성 (Tailwind CSS 포함, 네비게이션 바 포함) 프로젝트 구조와 기본 설정이 완료되었는지 확인해주세요.
기대 결과: Laravel 13.x 프로젝트가 생성되고, SQLite 데이터베이스 연결이 설정되며, Tailwind CSS가 설치됩니다. 기본 레이아웃 파일이 생성되어 네비게이션(관리자/고객 페이지 링크)이 포함됩니다.
쿠폰 데이터를 저장할 데이터베이스 구조를 만들어주세요: 1. `Coupon` 모델과 마이그레이션 생성: `php artisan make:model Coupon -m` 2. 마이그레이션 파일(`database/migrations/xxxx_create_coupons_table.php`)에 다음 컬럼 정의: - `name`: 쿠폰 이름 (string, 예: "신규 회원 할인") - `code`: 쿠폰 코드 (string, unique, 8자리 영문+숫자) - `discount_type`: 할인 타입 (enum: 'percentage', 'fixed', 기본값 'percentage') - `discount_value`: 할인 값 (decimal, 10,2 - 퍼센트면 0~100, 고정 금액이면 원 단위) - `expires_at`: 유효기간 (datetime) - `is_used`: 사용 여부 (boolean, 기본값 false) - `used_at`: 사용 일시 (datetime, nullable) - timestamps (created_at, updated_at) 3. `Coupon` 모델(`app/Models/Coupon.php`)에 fillable 속성 추가 및 캐스팅 설정: - `$fillable = ['name', 'code', 'discount_type', 'discount_value', 'expires_at', 'is_used', 'used_at'];` - `$casts = ['expires_at' => 'datetime', 'used_at' => 'datetime', 'is_used' => 'boolean'];` 4. 마이그레이션 실행: `php artisan migrate` 데이터베이스 테이블이 생성되었는지 확인해주세요.
기대 결과: coupons 테이블이 SQLite 데이터베이스에 생성되고, Coupon 모델이 준비됩니다. 마이그레이션이 성공적으로 실행됩니다.
관리자용 쿠폰 생성 및 목록 페이지를 만들어주세요:
1. `CouponController` 생성: `php artisan make:controller CouponController`
2. `routes/web.php`에 라우트 추가:
- `GET /admin/coupons` -> `CouponController@index` (쿠폰 목록)
- `GET /admin/coupons/create` -> `CouponController@create` (쿠폰 생성 폼)
- `POST /admin/coupons` -> `CouponController@store` (쿠폰 저장)
3. `CouponController`에 메서드 구현:
- `index()`: 모든 쿠폰을 최신순으로 조회하여 `admin.coupons.index` 뷰로 전달
- `create()`: `admin.coupons.create` 뷰 반환
- `store(Request $request)`:
- 유효성 검사: name(필수), discount_type(필수, in:percentage,fixed), discount_value(필수, numeric, min:0), expires_at(필수, date, after:today)
- 8자리 랜덤 쿠폰 코드 생성 (영문 대문자+숫자, 중복 체크)
- Coupon 모델로 저장
- 성공 메시지와 함께 목록 페이지로 리다이렉트
4. 뷰 파일 생성:
- `resources/views/admin/coupons/index.blade.php`: 쿠폰 목록 테이블 (이름, 코드, 할인 정보, 유효기간, 상태, 생성일)
- 상태 배지: 사용 가능(초록), 사용됨(회색), 만료(빨강)
- 테이블은 Tailwind로 스타일링
- `resources/views/admin/coupons/create.blade.php`: 쿠폰 생성 폼
- 쿠폰 이름, 할인 타입(라디오 버튼), 할인 값, 유효기간(date input) 입력
- CSRF 토큰 포함
- 유효성 검사 에러 메시지 표시
5. 레이아웃 파일의 네비게이션에 "관리자" 링크 추가 (쿠폰 목록으로 이동)
Tailwind CSS로 깔끔한 카드 레이아웃과 폼 스타일을 적용해주세요.
기대 결과: 관리자가 쿠폰을 생성할 수 있는 폼과 생성된 쿠폰 목록을 볼 수 있는 페이지가 완성됩니다. 쿠폰 코드는 자동으로 생성되며, 유효성 검사가 작동합니다. 쿠폰 상태가 색상으로 구분되어 표시됩니다.
고객용 쿠폰 조회 및 사용 페이지를 만들어주세요:
1. `routes/web.php`에 라우트 추가:
- `GET /` -> 홈 페이지 (쿠폰 조회 페이지로 리다이렉트 또는 환영 메시지)
- `GET /coupons/check` -> `CouponController@checkForm` (쿠폰 조회 폼)
- `POST /coupons/check` -> `CouponController@check` (쿠폰 코드 검증 및 정보 표시)
- `POST /coupons/{coupon}/use` -> `CouponController@use` (쿠폰 사용 처리)
2. `CouponController`에 메서드 추가:
- `checkForm()`: `coupons.check` 뷰 반환
- `check(Request $request)`:
- 유효성 검사: code(필수, string)
- 입력된 코드로 쿠폰 검색
- 쿠폰이 없으면 "존재하지 않는 쿠폰입니다" 메시지
- 쿠폰이 있으면:
- 만료 여부 체크 (`expires_at < now()`)
- 사용 여부 체크 (`is_used == true`)
- 상태에 따라 메시지와 함께 쿠폰 정보를 `coupons.result` 뷰로 전달
- `use(Coupon $coupon)`:
- 쿠폰이 사용 가능한지 검증 (만료 안됨, 사용 안됨)
- `is_used`를 true로, `used_at`을 현재 시간으로 업데이트
- 성공 메시지와 함께 조회 페이지로 리다이렉트
3. 뷰 파일 생성:
- `resources/views/coupons/check.blade.php`: 쿠폰 코드 입력 폼
- 큰 입력 필드와 "조회하기" 버튼
- CSRF 토큰 포함
- `resources/views/coupons/result.blade.php`: 쿠폰 조회 결과
- 쿠폰 정보 카드 (이름, 코드, 할인 정보, 유효기간)
- 상태별 메시지:
- 사용 가능: "사용하기" 버튼 표시 (POST /coupons/{id}/use)
- 사용됨: "이미 사용된 쿠폰입니다" (회색 배지)
- 만료: "유효기간이 만료된 쿠폰입니다" (빨간 배지)
- 다시 조회하기 버튼
4. 레이아웃 파일의 네비게이션에 "쿠폰 조회" 링크 추가
Tailwind CSS로 중앙 정렬된 큰 입력 폼과 결과 카드를 디자인해주세요. 모바일에서도 잘 보이도록 반응형으로 만들어주세요.
기대 결과: 고객이 쿠폰 코드를 입력하여 할인 정보를 조회할 수 있고, 사용 가능한 쿠폰은 '사용하기' 버튼으로 사용 처리할 수 있습니다. 만료되거나 이미 사용된 쿠폰은 적절한 메시지가 표시됩니다. 깔끔하고 직관적인 UI가 완성됩니다.
제출된 작품 (0)
로그인 후 제출아직 제출된 작품이 없습니다. 첫 번째 도전자가 되어보세요!